pod 如何与集群外的其他 services/server 通信?通过其 IP,或通过 kubernetes 处理的 NAT IP

How does a pod communicate with other services/server outside of the cluster? via its IP, or via NAT IP handled by kubernetes

我有多个 Kubernetes 集群。它们都在 "same network" 上——也就是说,网络上还有其他 servers/services,这样所有集群中的所有 pods 都可以访问那些 servers/services.

我知道每个 pod 都有一个唯一的 IP,因此所有 pods 都可以通过这些 IP 直接相互通信。但是(这是我的问题)- pods 是否在我的整个网络中获得唯一的 IP?或者只是 across/within 集群?

这个问题的原因是 - 我可以让所有集群为 pods 使用相同的网络范围吗? 也就是说,这样的设计是否合适:

DESIGN A 
CLUSTER 1 
  Pod1.1 10.0.0.1
  Pod1.1 10.0.0.2
   ...
  Pod1.1 10.0.0.n
CLUSTER 2
  Pod2.1 10.0.0.1
  Pod2.1 10.0.0.2
   ...
  Pod2.1 10.0.0.n

或者,我需要这样吗:

DESIGN B
CLUSTER 1 
  Pod1.1 10.0.0.1
  Pod1.1 10.0.0.2
   ...
  Pod1.1 10.0.0.n
CLUSTER 2
  Pod2.1 10.0.1.1
  Pod2.1 10.0.1.2
   ...
  Pod2.1 10.0.1.n

提出这个问题的另一种方式:

当 Pod1.1 调用集群 外部 的网络服务器时,它是否将自己宣传为 10.0.0.1?或者作为 kubernetes 处理并映射回 10.0.0.1 的一些 NAT IP?

谢谢!

do pods get unique IPs across my whole network? or just across/within the cluster?

一般来说,就在集群内。当您设置网络覆盖时,您使用 PodCidr 对其进行设置,这将是集群中的 pod 网络。您可以拥有两个具有相同 PodCidr 的集群,并且仍然能够相互通信。一旦流量离开集群和服务器,就可以通过外部 IP 看到它。

所以是的,iptables 有一些技巧(或取决于覆盖)使其看起来像是 'local' 在集群内,但在集群外,它只是 IP 路由。

话虽如此,一些网络覆盖允许您将两个或多个集群相互连接。例如,Calico BGP Peering and Cillium Multi-cluster.