Kubernetes权威指南六——网络模型

1、概述
      Kubernetes 网络模型设计的一个基础原则是:每个 Pod 都拥有一个独立的 IP 地址 ,并假定所有 Pod 在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个 Node 宿主机 中,都要求它们可以直接通过对方的 IP 进行访 间。设计这个原则的原因是,用 户不需要额外考虑如何建立 Pod 之间的连接,也不需要考虑如何将容器端口映射到主机端 口等问 题。
    实际上,在 Kubernetes 世界里, IP 是以 Pod 为单位进行分配的 。一个 Pod 内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它们的 IP 址、网络设备、配置等都是共享的)。按照这个网络原则抽象出来的为每个 Pod 都设置一个 IP 地址的模型也被称作 IP-per-Pod 模型。
2、容器到容器的通信
  同一个Pod内的容器(Pod内的容器是不会跨宿主机的)共享一个网络命名空间,共享同一个Linux协议栈。所以对于网络的各类操作,就和他们在同一台机器上一样,他们甚至可以使用localhost地址访问彼此的端口。

 3、同一个Node上Pod之间的通信

    可以看出, Podl Po d2 都是通过 Vet 连接到同一个 dockerO 网桥的,它们的 IPIPl IP2 都是从 dockerO 的网段上动态获取的,和网桥本身的 IP3 属千同 个网段。另外,在 Po Pod2 Linux 协议栈上,默认路由都是 docker0 的地址,也就是说所有非本地地址的网络数据,都会被默认发送到 dockerO 网桥上,由 dockerO 网桥直接中转。

4、不同Node上Pod的通信

    Po 的地址是与 oc rO 在同一个网段的,我们知道 ocker 网段与宿主机网卡是两个完全不同的 IP 网段,并且不同 No 之间的通信只能通过宿主机的物理网卡进行 因此要想实现不同 No 容器之间的通信,就必须想办法通过 机的这个 IP 地址进行寻址和通信。
另一方面 这些动态分配且藏在 docker0 后的“私有 “IP 地址也是可以找到的Kubernetes会记录所有正在运行的 Pod IP 分配信息,并将这些信息保存在 etcd 中(作Service EndPoint 。这些私有 IP 信息对于 的通信也是十分重要的,因为我们的网络模型要求 Pod到Pod 使用私有 IP 进行通信。所以首先要知道这些 IP 是什么。
在不同Node上的Pod之间相互通信,必须要满足:
      在整 Kubernetes 集群中对 Pod的IP 分配进行规划,不能有冲突
      将Pod的IP和所在Node的IP关联起来。

 5、CNI网络模型

 

 

 

 

 

posted @ 2023-05-04 14:39  中仕  阅读(28)  评论(0编辑  收藏  举报