rancher故障处理——k8s底层网络路由问题

问题

发现:rancher中的service name,ping不通

问题排查过程:

service name无法ping通,第一反应应该是dns有问题。

1、查看两台coredns的日志,显示的是一样的输出:


2、容器解析两台dns的地址,238上的容器无法使用156上dns的ip去解析,疑似k8s的网络问题

 

3、对比两台的网络:

①、10.97.248.156:有flannel.1,且路由有对方的信息(10.42.1.0       10.42.1.0       255.255.255.0   UG    0      0        0 flannel.1)

[root@APP01-RC ~]# ifconfig eth0 
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.97.248.156  netmask 255.255.255.0  broadcast 10.97.248.255

 

②、10.97.248.238:有flannel.1,且路由没有对方的信息

尝试添加路由:不行

[root@TC-TS-WL-APP02-RC ~]# route add -net 10.42.0.0 netmask 255.255.255.0 gw 10.42.0.0 dev flannel.1
SIOCADDRT: Network is unreachable

两台/etc/cni/net.d/下的内容一致

/opt/cni/bin也一样

③、两台机,均不能ping通本机的flannel.1网卡地址

[root@TC-TS-WL-APP02-RC net.d]# ping 10.42.0.0
Do you want to ping broadcast? Then -b. If not, check your local firewall rules.
[root@TC-TS-WL-APP02-RC net.d]# ping 10.42.0.0 -b
WARNING: pinging broadcast address
PING 10.42.0.0 (10.42.0.0) 56(84) bytes of data.
^C
--- 10.42.0.0 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 1999ms

④、在生产正常的rancher上ping网卡是正常的:ping本机和对方的flannel.1是正常的


[root@-APP02-PROD ~]#  ping 10.42.1.0
PING 10.42.1.0 (10.42.1.0) 56(84) bytes of data.
64 bytes from 10.42.1.0: icmp_seq=1 ttl=64 time=0.292 ms
^C
--- 10.42.1.0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms

⑤、正常的也是无法连接8472/UDP 


[root@APP01-RC net.d]# netstat -anpltu|grep 8472    
udp        0      0 0.0.0.0:8472            0.0.0.0:*                           -                   
[root@-APP01-RC net.d]# nc -w 2 -v 10.97.248.238 8472
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connection refused.

⑥、重新部署,有两个容器(cattle-node-agent、flannel_canal)的system空间,一台就可以ping自己的网络,但是路由没有flannel.1

 

 

[root@APP02-RC ~]# ifconfig flannel.1
flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.42.1.0  netmask 255.255.255.255  broadcast 10.42.1.0
 

[root@APP02-RC ~]# ping 10.42.1.0
PING 10.42.1.0 (10.42.1.0) 56(84) bytes of data.
64 bytes from 10.42.1.0: icmp_seq=1 ttl=64 time=0.048 ms

⑦、看容器flannel_canal的日志:

只有10.97.248.238的flannel_canal日志异常:
failed to add vxlanRoute (10.42.0.0/24 -> 10.42.0.0): invalid argument

日志最后一行有报错,添加路由失败。查看所有网络设备和网段,重点关注 10.42.0.0/24

⑧、解决过程:

ip a
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:e9:ec:ea:9f brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet 10.42.0.1/16 brd 10.42.255.255 scope global docker0


观察到第三项 docker0 设备 占用了 10.42.0.1/16 网段,与最前面 FLANNEL_NETWORK 声明的网段冲突,导致路由添加失败,Overlay Network 无法做转发

两台,均删除 docker0 设备下的 10.42.0.1/16 网段,问题解决:


ip addr del 10.42.0.1 dev docker0

[root@APP02-RC ~]# ip addr del 10.42.0.1 dev docker0
Warning: Executing wildcard deletion to stay compatible with old scripts.
         Explicitly specify the prefix length (10.42.0.1/32) to avoid this warning.
         This special behaviour is likely to disappear in further releases,
         fix your scripts!

⑨、重新部署,有两个容器(flannel_canal)的system空间

 

⑩、测试网络:两台物理机都能ping通容器的ip

[root@APP02-RC ~]# ping 10.42.1.6
PING 10.42.1.6 (10.42.1.6) 56(84) bytes of data.
64 bytes from 10.42.1.6: icmp_seq=1 ttl=64 time=0.060 ms
64 bytes from 10.42.1.6: icmp_seq=2 ttl=64 time=0.043 ms

[root@APP01-RC net.d]# ping 10.42.1.6
PING 10.42.1.6 (10.42.1.6) 56(84) bytes of data.
64 bytes from 10.42.1.6: icmp_seq=1 ttl=63 time=0.377 ms
64 bytes from 10.42.1.6: icmp_seq=2 ttl=63 time=0.290 ms

解决办法:由于属于底层问题,重新删除和加入节点,也无法解决,删除隐藏在docker0下 的网段(ip addr del 10.42.0.1 dev docker0)即可Rancher 1.X 版本会在 docker0 设备下面添加 10.42 网段做 ipsec 转发。因未知原因未清理干净,与 flannel 网络的默认配置网段发生冲突。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章