Kubernetes Nginx-Ingress Controller存活探针失败问题求助
排查Nginx Ingress Controller存活探针失败问题
看起来你遇到了Nginx Ingress Controller Pod的存活探针连接拒绝问题,这种情况一般是控制器进程未正常启动、端口配置有误或者网络/权限问题导致的,我给你梳理几个排查步骤和常见解决方法:
1. 优先查看Pod日志与事件,定位启动失败根源
先获取Pod的日志,看看控制器启动时有没有报错信息:
kubectl logs -n ingress-nginx <你的Pod名称>
同时查看Pod的详细状态和事件,这里会暴露很多关键线索,比如镜像拉取失败、启动命令错误、资源不足等:
kubectl describe pod -n ingress-nginx <你的Pod名称>
2. 确认健康检查端口的监听状态
Nginx Ingress Controller默认的健康检查端点是/healthz,端口为10254。你可以进入Pod内部直接测试本地访问:
kubectl exec -n ingress-nginx <你的Pod名称> -- curl http://localhost:10254/healthz
如果本地都访问失败,说明控制器进程根本没监听这个端口,大概率是启动失败了。这时候可以检查容器内的端口监听情况:
kubectl exec -n ingress-nginx <你的Pod名称> -- netstat -tulpn
如果看不到0.0.0.0:10254的监听记录,那就要重点排查控制器的启动命令是否正确。
3. 检查Deployment的启动参数与探针配置
查看你的Deployment完整配置,特别是启动命令部分,确认是否包含--healthz-port=10254参数:
kubectl get deployment -n ingress-nginx nginx-ingress-controller -o yaml | grep -A 15 "command"
另外,检查存活探针的配置是否正确——正常的探针应该指向容器的10254端口,而非Pod的IP(比如你错误信息里的10.1.1.254),正确的探针配置示例:
livenessProbe: httpGet: path: /healthz port: 10254 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 10
如果你的探针指定了host: 10.1.1.254,而控制器只监听127.0.0.1,就会出现连接拒绝的情况。
4. 排查RBAC权限与节点资源
- RBAC权限:Nginx Ingress Controller需要访问Kubernetes API的权限,如果权限不足,控制器会启动失败。检查是否为Pod配置了正确的ServiceAccount,以及对应的ClusterRole和ClusterRoleBinding是否存在。
- 节点资源:如果节点的CPU或内存不足,控制器进程可能被OOM杀死。查看节点的资源使用情况:
kubectl describe node <Pod所在节点名称>
同时看Pod的状态事件里有没有OOMKilled的记录。
常见解决办法
- 如果日志显示API访问被拒绝:补全RBAC配置,确保Ingress Controller的ServiceAccount拥有足够的权限。
- 如果进程没监听10254端口:修正启动命令,确保包含
--healthz-port=10254,并根据日志解决控制器启动失败的根源问题。 - 如果是OOM问题:调整Pod的
resources.requests和limits,分配足够的资源,或者清理节点上的其他负载。 - 如果探针配置错误:修改livenessProbe,使用容器端口而非Pod IP,或者确保控制器进程监听
0.0.0.0而非仅127.0.0.1。
内容的提问来源于stack exchange,提问作者hemaamahad




