You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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.requestslimits,分配足够的资源,或者清理节点上的其他负载。
  • 如果探针配置错误:修改livenessProbe,使用容器端口而非Pod IP,或者确保控制器进程监听0.0.0.0而非仅127.0.0.1

内容的提问来源于stack exchange,提问作者hemaamahad

火山引擎 最新活动