问题描述
我要在具有3个节点的GKE群集v1.17.12-gke.1504上安装nginx入口控制器(k8s.gcr.io/ingress-nginx/controller:v0.40.2)。
将ingress-nginx-controller部署为Deployment;我不想将其部署为DaemonSet,因为将来我将拥有一个包含许多节点的集群,这将浪费资源。
可以很好地创建kubernetes资源,并在GCE中创建了负载均衡器,但是相关的运行状况检查显示为失败。
我已经访问了每个群集节点以检查健康检查的端点,我发现它仅在创建了ingress-nginx-controller 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","localEndpoints": 0
* Connection #0 to host localhost left intact
}* Closing connection 0
如何在不从每个节点上的ingress-nginx-controller上提起吊舱的情况下运行健康检查?
解决方法
问题是我在服务中配置了externalTrafficPolicy: "Local"
。