跨厂商VPS节点无法Curl K3s/Kubernetes Pod IP问题排查
K3s跨节点Pod网络不通问题排查
环境与故障现象
Pod分布情况
执行kubectl get pods -o wide(已隐藏无关字段)输出:
Test-nginx 1/1 Running 10.42.1.3 k8s-worker1 Test-nginx1 1/1 Running 10.42.1.6 k8s-worker1 Test-nginx3 1/1 Running 10.42.1.7 k8s-worker1 Test-nginx2 1/1 Running 10.42.0.9 k8s-master
节点配置
- k8s-master:Ubuntu 20.04.4 LTS,iptables v1.8.4(legacy模式)
- k8s-worker1:Ubuntu 22.04.1 LTS,iptables v1.8.7(nf_tables模式)
故障表现
- k8s-master节点无法curl通worker1上的Pod(如10.42.1.3),但能正常访问本地Pod(10.42.0.9)
- k8s-worker1节点无法curl通master上的Pod(10.42.0.9)
问题根因
K3s默认使用的Flannel网络插件依赖一致的iptables后端规则。当集群节点混合使用legacy和nf_tables两种iptables模式时,跨节点的数据包转发规则无法被正确解析和执行,导致Pod间网络连通性失效。
解决步骤
1. 将worker节点的iptables切换为legacy模式
在k8s-worker1节点执行以下命令:
# 临时切换当前会话的iptables后端 update-alternatives --set iptables /usr/sbin/iptables-legacy update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
2. 永久锁定iptables后端(避免重启后还原)
编辑/etc/default/iptables文件(若不存在则创建),添加以下内容:
IPTABLES_MODE=legacy
3. 重启K3s Agent服务
systemctl restart k3s-agent
4. 验证网络连通性
在master节点重新curl worker上的Pod IP,同时在worker节点curl master上的Pod IP,确认连通性恢复。
内容的提问来源于stack exchange,提问作者Tony.Luo
相关产品推荐
相关产品推荐

