kubernetes pod 的自定义传出网络路径

custom outgoing network path for kubernetes pod

假设我有 2 个站点,S1,S2;每个至少有一个 kubernetes worker。这两个站点在地理位置上是分开的,并且在 nodes/workers.

上具有不同的 public IP

kubernetes 是否提供任何现有机制来通过 S2 从 S1 中的 pod/container 路由传出互联网流量?

目标是能够将 S2 中的 public IP 用于 S1 中的 pods。

如果 k8s-federation 是解决方案的必要条件;那就好了。

Kubernetes 对此没有任何意见,这取决于您的网络设计和结构,就像传统 VM 或其他东西一样。也就是说,根据您的描述,这听起来像是一个非常糟糕的网络设计,所以如果它易于设置,我会感到惊讶。 Calico 在引擎盖下运行正常的 BGP,因此您可以设置两个 AS 并强制一个通过另一个进行路由。

使用 calico,您可以引入一个非默认值 IPPool,它不会对传出流量进行 NAT。然后你可以注释你想要使用的 pods and/or namespaces IPPool. 在这一点上,它给你留下了非工作的传出流量,因为你的集群 IP 是 "leaking" 到外面的世界。但是 return 路径不为集群和 Internet 之间的任何上游路由器所知。

你必须让你的路由器知道集群范围,它应该在你的集群和互联网之间。您可以使用来自 calico 的全局 BGPPeer 概念。完成后,还可以在路由器上设置 BGP。 (使用 [1])了解更多信息。

从那里你应该在你的路由器上有所有的灵活性来根据非默认IPPool的子网不同地路由它and/or首先隧道它,例如,到提问者的'S2'

请注意,除非您真正使用 public IP space,即非 RFC-1918 IP(加上一些其他 IP),否则您现在应该自己在某个地方引入 NATing,您可以选择这样做所以在 S1S2 中,如果您选择后者,则该站点还需要知道返回路由器的 return 路径。

这并不是真正的云原生解决方案,因为您只是将问题从 kubernetes 转移到 "old-school" 固定子网上基于策略的路由域——这并不是提问者真正要求的,因为他暗示在“S2”中也有一个 kubernetes 进程。在上述可能的解决方案中,S2.

中不需要 k8s 进程

这就是@coderanger 的建议