0

我正在尝试使用 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 以及使用 command 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- 有效

现在我已经为端口 8080 的源节点上的每个接口进行了 tcpdump,并且 curl 到 CoreDNS pod 甚至似乎都没有离开节点......所以 iptables?

我也试过编织、运河和法兰绒,似乎都有同样的问题。

我现在已经没有想法了......请指点?

4

1 回答 1

1

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

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

为了使 Calico 正常工作,您需要将 --pod-network-cidr=192.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

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

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

于 2019-01-30T11:37:39.363 回答