在 Kubernetes 叢集中,容器的排程與生命週期由 Kubelet 管理,但容器之間如何跨節點通訊?
Kubernetes 本身並沒有內建具體的網路實現,而是提出了三條嚴格的 基本網路原則(The Kubernetes Network Model),並透過 CNI(Container Network Interface,容器網路介面) 標準將具體的網路封包轉發工作委託給開源外掛。
從早期的 Flannel 疊加網路,到企業級 Calico 純三層路由,再到如今由 Cilium (eBPF) 引領的內核革命,K8s 網路架構經歷了深刻的效能與安全進化。
本文將帶你深入 Linux 內核網路棧,拆解三大主流 CNI 的底層轉發原理。
1. Kubernetes 網路模型的三大鐵律
任何合規的 CNI 外掛都必須無條件滿足以下三個不變量:
2. 三大主流 CNI 外掛架構深度對比
| CNI 外掛 | 核心底層轉發機制 | 封裝開銷 (Overhead) | 網路安全策略 (NetworkPolicy) | 適用規模與場景 |
|---|---|---|---|---|
| Flannel | Overlay (VXLAN 封裝) 或 Host-GW (直連路由) | 較高 (VXLAN 額外消耗 50 字節封裝與 CPU 封包解包) | ❌ 不支援 (需外掛其他元件) | 小型測試叢集、極簡部署需求 |
| Calico | 純三層路由 (BGP / IP-in-IP / WireGuard) | 極低 (純三層無封裝損耗,線速轉發) | ✅ 強大 (豐富的防火牆 ACL 規則) | 中大型企業私有雲、混合雲、對安全有強烈訴求 |
| Cilium | Linux eBPF (內核字節碼直接掛載) | 極致 (繞過整個 Linux 網路協定棧與 iptables) | ✅ 最強 (支援 L3/L4/L7 七層感知策略) | 超大規模叢集 (1000+ 節點)、極致低延遲、Service Mesh 無 Sidecar |
3. Flannel 疊加網路(VXLAN)工作原理
VXLAN(Virtual Extensible LAN)採用「MAC-in-UDP」封裝技術,在實體 L2/L3 網路之上建立一層虛擬的 L2 覆蓋網路:
- 痛點:每個封包都需要經過兩次 Linux 網路棧處理,封裝額外消耗 CPU 運算並降低了網路 MTU(通常由 1500 降為 1450)。
4. Calico 純三層 BGP 路由原理
Calico 將叢集中的每一個 Worker Node 都視為一台標準的 BGP 路由器:
- 優勢:資料包不進行任何額外的 UDP/VXLAN 封裝,以原生二進位格式在實體交換機上全速轉發,延遲與裸機(Bare-metal)完全一致!
5. Cilium 與 eBPF 革命:告別 iptables 效能黑洞
在大規模 Kubernetes 叢集中(例如包含 5,000 個 Service 與 20,000 個 Pod),傳統基於 kube-proxy + iptables 的網路面臨毀滅性效能瓶頸:
- iptables 本質是一條單向線性鏈表,每次資料包到達都需要進行
O(N)線性遍歷; - 規則更新時需要全量刷新鎖,引發頻繁的 CPU 內核態飆升。
Cilium 的顛覆性價值
O(1)查找複雜度:透過 eBPF Map 實現微秒級轉發,即便叢集有 10 萬個 Service,效能依然平穩如一。- 無 Sidecar 服務網格(Ambient Mesh / Service Mesh without Sidecars):直接在節點內核層透過 eBPF 攔截 HTTP/gRPC 流量並提供 mTLS 加密與 L7 可觀測性,徹底省去每個 Pod 注入 Envoy Sidecar 所消耗的巨量記憶體!
6. 總結
- 輕量求穩:中小型叢集可選用 Flannel (Host-GW) 或 Calico。
- 企業級安全合規:選用 Calico 提供強大的基於標籤的 NetworkPolicy 防火牆。
- 下一代雲原生終極演進:全面採用 Cilium (eBPF),在獲得極限網路吞吐的同時,無縫解鎖七層可觀測性(Hubble)與無 Sidecar 服務網格能力。
