K8s集群NGINX Ingress控制器Pod CrashLoopBackOff故障求助
Ingress控制器CrashLoopBackOff问题排查与修复
一、未知启动标志--controller-class问题处理
rancher/nginx-ingress-controller:nginx-0.43.0-rancher1版本不支持--controller-class启动参数,该参数是后续版本Ingress控制器才引入的配置项,这会直接导致Pod启动失败。
处理步骤:
- 查看Ingress控制器的部署配置(假设部署在kube-system命名空间,根据实际情况调整):
kubectl get daemonset nginx-ingress-controller -n kube-system -o yaml - 编辑配置文件,删除启动命令中的
--controller-class=xxx行:kubectl edit daemonset nginx-ingress-controller -n kube-system - 保存退出后,K8s会自动重启相关Pod,观察是否解决参数错误问题。
二、CNI网络插件无法创建iptables链问题处理
退出码2通常表示命令执行失败,结合iptables创建失败报错,从以下方向排查:
1. 检查节点iptables模式
K8s 1.20.x版本要求iptables使用legacy模式,若节点切换到nftables模式会导致CNI插件无法正常创建链:
- 查看当前iptables模式:
iptables --version - 若输出包含
nf_tables,切换回legacy模式:update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy - 重启kubelet和容器运行时生效:
systemctl restart kubelet systemctl restart containerd # 若使用docker则执行systemctl restart docker
2. 验证CNI插件状态
检查节点上的CNI插件Pod是否正常运行(以flannel为例,根据实际CNI调整标签):
kubectl get pods -n kube-system -l k8s-app=flannel
若存在异常Pod,删除后让K8s重新调度,或者查看CNI日志确认具体错误。
3. 检查Ingress控制器Pod权限确认
确保Ingress控制器Pod具备操作网络的权限,在部署配置的securityContext中添加必要能力:
securityContext: capabilities: add: - NET_ADMIN - NET_RAW privileged: true
若配置缺失,编辑Deployment/DaemonSet添加上述配置后重启Pod。
4. 修复节点iptables规则
对比正常节点的iptables规则,若异常节点缺失K8s相关链(如KUBE-*开头的链),可通过重启kubelet修复:
systemctl restart kubelet
三、修复流程总结
- 先移除无效的
--controller-class启动参数,解决Pod启动参数错误 - 对异常节点调整iptables至legacy模式,重启相关服务
- 验证CNI插件状态,确保网络组件正常运行
- 确认Ingress控制器Pod的安全上下文配置正确,具备必要网络权限
内容的提问来源于stack exchange,提问作者igorgbianchi
相关产品推荐
相关产品推荐

