1. 闲不住的人首页
  2. 排错采坑

Kubernetes Pod 内容器无法访问外网问题

故障描述

  • 集群网络插件:flannel
  • Kubernetes版本:1.9.7

公司内部运行了一套 Kubernetes 集群环境,因为最近搬家,把整个集群停机了,搬家完成后启动 Kubernetes 集群后发现,所有 Pod 内容器无法访问外网,kube-dns 服务正常,node 节点手动运行 docker run 启动容器可以 ping 通外网。

排查思路

1、检查服务器是否开启 IPV4 内核转发

root@k8s-node05-bjqw:~ # cat /proc/sys/net/ipv4/ip_forward
1

如果为 0 说明未开启,在 /etc/sysctl.conf 加入该参数

root@k8s-node05-bjqw:~ # echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
root@k8s-node05-bjqw:~ # sysctl -p

2、检查 K8S 集群中所有 node 节点 iptables 的 FORWARD 链是否为 ACCEPT

root@k8s-node05-bjqw:~ # iptables -nL|grep "Chain FORWARD"
Chain FORWARD (policy ACCEPT)

如果默认策略为 DROP 那么改为 ACCEPT

root@k8s-node05-bjqw:~ # iptables -P FORWARD ACCEPT

3、检查 kube-proxy 服务是否正常运行

kube-proxy 服务会在本地给 docker0 网卡添加一条 iptable 的 NAT 规则如下:

root@k8s-node05-bjqw:~ # iptables -t nat -nL | grep "172.40.20.0"
MASQUERADE  all  --  172.40.20.0/24       0.0.0.0/0

最后经过上面的排查思路,发现其中 kube-dns 所在服务器 iptables 的 FORWARD 链默认策略为 DROP,一台 node 节点没有开启内核转发。修复后集群恢复正常。

如果觉得文章不错,不妨给个『打赏』写作不易,各位的支持,能激发和鼓励我更大的写作热情。谢谢

原创文章,作者:恩志,如若转载,请注明出处:https://www.xbzdr.com/590.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

在线咨询:点击这里给我发消息

邮件:510749025@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code