Nginx Kubernetes Ingress возвращает 502

Я пытаюсь развернуть простое приложение REST API в кластере Kubernetes в AWS EKS. Все остальное с обратным проксированием просто отлично.

Я использую следующую конфигурацию для развертывания. Модуль исправен, модуль перезапускается каждые 20 минут, потому что AWS прерывает соединение с моей базой данных бесплатного уровня разработки, но на всякий случай я запускаю несколько реплик.

Когда я пытаюсь подключиться к домену, я получаю ошибку 502 Bad Gateway. Я действительно не знаю, что происходит.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: xyz-microservice
spec:
  replicas: 4
  template:
    nodeSelector:
        node.kubernetes.io/role: worker
    tolerations:
      - effect: NoSchedule
        key: node.kubernetes.io/role
        operator: Equal
        value: worker
  selector:
    matchLabels:
      app: xyz-microservice
  template:
    metadata:
      labels:
        app: xyz-microservice
    spec:
      hostname: xyz-microservice
      containers:
      - name: xyz-microservice
        image:  redacted
        imagePullPolicy: Always
        env:
        - name: DB_USERNAME
          value: redacted
        - name: DB_PASSWORD
          value: redacted
        - name: DB_HOST
          value: redacted
        - name: DB_PORT
          value: "5432"
        - name: DB_NAME
          value: redacted
        resources:
          requests:
            memory: "32Mi"
            cpu: "80m"
          limits:
            memory: "128Mi"
            cpu: "100m"
        ports:
        - containerPort: 8080

---
apiVersion: v1
kind: Service
metadata:
  name: xyz-microservice-service
spec:
  type: ClusterIP
  selector:
    app: xyz-microservice
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

И это входная конфигурация:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "internal"
    forecastle.stakater.com/expose: "true"
    forecastle.stakater.com/appName: "XYZ Microservice"
    cert-manager.io/cluster-issuer: "letsencrypt-aws"
  name: xyz-microservice
spec:
  rules:
    - host: xyz.internal.staging.k8s.redacted
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: xyz-microservice-service
                port:
                  number: 8080
  tls:
    - hosts:
      - xyz.internal.staging.k8s.redacted
      secretName: xyz-microservice-tls

Это бы много значило, если бы кто-то мог провести меня через это.

Ваш Ingress указывает на порт 8080, но ваш Service выставляет порт 80; это почти наверняка просто опечатка

mdaniel 05.05.2022 21:11
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
0
1
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто имейте в виду, что почти каждый раз, когда вы получаете неверный шлюз 502 в nginx-ingress, это связано с проблемой привязки бэкэнд-порта/неправильными именами конфигурации бэкэнда и т. д.

Здесь ваш вход nginx настроен на перенаправление трафика с хоста «xyz.internal.staging.k8s.redacted» на порт 8080 вашей службы kubernetes «xyz-microservice-service».

Однако 8080 является целевым портом вашей службы. Нет открытого порта, который на самом деле 80.

Итак, чтобы решить эту проблему, просто измените порт серверной службы, например:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: "internal"
    forecastle.stakater.com/expose: "true"
    forecastle.stakater.com/appName: "XYZ Microservice"
    cert-manager.io/cluster-issuer: "letsencrypt-aws"
  name: xyz-microservice
spec:
  rules:
    - host: xyz.internal.staging.k8s.redacted
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: xyz-microservice-service
                port:
                  number: 80
  tls:
    - hosts:
      - xyz.internal.staging.k8s.redacted
      secretName: xyz-microservice-tls

(Или перенастройте порт вашей службы, чтобы он соответствовал порту входной конфигурации.)

Другие вопросы по теме