You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

三、修复流程总结

  1. 先移除无效的--controller-class启动参数,解决Pod启动参数错误
  2. 对异常节点调整iptables至legacy模式,重启相关服务
  3. 验证CNI插件状态,确保网络组件正常运行
  4. 确认Ingress控制器Pod的安全上下文配置正确,具备必要网络权限

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 20:45:32