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

时间:2019-01-09 18:16:00

标签: kubernetes kubernetes-networkpolicy

我有多个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调用集群的外部 网络服务器时,它是否将自身通告为10.0.0.1?还是作为kubernetes处理并映射回10.0.0.1的某些NAT IP?

谢谢!

1 个答案:

答案 0 :(得分:3)

  

广告连播在我的整个网络中都获得唯一的IP吗?还是只是跨集群/跨集群?

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

所以,是的,iptables有一些诡计(或依赖于覆盖),使它看起来像是群集中的“本地”,而在群集之外,它只是IP路由。

话虽如此,某些网络覆盖层使您可以将两个或多个集群相互连接。例如Calico BGP PeeringCillium Multi-cluster