在AWS上使用Calico的Kubernetes-无法在不同节点上ping Pod

时间:2020-03-23 00:58:57

标签: amazon-web-services kubernetes project-calico

Kubernetes入门。我似乎无法连接在不同节点上运行的Pod相互通信。

我在三个AWS EC2实例(一个主服务器,两个工作人员all with src/dest check disabled as described by the Calico website)上建立了带有Calico网络的Kubernetes集群。每个实例都使用相同的安全组,并为10.0.0.0/8和192.168.0.0/16打开所有TCP / UDP / ICMP端口,以确保群集内没有阻塞的端口。

使用香草仓库安装

~$ sudo apt-get install -y docker.io kubelet kubeadm kubectl
~$ sudo kubeadm init --pod-network-cidr=192.168.0.0/16  

和基本的Calico安装

~$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

将两个工作节点加入集群

 sudo kubeadm join <Master IP>:6443 --token <Token>  --discovery-token-ca-cert-hash sha256:<cert hash> 

启动并运行后,我创建了三个副本进行测试:

~$ kubectl run pingtest --image=busybox --replicas=3 -- sleep infinity

第一个节点上两个,第二个节点上

~$ kubectl get pod -l run=pingtest -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP               NODE              NOMINATED NODE   READINESS GATES
pingtest-7689dd958f-9mfgl   1/1     Running   0          15m   192.168.218.65   ip-10-78-31-198   <none>           <none>
pingtest-7689dd958f-l288v   1/1     Running   0          15m   192.168.218.66   ip-10-78-31-198   <none>           <none>
pingtest-7689dd958f-z2l97   1/1     Running   0          15m   192.168.237.65   ip-10-78-11-83    <none>           <none>

登录第一个Pod上的外壳

~$ kubectl exec -ti pingtest-7689dd958f-9mfgl /bin/sh

当我在同一节点上ping pod时,一切正常

/ # ping 192.168.218.66 -c 2
PING 192.168.218.66 (192.168.218.66): 56 data bytes
64 bytes from 192.168.218.66: seq=0 ttl=63 time=0.105 ms
64 bytes from 192.168.218.66: seq=1 ttl=63 time=0.078 ms

但是当我在另一个节点上ping一个pod时,没有响应

/ # ping 192.168.237.65 -c 2
PING 192.168.237.65 (192.168.237.65): 56 data bytes

--- 192.168.237.65 ping statistics ---
2 packets transmitted, 0 packets received, 100% packet loss

我想念什么?是什么原因阻止了不同节点上的Pod之间的通信?

1 个答案:

答案 0 :(得分:1)

我发现了问题。它是与AWS配置一起使用的,您必须在该环境中完成一些额外的工作。

  1. 对于三个AWS EC2实例,它们必须都具有src / dest检查(已禁用 as described by the Calico website)。
  2. 对于涵盖您的AWS实例的安全组,您必须添加自定义协议(不是自定义TCP或自定义UDP),在“协议”列中选择4(IP中的IP),然后选择涵盖您的实例(例如10.0.0.0/8、192.168.0.0/16)。然后,您可以使用curl命令为Pods / ServiceIP寻址 AWS Security Group Settings