node节点flannel网络问题导致该node上的pod与其他node节点网络不通的排查思路与解决方法

一、问题发现

在部署一个replicas:4的nginx deployment之后在master节点通过curl + podIP + 端口的形式测试时,发现两次访问不到,两次可以访问得到。

二、问题排查

1、通过ping pod的ip地址,发现node1节点的pod全都ping不通,问题很有可能就出在node1节点上

2、通过ip a查看node1节点发现flannel.1没有ip地址,可能原因就出现在这。

3、刚开始以为是iptables规则可能导致节点flannel网络没起来,于是就把iptables规则全清了,重启了kubelet后发现还是没有flannel网络。

4、然后在master节点通过kubectl logs -f -n kube-system kube-flannel的Pod来查看对应node1的flannel Pod的日志发现一个错误日志,还是网络down掉了

failed to add vxlanRoute (10.244.0.0/24 -> 10.244.0.0): network is down

5、尝试将node1节点的flannel.1网络删除,在node1节点上执行

ip link delete flannel.1

6、在 /etc/sysctl.conf 中 设置 net.ipv4.ip_forward=1,开启路由功能。

7、将node1的网卡重启

systemctl restart network

8、在master节点上删掉flannel的Pod,重新启动flannel的yaml文件

kubectl delete -f kube-flannel.yml
kubectl apply -f kube-flannel.yml

9、通过ip a查看node1节点的IP,发现flannel.1果然有IP地址了

flannel.1: mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether ce:86:ca:01:e0:3f brd ff:ff:ff:ff:ff:ff
inet 10.244.1.0/32 scope global flannel.1
valid_lft forever preferred_lft forever

10、在master节点ping node1节点上的Pod发现可以ping通,通过kubectl exec -it dep-with-healthycheck-55f68fd487-d /bin/bash 命令进入其中的一个pod使用

curl -I 10.244.2.90命令测试与其他Pod通不通,发现也是通的。

[root@master test]# kubectl exec -it dep-with-healthycheck-55f68fd487-df2xm /bin/bash
root@dep-with-healthycheck-55f68fd487-df2xm:/# curl -I 10.244.2.90
HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Sun, 02 Aug 2020 14:54:11 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 07 Jul 2020 15:52:25 GMT
Connection: keep-alive
ETag: "5f049a39-264"
Accept-Ranges: bytes

至此,问题解决,记录一下,以作参考