我正在尝试通过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吗?
我也尝试过编织,运河和法兰绒,似乎都存在相同的问题。
我现在已经没有想法了...请问指针吗?
答案 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组件版本来更新问题。