容器网络排查实战:Pod 之间 ping 不通怎么办

Container Networking Troubleshooting: When Pods Cannot Ping Each Other

| David | 2026-09-12T19:09:03

最近在 K8s 集群里遇到一个诡异的网络问题:同一个节点的 Pod 之间可以通信,跨节点就不行。排查了两天终于找到了原因。

Encountered a strange K8s networking issue where same-node pods could communicate but cross-node traffic failed. Two days of debugging to find the root cause.

上周在生产环境的 K8s 集群里遇到了一个棘手的网络问题:部署在同一个节点上的 Pod 之间通信正常,但跨节点的 Pod 之间完全不通。 问题现象 新部署的服务 A 调用服务 B 超时,但只在 A 和 B 不在同一个节点时才出现。用 kubectl exec 进容器 ping 对方 Pod IP,同节点秒回,跨节点直接超时。 排查过程 1. 检查 CNI 插件 我们用的是 Calico,先检查 Calico 组件状态: kubectl get pods -n kube-system | grep calico # 所有 calico-node Pod 都是 Running 状态 calicoctl node status # 发现有一个节点的 BGP peer 状态是 Established 但路由表为空 2. 检查路由 在有问题的节点上查看路由表: ip route | grep bird # 发现缺少其他节点 Pod 网段的路由 3. 找到根因 最终发现是安全组的问题。运维同学之前加了一条 iptables 规则,限制了 IPIP 协议(Calico 默认用 IPIP 隧道做跨节点通信)。加了这条规则后,IPIP 封包被防火墙丢弃了。 解决方案 # 允许 IPIP 协议 iptables -A INPUT -p 4 -j ACCEPT iptables -A OUTPUT -p 4 -j ACCEPT 或者把 Calico 的网络模式从 IPIP 改成 VXLAN(使用 UDP 封装,更不容易被防火墙拦截)。 经验总结 容器网络问题排查的一般思路:先确认 CNI 插件状态 → 检查路由表 → 检查 iptables 规则 → 抓包分析。90% 的容器网络问题都出在安全组/防火墙规则上。


Hit a tricky K8s networking issue: same-node pod communication was fine, but cross-node traffic timed out. Root Cause An iptables rule blocking IPIP protocol, which Calico uses for cross-node tunneling. The encapsulated packets were being silently dropped by the firewall. Fix Allow IPIP protocol in iptables, or switch Calico from IPIP to VXLAN mode (UDP-based, less likely to be blocked). Lesson: 90% of container networking issues trace back to security group/firewall rules.

← Back to News