我正在具有 3 个节点的 GKE 集群 v1.17.12-gke.1504 上安装 nginx 入口 Controller (k8s.gcr.io/ingress-nginx/controller:v0.40.2)。
ingress-nginx-controller 作为 Deployment 进行部署;我不想将其部署为 DaemonSet,因为将来我将拥有一个包含许多节点的集群,这会浪费资源。
kubernetes 资源的创建顺利完成,并且在 GCE 中创建了负载均衡器,但关联的运行状况检查显示为失败。
我已经访问了每个集群节点来检查健康检查的端点,我发现它仅适用于创建了 ingress-nginx-controller pod 的节点。
在 pod 被发起的节点中,它返回 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
但是在 pod 未启动的节点上,它会返回 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 中取出 pod?
最佳答案
问题是我在服务中配置了 externalTrafficPolicy: "Local"
。
关于kubernetes - GCE 健康检查不适用于入口 nginx Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606973/