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

Kubernetes集群无法ping通Pod IP、Service访问超时故障排查

Kubernetes Calico集群跨节点网络故障排查

集群基础配置

  • 集群类型:自建Kubernetes集群
  • Pod网段配置:podSubnet: 172.168.0.0/12
  • CNI网络插件:Calico
  • 核心故障:所有Pod跨节点访问失败,Service业务端口访问异常

故障详情

1. 跨节点Pod IP连通性异常

在k8s-master01节点查询kube-system命名空间Pod实例,metrics-server-545b8b99c6-r2ql5调度在k8s-node02节点,Pod IP为172.171.14.193,在master节点执行ping测试100%丢包,完全不通。
相关操作输出:

# on k8s-master01 node:
$ kubectl get po -n kube-system -o wide
metrics-server-545b8b99c6-r2ql5   1/1  Running 0 5d1h  172.171.14.193  k8s-node02     <none>           <none>

# ping 172.171.14.193 -c 2
PING 172.171.14.193 (172.171.14.193) 56(84) bytes of data.
^C
--- 172.171.14.193 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1016ms

2. 节点路由表采集

已采集两个故障节点的路由表信息:

  • k8s-master01节点路由表:
# route -n 
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.180.104.1    0.0.0.0         UG    0      0        0 eth0
10.180.104.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.161.125.0   10.180.104.110  255.255.255.192 UG    0      0        0 tunl0
172.162.195.0   10.180.104.109  255.255.255.192 UG    0      0        0 tunl0
172.169.92.64   10.180.104.108  255.255.255.192 UG    0      0        0 tunl0
172.169.244.192 0.0.0.0         255.255.255.255 UH    0      0        0 cali06e1673851f
172.169.244.192 0.0.0.0         255.255.255.192 U     0      0        0 *
172.171.14.192  10.180.104.111  255.255.255.192 UG    0      0        0 tunl0
  • k8s-node02节点路由表:
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.180.104.1    0.0.0.0         UG    0      0        0 eth0
10.180.104.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.169.254 10.180.104.11   255.255.255.255 UGH   0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.161.125.0   10.180.104.110  255.255.255.192 UG    0      0        0 tunl0
172.162.195.0   10.180.104.109  255.255.255.192 UG    0      0        0 tunl0
172.169.92.64   10.180.104.108  255.255.255.192 UG    0      0        0 tunl0
172.169.244.192 10.180.104.107  255.255.255.192 UG    0      0        0 tunl0
172.171.14.192  0.0.0.0         255.255.255.192 U     0      0        0 *
172.171.14.193  0.0.0.0         255.255.255.255 UH    0      0        0 cali872eed170f4
172.171.14.194  0.0.0.0         255.255.255.255 UH    0      0        0 cali7d7625dd37e
172.171.14.203  0.0.0.0         255.255.255.255 UH    0      0        0 calid4e258f95f6
172.171.14.204  0.0.0.0         255.255.255.255 UH    0      0        0 cali5cf96eb1028

3. Service访问异常

基于demo-nginx工作负载创建ClusterIP类型Servicemy-service,测试发现ClusterIP可以ping通,但80端口连接超时。
相关操作输出:

# kubectl describe svc my-service
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          app=demo-nginx
Type:              ClusterIP
IP Families:       <none>
IP:                10.100.75.139
IPs:               10.100.75.139
Port:              http  80/TCP
TargetPort:        80/TCP
Endpoints:         172.161.125.14:80,172.161.125.15:80,172.171.14.203:80
Session Affinity:  None
Events:            <none>

# ping 10.100.75.139 -c 1
PING 10.100.75.139 (10.100.75.139) 56(84) bytes of data.
64 bytes from 10.100.75.139: icmp_seq=1 ttl=64 time=0.077 ms

# nc -vz 10.100.75.139 80
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection timed out.

根因定位

从路由表和故障现象判断,核心问题有两个:

  1. 网段冲突+Docker iptables规则干扰:配置的Calico Pod网段172.168.0.0/12地址范围为172.160.0.0~172.175.255.255,完全覆盖Docker默认网桥的172.17.0.0/16网段。Docker服务默认会自动生成iptables转发规则,拦截非Docker网桥的网段转发流量,同时冲突的网段会导致部分路由转发异常,Calico下发的tunl0隧道转发规则被Docker规则覆盖。
  2. IPIP隧道流量可能被拦截:当前Calico使用IPIP模式(路由表存在tunl0接口),跨节点Pod流量会被封装为IP协议号4的报文在物理网络传输,如果节点本地防火墙、云平台安全组没有放通该协议流量,会导致封装后的报文被丢弃,跨节点通信失败。

补充说明:ClusterIP能ping通是因为ICMP报文由节点内核/kube-proxy直接响应,不经过后端Pod转发,所以不受跨节点隧道和Docker规则影响,才会出现能ping通但业务端口不通的现象。

修复步骤

  1. 所有节点调整Docker配置,解决网段冲突和iptables干扰
    编辑所有节点的Docker配置文件/etc/docker/daemon.json,添加以下配置(bip字段请选择和现有物理网段、Pod网段、Service网段都不重叠的私网网段即可):
    {
      "bip": "172.31.0.1/16",
      "iptables": false,
      "ip-masq": false
    }
    
    保存后执行以下命令重启Docker生效:
    systemctl daemon-reload
    systemctl restart docker
    
    重启后执行ip a show docker0确认网桥IP为新配置的网段,执行route -n确认原有172.17.0.0/16的路由条目消失。
  2. 放通集群节点间的网络策略
    检查节点本地firewalld/iptables规则、云平台安全组配置,放通以下流量:
    • 所有集群节点物理IP之间的IP协议号4流量(IPIP隧道封装报文)
    • 所有集群节点物理IP之间的TCP 179端口流量(Calico BGP协议使用,后续切换BGP模式时需要)
    • 建议集群节点内部网络全放通,避免其他管控流量被拦截
  3. 重启Calico组件重新下发规则
    在任意管控节点执行以下命令重启Calico DaemonSet,让网络规则、路由重新全量下发:
    kubectl rollout restart daemonset calico-node -n kube-system
    
    等待所有calico-node Pod状态变为Running后,重新测试跨节点Pod ping、Service端口访问即可恢复。
  4. 修复校验
    测试通过后可在任意节点执行route -n确认路由表中无冲突网段条目,跨节点Pod网段的路由均指向tunl0接口,下一跳为对应Pod所在节点的物理IP。

内容的提问来源于stack exchange,提问作者galaxy.liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:51:34