今天倒腾了一下kubernets集群,突然发现在pod里面不能ping外部ip,但是可以ping宿主主机的ip和任何节点上的pod的ip.

集群安装的网络插件为flannel xvlan模式。猜想也是iptables出问题了,把所有节点的主机重启一次或清空所有iptables规则还是一样。


这里简单描述一下解决的过程:

1. 查看一下各节点的IP和pod的ip段 
# kubectl get po -o wide
NAME                     READY     STATUS    RESTARTS   AGE       IP            NODE
curl-69689fc5d7-bbqqp    1/1       Running   1          35m       172.30.60.2   192.168.0.6
curl-69689fc5d7-nfgsh    1/1       Running   1          35m       172.30.25.3   192.168.0.7
可以看到:
  • 节点 192.168.0.6 中pod的ip段为 172.30.60.2/24
  • 节点 192.168.0.7 中pod的ip段为 172.30.25.2/24
在 节点 192.168.0.6 增加一条路由规则:
# /sbin/iptables -t nat -I POSTROUTING -s 172.30.60.0/24 -j MASQUERADE
在 节点 192.168.0.7 增加一条路由规则:
# /sbin/iptables -t nat -I POSTROUTING -s 172.30.25.0/24 -j MASQUERADE
再次检查ping,已经通了:
# kubectl exec -it curl-69689fc5d7-bbqqp sh
/ # ping 219.96.134.133
PING 219.96.134.133 (219.96.134.133): 56 data bytes
64 bytes from 219.96.134.133: seq=0 ttl=56 time=54.227 ms
64 bytes from 219.96.134.133: seq=1 ttl=56 time=2.716 ms
^C
--- 219.96.134.133 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss

此解决方法也是一个临时的解决方法,当节点重启后,检查ifconfig flannel.1 的网段信息,如果发现pod的网段变了,请修改iptables中相应的网段。

参考:http://dockone.io/question/1350 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐