Pod 如何与群集外部的其他服务/服务器通信?通过其 IP,或通过 NAT IP 由 kubernetes 处理



我有多个 Kubernetes 集群。 它们都在"同一网络"上 - 也就是说,网络上还有其他服务器/服务,因此所有集群中的所有 Pod 都可以访问这些服务器/服务。

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

这个问题的原因是 - 我可以让所有集群对 Pod 使用相同的网络范围吗?也就是说,这是正确的设计:

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 调用集群外部的 Web 服务器时,它是否将其自身通告为 10.0.0.1?还是作为 Kubernetes 处理并映射回 10.0.0.1 的一些 NAT IP?

谢谢!

Pod 是否在我的整个网络中获得唯一的 IP?还是只是跨集群/在集群内

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

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

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

最新更新