部署Nginx Ingress K8s Controller时Pod持续CrashLoopBackOff求助
Exit Code 255一般意味着进程异常终止,结合你用官方Manifest部署的场景,以下是几个高频排查方向:
权限配置缺失
Nginx Ingress Controller需要访问K8s API、挂载特定目录或使用80/443这类特权端口。如果绑定的ServiceAccount权限不足,或者Pod的SecurityContext没配置对,启动就会失败。
排查命令:kubectl describe pod <你的IngressPod名称> -n <部署的命名空间>重点看Events里的权限相关报错,比如
permission denied,同时检查ServiceAccount绑定的ClusterRole是否包含必要的API权限(比如官方Manifest里的nginx-ingress-clusterrole)。API Server连接失败
Pod无法和K8s API Server通信,比如节点DNS解析异常、网络策略拦截了API请求,或者API地址配置错误。
排查命令:kubectl logs <你的IngressPod名称> -n <部署的命名空间>看日志里有没有
connection refused、timeout这类API连接报错。如果能进入Pod,还可以执行curl https://kubernetes.default.svc测试连通性。自定义配置错误
如果你修改了官方的ConfigMap或IngressClass配置,可能存在语法错误或参数不兼容的情况,导致Controller启动时加载配置失败。
排查命令:kubectl get configmap <关联的IngressConfigMap名称> -n <部署的命名空间> -o yaml验证Nginx配置语法是否正确,同时看Pod日志里的配置加载报错信息。
节点资源耗尽
虽然Exit Code 255不是OOM的典型返回码,但节点CPU、内存不足时,也可能导致进程异常退出。
排查命令:kubectl top node查看节点资源使用率,再结合
kubectl describe pod的Events部分,看有没有资源不足的提示。镜像兼容性问题
拉取的Ingress Controller镜像损坏,或者版本和你的K8s集群不兼容(比如用了v1.0+的Controller但集群是K8s 1.19及以下)。
排查命令:kubectl describe pod <你的IngressPod名称> -n <部署的命名空间>确认镜像拉取状态是
Success,同时对照官方文档检查版本适配关系。
内容的提问来源于stack exchange,提问作者Ahtasham Hassan

