我正在使用 Kubernetes 作为基础设施提供者实现一个集群 api 控制器 - 也就是说,我正在尝试将 Kubernetes 节点作为 Kubernetes Pod 运行并在集群中形成集群。
除了内部集群的 Pod(在基础架构集群的 Pod 上运行(之间的网络连接之外,我还可以使用它,但我对问题是什么感到困惑。
我在 GKE 上运行,使用他们默认的 CNI 实现。然后,我尝试使用 Calico 进行内部集群的叠加实现,使用 IP-in-IP 封装,因此基础架构集群的节点不需要知道如何路由内部集群 Pod IP。
我正在创建基础设施集群,如下所示(Ubuntu 映像是 Ubuntu 映像用于 Celico 的 IP-in-IP 封装所需的ipip
内核模块。
gcloud container clusters create management-cluster --image-type=UBUNTU
然后,我将许多nginx Pod部署到内部集群。如果它们位于同一内部群集节点上,则可以相互连接。如果它们降落在单独的内部群集节点上,则它们不能,因此我认为这意味着IP-in-IP隧道无法正常工作,但我不确定为什么。即使内部群集节点 (Pod( 位于同一基础结构(外部群集(节点上,此操作也会失败。两个集群的容器和服务网段范围不重叠。
我意识到这不是 Calico 支持的用例,但我看不出为什么它是不可能的,并希望让它工作。外部群集节点是否需要支持转发 IP 中 IP 数据包?它们被配置为转发IPv4数据包,但我不确定这是否足够。
我想需要更多信息来给出为什么这不起作用的具体原因,但我现在不太确定会是什么,并且对任何方向都表示赞赏。
有必要在 GKE 节点上允许ipencap
协议:
iptables -C FORWARD -p ipencap -j ACCEPT || iptables -A FORWARD -p ipencap -j ACCEPT