博客 / 詳情

返回

k8s 中clusterIp調用鏈

文章主要描述三件事

  1. ClusterIP 訪問流程的時序圖
  2. 當目標Pod在同一個節點時ClusterIP 訪問流程的時序圖
  3. 當目標Pod跨節點時ClusterIP 訪問流程的時序圖

1、ClusterIP 訪問流程的時序圖

以下是一個描述 Kubernetes 中 ClusterIP 訪問流程的時序圖:
image.png

關鍵流程説明:

  1. DNS 解析 (1-2):客户端 Pod 首先通過 kube-dns/CoreDNS 解析服務域名,獲得 ClusterIP
  2. 請求發送 (3):客户端向 ClusterIP 發送請求(虛擬 IP)
  3. 路由攔截 (4-5):節點上的 kube-proxy 攔截請求,查詢 Endpoints API 獲取當前服務對應的 Pod IP 列表
  4. 負載均衡 (6-7):

    • iptables 模式:通過 DNAT 規則隨機轉發到後端 Pod
    • IPVS 模式:使用內核級負載均衡算法選擇 Pod
  5. 響應返回 (8-9):目標 Pod 處理請求後,響應通過原路徑返回

ClusterIP 特性:

  • 虛擬 IP:存在於服務的整個生命週期
  • 內部訪問:僅在集羣內部可達
  • 穩定端點:解耦前端與後端 Pod
  • 自動負載均衡:後端 Pod 變化時自動更新
提示:實際網絡層會根據 CNI 插件不同(Calico/Flannel/Cilium 等)有額外封裝步驟,但 ClusterIP 的抽象層保持一致。

2. 當目標Pod在同一個節點時ClusterIP 訪問流程的時序圖

image.png

3. 當目標Pod跨節點時ClusterIP 訪問流程的時序圖

image.png

4. 完整流程説明:

  1. 客户端發起請求

    • 應用訪問 Service 的 ClusterIP + Port
  2. 源節點規則處理

    • kube-proxy 維護的 iptables/IPVS 規則執行 DNAT
    • 目標地址轉換為實際 Pod IP(通過 EndpointSlice 選擇)
  3. 路由決策

    • 內核檢查目標 IP 是否在同一節點:

      • 是:直接轉發到本地 veth 接口
      • 否:進入 overlay 網絡流程
  4. 跨節點特殊處理

    • 源節點:網絡插件封裝數據包 (VXLAN/Geneve 等)
    • 目標節點:解封裝並轉發到目標 Pod
    • 響應路徑執行反向操作
  5. 響應返回

    • 目標 Pod 響應經過反向路徑處理
    • 客户端收到響應時源 IP 仍是 ClusterIP

5. clusterIp模式下,目標節點在同節點與目標節點跨節點訪問差異説明

階段 同一節點 跨節點
網絡路徑 不離開主機 經過 overlay 網絡
網絡插件 不參與 負責跨節點隧道封裝/解封裝
性能 較高 (無封裝開銷) 較低 (有隧道開銷)
規則處理 本地 iptables DNAT 源節點 DNAT + 目標節點規則處理
數據包變化 僅目標 IP 修改 (DNAT) DNAT + 隧道封裝 + 可能的 SNAT
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.