上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1 背景
在Kubernetes集群里,容器可以运行在不同的节点上,也可以运行在同一节点的不同网络命名空间中。这样,容器之间就产生了“距离”。Kubernetes集群的网络系统要解决的核心问题,是不同“距离”的容器之间的通信问题。
根据容器之间“距离”的长短,我们可以把容器之间的通信问题划分为三个子问题:本地容器之间的通信(相同网络命名空间内容器之间的通信)、不同网络命名空间中容器之间的通信,以及跨节点容器之间的通信。
本地容器之间的通信是这三个子问题中最基础的一个。通信容器双方的特别之处在于,它们之间虽然有进程、文件系统等方面的隔离,但是它们共享同一个网络命名空间,即使用同一个网络协议栈。本地通信使用的是Loopback虚拟网络接口。
这种方式非常特别,好比两个人,每人有一部手机,但这两部手机使用着完全一样的SIM卡,当有来电的时候,这两个人会同时接到电话,当然他们都有自主性,可以选择接或不接。
不同网络命名空间中容器之间的通信以及跨节点容器之间的通信这两个子问题相对比较难解决,原因就在于通信双方分别使用完全独立的网络协议栈,这就涉及到网络包跨网络命名空间,甚至跨集群节点的转发。
这两个子问题的解决,依赖于Kubernetes和第三方一起实现的网络组件。利用这些网络组件,集群可以搭建出较为复杂的容器集群网络。本章剩余部分会带大家深入理解这些内容。