美文网首页docker
k8s node间通信问题排除

k8s node间通信问题排除

作者: 迷茫_小青年 | 来源:发表于2019-05-28 16:22 被阅读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
    

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

    相关文章

      网友评论

        本文标题:k8s node间通信问题排除

        本文链接:https://www.haomeiwen.com/subject/ulpdtctx.html