0

我正在使用 Kubernetes 作为基础设施提供者来实现一个集群 api 控制器——也就是说,我正在尝试将 Kubernetes 节点作为 Kubernetes Pod 运行并在集群中形成一个集群。

除了内部集群的 Pod 之间的网络连接(在基础设施集群的 Pod 上运行)之外,我还有这个工作,但我不知道问题是什么。

我在 GKE 上运行,使用他们的默认 CNI 实现。然后,我尝试将 Calico 用于内部集群的覆盖实现,使用 IP-in-IP 封装,因此基础设施集群的节点不需要知道如何路由内部集群 Pod IP。

我正在按如下方式创建基础设施集群(Calico 的 IP-in-IP封装所需的ipip内核模块需要UBUNTU 映像。

gcloud container clusters create management-cluster --image-type=UBUNTU

然后我将一些 nginx Pod 部署到内部集群。如果它们落在同一个内部集群节点上,它们就可以相互连接。如果它们降落在单独的内部集群节点上,它们就不能,所以我认为这意味着 IP-in-IP 隧道无法正常工作,但我不知道为什么。即使内部集群节点(Pod)位于相同的基础设施(外部集群)节点上,这也会失败。两个集群的 Pod 和 Service CIDR 范围不重叠。

我意识到这不是 Calico 受支持的用例,但我看不出为什么它不可能并且想让它工作。外部集群节点是否需要支持转发 IP-in-IP 数据包?它们被配置为转发 IPv4 数据包,但我不确定这是否足够。

我想需要更多信息才能给出为什么这不起作用的具体原因,但我不太确定此时会是什么,并且会感谢任何方向。

4

1 回答 1

1

有必要ipencap在 GKE 节点上允许协议:

iptables -C FORWARD -p ipencap -j ACCEPT || iptables -A FORWARD -p ipencap -j ACCEPT
于 2020-01-06T14:10:56.237 回答