GKE NEG Ingress всегда возвращает 502 Bad Gateway - PullRequest
0 голосов
/ 29 февраля 2020

У меня есть StatefulSet, служба с NEG и Ingress, настроенные в кластере Google Cloud Kubernetes Engine.

Каждый объект нагрузки и сети готов и исправен. Вход создан, и статус NEG обновляется для всех сервисов. Параметры VP C -native (Alias-IP) и HTTP Load Balancer включены для кластера.

Но когда я пытаюсь получить доступ к своему приложению, используя путь, указанный в моем Ingress, я всегда получаю ошибку 502 (Bad Gateway).

Вот моя конфигурация (имена отредактированы, включая имя изображения):

apiVersion: v1
kind: Service
metadata:
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
  labels:
    app: myapp
  name: myapp
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: tcp
  selector:
    app: myapp
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: myapp
  name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  serviceName: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        livenessProbe:
          httpGet:
            path: /
            port: tcp
            scheme: HTTP
          initialDelaySeconds: 60
        image: myapp:8bebbaf
        ports:
        - containerPort: 1880
          name: tcp
          protocol: TCP
        readinessProbe:
          failureThreshold: 1
          httpGet:
            path: /
            port: tcp
            scheme: HTTP
        volumeMounts:
        - mountPath: /data
          name: data
      securityContext:
        fsGroup: 1000
      terminationGracePeriodSeconds: 10
  volumeClaimTemplates:
  - metadata:
      labels:
        app: myapp
      name: data
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myapp-ingress
spec:
  rules:
  - http:
      paths:
      - path: /workflow
        backend:
          serviceName: myapp
          servicePort: 80

Что с ним не так и как я могу это исправить?

1 Ответ

1 голос
/ 29 февраля 2020

После долгих копаний и испытаний я наконец-то обнаружил, что не так. Кроме того, похоже, что GKE NEG Ingress не очень стабилен (действительно, NEG находится в бета-версии) и не всегда соответствует спецификациям Kubernetes.

Была проблема с GKE Ingress , связанная с именованными портами в поле targetPort. Исправление реализовано и доступно в кластерной версии 1.16.0-gke.20 ( Release ), которая на сегодняшний день (февраль 2020 г.) доступна в Rapid Channel, но у меня нет протестировал исправление, так как у меня были другие проблемы со входом в версию с этого канала.

Таким образом, в основном есть 2 варианта, если у вас возникла та же проблема:

  1. Укажите Точный номер порта, а не имя порта в поле targetPort в вашем сервисе. Вот файл конфигурации с фиксированной службой из моего примера:

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        cloud.google.com/neg: '{"ingress": true}'
      labels:
        app: myapp
      name: myapp
    spec:
      ports:
      - port: 80
        protocol: TCP
        # !!!
        # targetPort: tcp
        targetPort: 1088
      selector:
        app: myapp
    
  2. Обновите кластер GKE до версии 1.16.0-gke.20 + (сам не тестировал).

...