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

为了演示该问题,我将其部署在具有3个副本的部署下面。当其中两个位于同一节点上时,另一个 pods 位于另一个节点上。

$ cat nginx.yaml
apiVersion:apps / v1
种类:部署
元数据:
名称:nginx-deployment
标签:
应用程式:nginx
规格:
复制品:2
选择器:
matchLabels:
应用:nginx
模板:
元数据:
标签:
应用:nginx
规格:
容器:
-名称:nginx
图片:nginx
端口:
-containerPort:80
---
种类:服务
apiVersion:v1
元数据:
名称:nginx-svc
规格:
选择器:
应用:nginx
端口:
-协议(protocol):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 Ready 19m v1.11.2
ip-172-31-29-204.us-west-2.compute.internal Ready 14m v1.11.2

$ kubectl获取 pod -o宽
名称就绪状态重新开始年龄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
名称类型集群IP外部IP端口的年龄
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时间= 0.066 ms
来自10.244.2.3的64个字节:icmp_seq = 2 ttl = 64时间= 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操作。

这是主机接口(interface):

#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

法兰绒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

法兰绒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也无法访问:

$ curl 10.105.205.10:80

有什么建议吗?

谢谢。

最佳答案

我发现了问题。

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

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

关于kubernetes - 不同节点上的Pod无法互相ping通,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51795575/

10-16 09:16