#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"
в службе.