我正在尝试用Calico(IPIP)和Kubeadm部署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(例如获取addr 10.250.2.2)开始重新启动,并出现错误10.250.2.2:8080连接被拒绝。
现在有点挖掘:
从集群中的任何节点ping 10.250.2.2
工作,并且它到达pod(pod net命名空间中的tcpdump显示了它)。
来自不同吊舱(在不同节点上)的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
-作品
现在,我已经为端口8080对源节点上的每个接口进行了tcpdump,并且curl到CoreDNS pod似乎都没有离开节点。。。sooo iptables?
我也试过编织、运河和法兰绒,似乎都有同样的问题。
我现在已经没有什么想法了。。。有什么建议吗?
Calico实现似乎有问题,CoreDNS Pods对CNI网络Pods的成功运行很敏感。为了实现正确的CNI网络插件,您必须在kubeadm init
命令中包含--pod-network-cidr
标志,然后将相同的值应用于calico.yml
中的CALICO_IPV4POOL_CIDR
参数。
此外,为了成功安装Pod网络,您必须应用一些RBAC规则,以便获得符合一般集群安全限制的足够权限,如Kubernetes官方文档:中所述
要使Calico正常工作,您需要通过--pod network cidr=1192.168.0.0/16到kubeadm init或更新calico.yml文件以匹配您的pod网络。注意Calico的工作仅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
在你的情况下,我会切换到最新的Calico版本,至少从v3.3
开始,如示例中所示。
如果你注意到你正确运行了Pod网络插件安装,请抓住机会,用你当前的环境设置和Kubernetes组件版本更新问题,并附上健康状态。