Проверка работоспособности GCE не работает с входным контроллером nginx

#kubernetes #google-kubernetes-engine #kubernetes-health-check

#kubernetes #google-kubernetes-engine #kubernetes-проверка работоспособности

Вопрос:

Я устанавливаю входной контроллер nginx (k8s.gcr.io/ingress-nginx/controller:v0.40.2 ) на кластере GKE v1.17.12-gke.1504 с 3 узлами.

Контроллер ingress-nginx развертывается как развертывание; Я не хочу развертывать его как набор демонов, потому что в будущем у меня будет кластер со многими узлами, и это будет пустой тратой ресурсов.

Создание ресурсов kubernetes завершается нормально, и балансировщик нагрузки создается в GCE, но связанная проверка работоспособности отображается как сбой.

Я обратился к каждому из узлов кластера, чтобы проверить конечную точку проверки работоспособности, и я вижу, что она работает только на том узле, где был создан модуль ingress-nginx-controller.

В узле, где был поднят модуль, он возвращает 200:

 $ curl localhost:32203/healthz -v
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 32203 (#0)
> GET /healthz HTTP/1.1
> Host: localhost:32203
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: application/json
< Date: Fri, 30 Oct 2020 09:03:42 GMT
< Content-Length: 111
<
{
        "service": {
                "namespace": "ingress-nginx",
                "name": "ingress-nginx-controller"
        },
        "localEndpoints": 1
* Connection #0 to host localhost left intact
}* Closing connection 0
  

Но на узлах, где модуль не запущен, он возвращает 503:

 ~ $ curl localhost:32203/healthz -v
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to localhost (127.0.0.1) port 32203 (#0)
> GET /healthz HTTP/1.1
> Host: localhost:32203
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 503 Service Unavailable
< Content-Type: application/json
< Date: Fri, 30 Oct 2020 09:03:20 GMT
< Content-Length: 111
<
{
        "service": {
                "namespace": "ingress-nginx",
                "name": "ingress-nginx-controller"
        },
        "localEndpoints": 0
* Connection #0 to host localhost left intact
}* Closing connection 0
  

Как я могу заставить проверку работоспособности работать без необходимости поднимать модуль из ingress-nginx-controller на каждом узле?

Ответ №1:

проблема заключалась в том, что я настроил externalTrafficPolicy: "Local" в службе.

https://kubernetes.io/docs/tutorials/services/source-ip/