似乎有某种情况正在捕获到Pod的TCP流量

时间:2019-01-29 20:42:37

标签: kubernetes project-calico cni

我正在尝试通过Kubeadm与Calico(IPIP)部署Kubernetes。部署完成后,我将使用这些清单来部署Calico

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

在应用它之前,我正在编辑CALICO_IPV4POOL_CIDR并将其设置为10.250.0.0/17并使用命令kubeadm init --pod-cidr 10.250.0.0/17

几秒钟后,CoreDNS pod(例如,获取地址10.250.2.2)开始重新启动,并显示错误10.250.2.2:8080连接被拒绝。

现在有点挖掘:

在群集ping 10.250.2.2中的任何节点上都可以正常工作,并且它到达pod(pod net名称空间中的tcpdump显示了它)。

来自不同Pod(在不同节点上)curl 10.250.2.2:8080的效果很好

从任何节点到curl 10.250.2.2:8080的连接失败,连接被拒绝

因为它是coredns pod,所以它同时监听53 udp和tcp,所以我尝试从节点上尝试netcat

nc 10.250.2.2 53-连接被拒绝 nc -u 10.250.2.2 55-有效

现在我已经将源节点上的每个接口tcpdump转为端口8080,并且卷曲到CoreDNS pod似乎还没有离开节点……iptables吗?

我也尝试过编织,运河和法兰绒,似乎都存在相同的问题。

我现在已经没有想法了...请问指针吗?

1 个答案:

答案 0 :(得分:1)

对于Calico实施似乎是一个问题,CoreDNS Pods对CNI网络Pods成功运行很敏感。 对于正确的CNI网络插件实现,您必须在--pod-network-cidr命令中包含kubeadm init标志,然后将相同的值应用于CALICO_IPV4POOL_CIDR中的calico.yml参数。

此外,为了成功安装Pod网络,您必须应用一些RBAC规则,以便按照常规的群集安全性限制获得足够的权限,如官方Kubernetes documentation中所述:

  

为使Calico正常工作,您需要通过   --pod-network-cidr = 192.168.0.0 / 16初始化kubeadm或更新calico.yml文件以匹配您的Pod网络。请注意,印花布在   仅限amd64。

kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

在您的情况下,我至少应从示例中给出的v3.3切换到最新的Calico版本。

如果您发现您已正确运行Pod网络插件安装,请把握机会并使用当前环境设置和具有健康状态的Kubernetes组件版本来更新问题。