網絡核心 - CNI、Service 與 Ingress/Gateway API 解析
Kubernetes 的強大之處在于它極大地簡化了容器化應用的部署和管理,但其網絡模型的靈活性和復雜性也常常讓初學者感到困惑。作為 SRE,我們需要撥開迷霧,理解流量在 K8s 集群內部以及進出集群時,到底是如何流轉的。
Pod 網絡基礎:誰給 Pod 分配 IP?(CNI)
我們知道,在 K8s 中,每個 Pod 都擁有自己唯一的 IP 地址。這是實現“一個 Pod一個 IP”模型的關鍵,它簡化了應用的網絡配置(應用可以直接監聽自己的端口,無需擔心端口沖突)。但這個 IP 地址是誰分配的?Pod 之間的網絡是如何打通的?
答案是 CNI (Container Network Interface) 插件。
- CNI 是什么? 它不是一個具體的軟件,而是一套接口規范(由 CNCF 維護)。它定義了容器運行時(如 Docker, containerd)與網絡插件之間的標準交互方式,用于配置容器(Pod)的網絡。Kubernetes 本身不負責具體的 Pod 網絡實現,而是委托給符合 CNI 規范的網絡插件來完成。
- CNI 插件如何工作(簡化流程):
- 當一個 Pod 被調度到某個 Node 上時,該 Node 上的
kubelet
進程會調用配置好的 CNI 插件。 - CNI 插件負責為這個 Pod 分配一個 IP 地址(通常從該 Node 分到的一個 Pod CIDR 網段中獲取)。
- 插件會在 Node 上創建必要的網絡設備(例如,一對
veth
設備,一端連接 Pod 的網絡命名空間,另一端連接 Node 的根網絡命名空間),并配置相應的 IP 地址、路由規則、網橋等,從而將 Pod 連接到集群網絡中。 - 不同的 CNI 插件使用不同的技術來實現 Pod 間的通信(可能是 Overlay
- 當一個 Pod 被調度到某個 Node 上時,該 Node 上的