kubernetes - GCE 健康检查不适用于入口 nginx Controller

标签 kubernetes google-kubernetes-engine kubernetes-health-check

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

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

关于kubernetes - GCE 健康检查不适用于入口 nginx Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606973/

相关文章:

kubernetes - 如何在 OSX 上使用 Kubernetes 持久本地卷和 Minikube?

apache-spark - 我们如何使用 Spark 运算符设置内存和 CPU 资源限制?

google-cloud-platform - 将专用 GKE 集群专用端点转换为公共(public)端点

docker - Kubernetes、Flannel 和公开服务

Go Webapp 的 Dockerfile 目录结构

kubernetes - 如何降低kubernetes系统资源的CPU限制?

go - 无法连接到代理 "Certificate signed by unknown authority"

kubernetes - GKE Ingress 上的 gRPC 和 HTTP 服务器未能对 gRPC 后端进行运行状况检查

Kubernetes:如何以正确的方式删除 PV