Kubernetes 集群网络系统的工作原理是一项挑战。这个系统是 Kubernetes 的核心部分,它需要处理多个关键问题,包括:高度耦合的容器间通信、Pod 间通信、Pod 与 Service 间通信以及 Service 与 External IP 间的通信等。
一、集群网络系统主要问题
下面列出的是网络系统的的四个主要问题:
1、高度耦合的容器间通信:这个已经被 Pod 和 localhost 通信解决了。
2、Pod 间通信:这是本教程讲述的重点。
3、Pod 与 Service 间通信:涵盖在 Service 中。
4、外部与 Service 间通信:也涵盖在 Service 中。
Kubernetes 的宗旨是在应用之间共享机器资源。然而,在多个应用开发者之间协调端口是一项困难的任务,尤其是当用户需要暴露他们控制范围之外的集群级别的问题时。
动态分配端口也会增加系统的复杂性 – 每个应用都需要设置一个端口参数,API 服务器需要知道如何将动态端口值插入到配置模块中,服务也需要知道如何找到对方等等。因此,Kubernetes 选择了不同的方法来解决这些问题。
二、实现网络模型
Kubernetes 的网络模型由各个节点上的容器运行时来实现。最常见的容器运行时使用 Container Network Interface (CNI) 插件来管理其网络和安全能力。来自不同供应商的 CNI 插件有很多,其中一些仅提供添加和删除网络接口的基本功能,而其他则提供更复杂的解决方案,例如与其他容器编排系统集成、运行多个 CNI 插件、高级 IPAM 功能等。