GCE健康检查无法与Ingress Nginx控制器一起使用

问题描述

我要在具有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"

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...