不同节点上的Pod不能互相ping通

Bar*_*ott 4 kubernetes

我根据文档设置了 1 个主 2 个节点的 k8s 集群。一个 pod 可以 ping 同一个节点上的另一个 pod,但不能 ping 另一个节点上的 pod。

为了演示我在具有 3 个副本的部署下部署的问题。其中两个位于同一个节点上,而另一个 pod 位于另一个节点上。

    $猫nginx.yaml
    api 版本:应用程序/v1
    种类:部署
    元数据:
      名称:nginx-部署
      标签:
        应用程序:nginx
    规格:
      复制品:2
      选择器:
        匹配标签:
          应用程序:nginx
      模板:
        元数据:
          标签:
            应用程序:nginx
        规格:
          容器:
          - 名称:nginx
            图片:nginx
            端口:
            - 容器端口:80
    ---
    种类:服务
    api版本:v1
    元数据:
      名称:nginx-svc
    规格:
      选择器:
        应用程序:nginx
      端口:
      - 协议:TCP
        端口:80

    $ kubectl 获取节点
    姓名 状态 角色 年龄 版本
    ip-172-31-21-115.us-west-2.compute.internal Ready master 20m v1.11.2
    ip-172-31-26-62.us-west-2.compute.internal 准备好 19m v1.11.2
    ip-172-31-29-204.us-west-2.compute.internal 就绪 14m v1.11.2

    $ kubectl get pods -o 宽
    NAME READY STATUS RESTARTS 年龄 IP 节点 指定节点
    nginx-deployment-966857787-22qq7 1/1 运行 0 11m 10.244.2.3 ip-172-31-29-204.us-west-2.compute.internal   
    nginx-deployment-966857787-lv7dd 1/1 运行 0 11m 10.244.1.2 ip-172-31-26-62.us-west-2.compute.internal    
    nginx-deployment-966857787-zkzg6 1/1 运行 0 11m 10.244.2.2 ip-172-31-29-204.us-west-2.compute.internal   

    $ kubectl 获取 svc
    名称 类型 CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    Kubernetes ClusterIP 10.96.0.1 443/TCP 21m
    nginx-svc 集群IP 10.105.205.10 80/TCP 11m

一切看起来都很好。

让我向您展示容器。

    # docker exec -it 489b180f512b /bin/bash
    root@nginx-deployment-966857787-zkzg6:/# ifconfig
    eth0:标志=4163 mtu 8951
            inet 10.244.2.2 网络掩码 255.255.255.0 广播 0.0.0.0
            inet6 fe80::cc4d:61ff:fe8a:5aeb prefixlen 64 scopeid 0x20

    root@nginx-deployment-966857787-zkzg6:/# ping 10.244.2.3
    PING 10.244.2.3 (10.244.2.3) 56(84) 字节数据。
    来自 10.244.2.3 的 64 个字节:icmp_seq=1 ttl=64 time=0.066 ms
    来自 10.244.2.3 的 64 个字节:icmp_seq=2 ttl=64 time=0.055 ms
    ^C

所以它在同一个节点上ping它的邻居pod。

    root@nginx-deployment-966857787-zkzg6:/# ping 10.244.1.2
    PING 10.244.1.2 (10.244.1.2) 56(84) 字节数据。
    ^C
    --- 10.244.1.2 ping 统计 ---
    发送2个数据包,接收0个,100%丢包,时间1059ms

并且无法在另一个节点上 ping 其副本。

这是主机接口:

    # ifconfig
    cni0:标志=4163 mtu 8951
            inet 10.244.2.1 网络掩码 255.255.255.0 广播 0.0.0.0

    docker0:标志=4099 mtu 1500
            inet 172.17.0.1 网络掩码 255.255.0.0 广播 172.17.255.255

    eth0:标志=4163 mtu 9001
            inet 172.31.29.204 网络掩码 255.255.240.0 广播 172.31.31.255

    flannel.1:标志=4163 mtu 8951
            inet 10.244.2.0 网络掩码 255.255.255.255 广播 0.0.0.0

    lo:标志=73 mtu 65536
            inet 127.0.0.1 网络掩码 255.0.0.0

    veth09fb984a:标志=4163 mtu 8951
            inet6 fe80::d819:14ff:fe06:174c prefixlen 64 scopeid 0x20

    veth87b3563e:标志=4163 mtu 8951
            inet6 fe80::d09c:d2ff:fe7b:7dd7 prefixlen 64 scopeid 0x20

    # ifconfig
    cni0:标志=4163 mtu 8951
            inet 10.244.1.1 网络掩码 255.255.255.0 广播 0.0.0.0

    docker0:标志=4099 mtu 1500
            inet 172.17.0.1 网络掩码 255.255.0.0 广播 172.17.255.255

    eth0:标志=4163 mtu 9001
            inet 172.31.26.62 网络掩码 255.255.240.0 广播 172.31.31.255

    flannel.1:标志=4163 mtu 8951
            inet 10.244.1.0 网络掩码 255.255.255.255 广播 0.0.0.0

    lo:标志=73 mtu 65536
            inet 127.0.0.1 网络掩码 255.0.0.0

    veth9733e2e6:标志=4163 mtu 8951
            inet6 fe80::8003:46ff:fee2:abc2 prefixlen 64 scopeid 0x20

节点上的进程:

    # ps auxww|grep kube
    根 4059 0.1 2.8 43568 28316 ? SSL 00:31 0:01 /usr/local/bin/kube-proxy --config=/var/lib/kube-proxy/config.conf
    根 4260 0.0 3.4 358984 34288 ? Ssl 00:31 0:00 /opt/bin/flanneld --ip-masq --kube-subnet-mgr
    根 4455 1.1 9.6 760868 97260 ? Ssl 00:31 0:14 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/ kubelet/config.yaml --cgroup-driver=systemd --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --network-plugin=cni

由于这个网络问题,clusterIP 也无法访问:

$ 卷曲 10.105.205.10:80

有什么建议吗?

谢谢。

Bar*_*ott 6

我发现了问题。

Flannel 使用被 AWS 安全组阻止的 UDP 端口 8285 和 8472。我只打开了 TCP 端口。

我启用 UDP 端口 8285 和 UDP 端口 8472 以及 TCP 6443、10250、10256。