文章主要描述三件事
- ClusterIP 訪問流程的時序圖
- 當目標Pod在同一個節點時ClusterIP 訪問流程的時序圖
- 當目標Pod跨節點時ClusterIP 訪問流程的時序圖
1、ClusterIP 訪問流程的時序圖
以下是一個描述 Kubernetes 中 ClusterIP 訪問流程的時序圖:
關鍵流程説明:
- DNS 解析 (1-2):客户端 Pod 首先通過 kube-dns/CoreDNS 解析服務域名,獲得 ClusterIP
- 請求發送 (3):客户端向 ClusterIP 發送請求(虛擬 IP)
- 路由攔截 (4-5):節點上的 kube-proxy 攔截請求,查詢 Endpoints API 獲取當前服務對應的 Pod IP 列表
-
負載均衡 (6-7):
- iptables 模式:通過 DNAT 規則隨機轉發到後端 Pod
- IPVS 模式:使用內核級負載均衡算法選擇 Pod
- 響應返回 (8-9):目標 Pod 處理請求後,響應通過原路徑返回
ClusterIP 特性:
- 虛擬 IP:存在於服務的整個生命週期
- 內部訪問:僅在集羣內部可達
- 穩定端點:解耦前端與後端 Pod
- 自動負載均衡:後端 Pod 變化時自動更新
提示:實際網絡層會根據 CNI 插件不同(Calico/Flannel/Cilium 等)有額外封裝步驟,但 ClusterIP 的抽象層保持一致。
2. 當目標Pod在同一個節點時ClusterIP 訪問流程的時序圖
3. 當目標Pod跨節點時ClusterIP 訪問流程的時序圖
4. 完整流程説明:
-
客户端發起請求:
- 應用訪問 Service 的 ClusterIP + Port
-
源節點規則處理:
- kube-proxy 維護的 iptables/IPVS 規則執行 DNAT
- 目標地址轉換為實際 Pod IP(通過 EndpointSlice 選擇)
-
路由決策:
-
內核檢查目標 IP 是否在同一節點:
- 是:直接轉發到本地 veth 接口
- 否:進入 overlay 網絡流程
-
-
跨節點特殊處理:
- 源節點:網絡插件封裝數據包 (VXLAN/Geneve 等)
- 目標節點:解封裝並轉發到目標 Pod
- 響應路徑執行反向操作
-
響應返回:
- 目標 Pod 響應經過反向路徑處理
- 客户端收到響應時源 IP 仍是 ClusterIP
5. clusterIp模式下,目標節點在同節點與目標節點跨節點訪問差異説明
| 階段 | 同一節點 | 跨節點 |
|---|---|---|
| 網絡路徑 | 不離開主機 | 經過 overlay 網絡 |
| 網絡插件 | 不參與 | 負責跨節點隧道封裝/解封裝 |
| 性能 | 較高 (無封裝開銷) | 較低 (有隧道開銷) |
| 規則處理 | 本地 iptables DNAT | 源節點 DNAT + 目標節點規則處理 |
| 數據包變化 | 僅目標 IP 修改 (DNAT) | DNAT + 隧道封裝 + 可能的 SNAT |