Входной контроллер nginx 0.26.1 возвращает 504 (время ожидания при подключении к восходящему потоку) на GKE v1.14 - PullRequest
0 голосов
/ 07 ноября 2019

Я недавно обновил свой кластер gke до версии 1.14.x и nginx до последней версии 0.26.1. В какой-то момент мои входы перестали работать.

Например, при попытке доступа к Nexus с помощью curl INGRESS_IP -H "host:nexus.myorg.com", это журналы входного контроллера:

2019/11/07 08:35:49 [error] 350#350: *2664 upstream timed out (110: Connection timed out) while connecting to upstream, client: 82.81.2.76, server: nexus.myorg.com, request: "GET / HTTP/1.1", upstream: "http://10.8.25.3:8081/", host: "nexus.myorg.com"
2019/11/07 08:35:54 [error] 350#350: *2664 upstream timed out (110: Connection timed out) while connecting to upstream, client: 82.81.2.76, server: nexus.myorg.com, request: "GET / HTTP/1.1", upstream: "http://10.8.25.3:8081/", host: "nexus.myorg.com"
2019/11/07 08:35:59 [error] 350#350: *2664 upstream timed out (110: Connection timed out) while connecting to upstream, client: 82.81.2.76, server: nexus.myorg.com, request: "GET / HTTP/1.1", upstream: "http://10.8.25.3:8081/", host: "nexus.myorg.com"
82.81.2.76 - - [07/Nov/2019:08:35:59 +0000] "GET / HTTP/1.1" 504 173 "-" "curl/7.64.1" 79 15.003 [some-namespace-nexus-service-8081] [] 10.8.25.3:8081, 10.8.25.3:8081, 10.8.25.3:8081 0, 0, 0 5.001, 5.001, 5.001 504, 504, 504 a03f13a3bfc943e44f2df3d82a6ecaa4

Как вы можете видеть, он пытаетсятрижды подключитесь к 10.8.25.3:8081, который является IP-адресом модуля, время ожидания во всех из них.

Я залез в модуль и получил доступ к модулю с использованием того же IP-адреса без проблем: curl 10.8.25.3:8081. Таким образом, служба настроена правильно.

Это мой входной конфиг:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  namespace: some-namespace
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/add-base-url: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 30M
spec:
  rules:
  - host: nexus.myorg.com
    http:
      paths:
      - backend:
          serviceName: nexus-service
          servicePort: 8081

Есть идеи, как решить эту проблему?

1 Ответ

2 голосов
/ 07 ноября 2019

Проблема была связана с сетевыми политиками. У нас есть некоторые политики, запрещающие доступ к модулям из других пространств имен и разрешающие доступ только из входного пространства имен

  apiVersion: extensions/v1beta1
  kind: NetworkPolicy
  metadata:
    name: allow-from-ingress-namespace
    namespace: some-namespace
  spec:
    ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            type: ingress
    podSelector: {}
    policyTypes:
    - Ingress

  apiVersion: extensions/v1beta1
  kind: NetworkPolicy
  metadata:
    name: deny-from-other-namespaces
    namespace: some-namespace
  spec:
    ingress:
    - from:
      - podSelector: {}
    podSelector: {}
    policyTypes:
    - Ingress

. При обновлении мы потеряли метку, которая соответствует политике (type = ingress). Простое добавление исправило проблему: kubectl label namespaces ingress-nginx type=ingress

...