docker

k8s node间通信问题排除

2019-05-28  本文已影响0人  迷茫_小青年

昨天iaas把我的k8s测试迁移了,需要重新恢复一下服务。在恢复的时候发现一个问题。

104节点上的pod,不能上外网。另外一个105节点上的pod正常。

在104节点上启动buybox测试,ping 105节点上的pod 。发现不通。

coredns pod在105节点上。

但是在105节点的pod上,ping104节点上的pod都是没有问题。给我造成一个假象就是以为是104节点的问题,跟105没关系 。

所以浪费很多时间在排除104节点问题。一直没有啥突破性进展和线索

最后在105节点上的pod上做 traceroute 104节点pod的ip

[root@centos-6f64dc8859-f925z /]# tracepath -n 10.254.56.24
 1?: [LOCALHOST]                                         pmtu 1450
 1:  10.254.34.1                                           0.159ms
 1:  10.254.34.1                                           0.046ms
 2:  10.254.56.0                                           0.594ms
 3:  10.254.56.24                                          0.443ms reached
     Resume: pmtu 1450 hops 3 back 3

整个正常的traceroute 通过。 并且能够看出 数据包从pod发出以后,
第一个经过的是docker0接口地址10.254.34.1 。
第二个经过是路由到104节点上的flannel接口地址10.254.56.0 。
第三个就已经到达104节点上pod 地址10.254.56.24。

反过来我们看在104节点上的pod 做traceroute到 105 pod的ip

[root@centos2-758779f9db-nlltq /]# tracepath -n 10.254.34.3
 1?: [LOCALHOST]                                         pmtu 1450
 1:  10.254.56.1                                           0.238ms
 1:  10.254.56.1                                           0.073ms
 2:  10.254.1.0                                            0.734ms
 3:  no reply
 4:  no reply

第一个经过104节点上的docker0地址10.254.56.1 这个没问题
第二个经过是路由到105节点上flannel接口地址。 但是10.254.1.0 这个是神马鬼! 这是那里来的?

[root@t4 ~]# etcdctl --endpoints http://t4.dc.com:2379 ls /k8s/network/subnets/
/k8s/network/subnets/10.254.65.0-24
/k8s/network/subnets/10.254.56.0-24
/k8s/network/subnets/10.254.34.0-24

etcd中也没有这个地址段。

通过ip addr show 看flannel.1 接口上竟然有三个地址 。

24: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
    link/ether d2:8c:fd:0c:63:0c brd ff:ff:ff:ff:ff:ff
    inet 10.254.1.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet 10.254.59.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet 10.254.34.0/32 scope global flannel.1
       valid_lft forever preferred_lft forever
    inet6 fe80::d08c:fdff:fe0c:630c/64 scope link
       valid_lft forever preferred_lft forever

先吧不正确的地址段干掉。

ip addr del 10.254.1.0/32 dev flannel.1
ip addr del 10.254.59.0/32 dev flannel.1

删除以后再次traceroute

[root@centos2-758779f9db-nlltq /]# tracepath -n 10.254.34.3
 1?: [LOCALHOST]                                         pmtu 1450
 1:  10.254.56.1                                           0.158ms
 1:  10.254.56.1                                           0.045ms
 2:  10.254.34.0                                           0.964ms
 3:  no reply
 4:  no reply
 5:  no reply
 6:  no reply

已经可以正确到达105节点上的flannel 接口地址了。然后还是没有到pod里。
这个时候就非常直接的怀疑内核路由转发参数没有生效。

net.ipv4.ip_forward = 1

重启一下服务器,然后再次启动服务一切正常了。

上一篇下一篇

猜你喜欢

热点阅读