Назад | Перейти на главную страницу

Ошибка 502 с nginx-ingress в Kubernetes для пользовательской конечной точки

У меня есть вход, который направляется к настраиваемой конечной точке, внешней по отношению к кластеру кубернетов. Служба прослушивает только HTTPS на порту 8006.

apiVersion: v1
kind: Service
metadata:
  name: pve
spec:
  ports:
    - protocol: TCP
      port: 8006
---
apiVersion: v1
kind: Endpoints
metadata:
  name: pve
subsets:
  - addresses:
      - ip: 10.0.1.2
    ports:
      - port: 8006
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: pve

  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/auth-tls-verify-client: "off"
    nginx.ingress.kubernetes.io/whitelist-source-range: "10.0.0.0/16"

spec:
  tls:
    - hosts:
        - pve.example.com
      secretName: pve-tls
  rules:
    - host: pve.example.com
      http:
        paths:
          - backend:
              serviceName: pve
              servicePort: 8006
            path: /

Выдает ошибку в модуле nginx:

10.0.0.25 - - [28 августа 2020: 01: 17: 58 +0000] "GET / HTTP / 1.1" 502 157 "-" "Mozilla / 5.0 (Windows NT 10.0; Win64; x64; rv: 79.0) Gecko / 20100101 Firefox / 79.0 "" - "

2020/08/28 01:17:58 [ошибка] 2609 # 2609: * 569 восходящее соединение преждевременно закрыто при чтении заголовка ответа от восходящего потока, клиент: 10.0.0.25, сервер: pve.example.com, запрос: "GET / HTTP /1.1 ", восходящий поток:" http://10.0.1.2:8006/ ", хост:" pve.example.com "

редактировать

После удаления протокола прокси выдает ошибку

10.0.10.1 - - [28 / августа / 2020: 02: 19: 18 +0000] "GET / HTTP / 1.1" 400 59 "-" "curl / 7.58.0" "-"

2020/08/28 02:19:26 [ошибка] 2504 # 2504: * 521 восходящее соединение преждевременно закрыто при чтении заголовка ответа от восходящего потока, клиент: 10.0.10.1, сервер: pve.example.com, запрос: "GET / HTTP /1.1 ", восходящий поток:" http://10.0.1.2:8006/ ", хост:" pve.example.com "

10.0.10.1 - - [28 / августа / 2020: 02: 19: 26 +0000] "GET / HTTP / 1.1" 502 157 "-" "curl / 7.58.0" "-"

 

И, если это актуально, моя конфигурация nginx, развернутая через helm char nginx-stable/nginx-ingress

  ## nginx configuration
  ## Ref: https://github.com/kubernetes/ingress/blob/master/controllers/nginx/configuration.md
  ##
  controller:
    config:
      entries:
        hsts-include-subdomains: "false"
        ssl-ciphers: "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4"
        ssl-protocols: "TLSv1.1 TLSv1.2"
    ingressClass: nginx
    service:
      externalTrafficPolicy: Local
      annotations:
        metallb.universe.tf/address-pool: default
  defaultBackend:
    enabled: true
  tcp:
    22: "gitlab/gitlab-gitlab-shell:22"

Эта аннотация, вероятно, является причиной проблемы.

    nginx.ingress.kubernetes.io/use-proxy-protocol: "true"

В документы штат:

Включает или отключает протокол PROXY для получения информации о клиентском подключении (реального IP-адреса), передаваемой через прокси-серверы и балансировщики нагрузки, такие как HAProxy и Amazon Elastic Load Balancer (ELB).

Если у вас нет балансировщика нагрузки перед вашим Ingress, который передает соединения с использованием протокола PROXY, тогда это не то, что вам нужно, и эта аннотация не должна присутствовать (или должна быть "false").