Kubernetes中Pod的IP地址分配

5

即使 Pod 存在于同一个 worker 节点上,它们如何获得唯一的 IP 地址?

另外,Pod 不是设备,为什么要为其分配 IP 地址?
分配给 Pod 的 IP 地址是虚拟的吗?

2个回答

8

Pod 是集群(节点组)的一部分,集群网络 可以告诉您以下信息:

实际上,Kubernetes 在 Pod 范围内应用 IP 地址 - Pod 中的容器共享其网络命名空间,包括它们的 IP 地址。

这意味着 Pod 中的容器可以在本地主机上互相访问彼此的端口。
这意味着 Pod 中的容器必须协调端口使用,但这与 VM 中的进程没有区别。
这被称为“每个 Pod 一个 IP”模型。

限制条件如下:

  • 所有容器都可以直接通信而无需 NAT
  • 所有节点都可以直接与所有容器通信(反之亦然)而无需 NAT
  • 容器看到自己的 IP 与其他人看到的 IP 相同

Alok Kumar Singh的 "使用 Kubernetes 进行网络编程" 中了解更多:

https://cdn-images-1.medium.com/max/1000/1*lAfpMbHRf266utcd4xmLjQ.gif

这里:

我们有一台机器,在kubernetes中被称为节点
它有一个IP地址172.31.102.105,属于CIDR 172.31.102.0/24的子网。

(CIDR:无类域间路由选择, 一种用于分配IP地址和IP路由的方法)

该节点有一个网络接口eth0。它属于节点的根网络命名空间。
为了使pod隔离,它们被创建在它们自己的网络命名空间中-这些是pod1 n/w ns和pod2 n/w ns。
pod被分配了IP地址100.96.243.7和100.96.243.8,来自CIDR范围100.96.0.0/11。

请参阅来自CloudNativelabsKubernetes Networking以获取相关信息:
Kubernetes不涉及设置网络,而是将此工作交给了容器网络接口(CNI)插件。有关CNI规范的详细信息,请参考CNI规范
以下是通过CNI插件实现可能的网络选项,这些选项允许遵循Kubernetes要求的Pod间通信:
- 层2(交换)解决方案 - 层3(路由)解决方案 - 覆盖解决方案

层2(交换)

https://cloudnativelabs.github.io/img/l2-network.jpg

你可以在容器子网地址范围中看到它们的IP地址。
第三层(路由)

https://cloudnativelabs.github.io/img/l3-gateway-routing.jpg

这是关于在默认网关路由器中为子网添加路由的内容,如图所示。
10.1.1.0/24和10.1.2.0/24的路由被配置为分别通过node1和node2。

覆盖解决方案

通常不使用。

注意:另请参阅(2018年10月):“Google Kubernetes Engine networking”。


0

Kubernetes在容器内部创建了一个网络。例如,在GKE中,默认情况下是/14,但用户可以使用/11到/19之间的范围进行覆盖。

当Kubernetes创建一个Pod时,它会从这些范围中分配一个IP地址。现在,您不能在您的网络中有另一个不属于您的集群的虚拟机,使用与Pod相同的IP地址。

为什么?想象一下,您有一个VPN隧道需要将数据包传递到Pod和VM都在使用的地址。它会传递给谁呢?

因此,回答您的问题:不,这不是虚拟IP,而是来自您的网络的物理IP地址。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接