Kubernetes删除NetworkPolicy后Pod通信超时排查(Cilium)
问题排查与修复方案
该故障为使用Cilium作为CNI时的典型策略残留问题,原生kubectl get networkpolicy仅能查询Kubernetes内置的NetworkPolicy资源,无法覆盖Cilium自定义的策略类型,按以下步骤操作即可修复:
- 排查Cilium自定义策略残留
Cilium独立维护两类自定义策略CRD,这类资源不会随原生NetworkPolicy的删除自动清除:- 命名空间维度:
CiliumNetworkPolicy - 集群全局维度:
CiliumClusterwideNetworkPolicy
执行以下命令扫描全集群的Cilium自定义策略:
重点排查两类规则:一是测试期间创建的匹配staging命名空间Pod标签的拒绝规则,二是配置了默认拒绝(default-deny)逻辑的全局/命名空间级规则,这类规则即使在原生NetworkPolicy全部删除的场景下也会持续生效,找到后直接删除对应策略资源即可。# 扫描所有命名空间下的CiliumNetworkPolicy kubectl get ciliumnetworkpolicy -A # 扫描集群全局范围的Cilium策略 kubectl get ciliumclusterwidenetworkpolicy - 命名空间维度:
- 修复Cilium Agent策略缓存不一致问题
如果未扫描到任何Cilium自定义策略,属于删除策略后Cilium Agent本地缓存未同步的偶发异常,执行以下命令强制重启所有Cilium Agent刷新规则缓存:
等待所有Cilium Pod状态变为Running后,重新测试Pod间连通性。kubectl -n kube-system rollout restart daemonset/cilium - 精准定位拦截规则
上述操作无效时,使用Cilium内置的策略跟踪工具定位具体丢包原因:- 先获取两个业务Pod的IP:
kubectl -n staging get pod -o wide- 进入任意Cilium Agent Pod执行策略跟踪命令,将命令中占位符替换为实际查到的Pod IP:
命令输出会明确标记拦截流量的策略ID,根据ID定位并删除对应残留规则即可。kubectl -n kube-system exec -it ds/cilium -- cilium policy trace -s <service-a-pod-ip> -d <service-b-pod-ip> --dport 8080
注:当前环境下的Namespace、Deployment、Service配置均无问题,busybox的nc监听命令也符合测试要求,不需要调整业务侧资源配置,故障点完全在Cilium策略层。
内容的提问来源于stack exchange,提问作者Esben Eickhardt
相关产品推荐
相关产品推荐

