跳至主要内容

節點層級資料路徑 — A · B · C

條件 2 · Pod-A 命名空間是否加入 mesh? — 未安裝 mesh → A · 標籤已啟用 → B · 標籤不存在 → C

單一 backendRef → Service (Pod-A):每一欄沿著封包從 Pod-A 的命名空間出發,穿過節點核心(B 還會經過使用者空間),最後抵達實體網卡。三條路徑之前都是同一段共用 ingress 主幹

標準 K8s 路由kube-proxy / Calicoistio-cni 攔截ztunnel 代理HBONE / mTLSGateway API 入口HTTPRouteMetalLB LoadBalancerVIP政策未命中 / 繞過
A · 標準 Kubernetes
POD-A 命名空間LINUX 核心空間 · NODE-11 · 明文 TCPPod-A應用程式碼2 · 進入核心veth-A虛擬網卡3 · Svc IP → Pod IP (DNAT)kube-proxyDatapath V24 · 封裝並送出Calico路由引擎 (CNI)實體網卡 NIC-1送上線路
B · Ambient — 轉向
POD-A 命名空間 · 標籤已啟用LINUX 核心空間 · NODE-1使用者空間 · NODE-1核心空間 · 續1 · 明文 TCPPod-A應用程式碼2 · 進入核心veth-A虛擬網卡3 · 政策命中 → 轉向使用者空間istio-cnieBPF / iptables 攔截檢查4 · L4 加密 HBONE/mTLS → 重回核心ztunnel透明代理以 HBONE / mTLS 封裝5 · Svc IP → Pod IP (DNAT)kube-proxyDatapath V26 · 封裝並送出Calico路由引擎 (CNI)實體網卡 NIC-1線路上為加密流量
C · Ambient — 繞過
POD-A 命名空間 · 無標籤LINUX 核心空間 · NODE-11 · 明文 TCPPod-A應用程式碼2 · 進入核心veth-A虛擬網卡3 · 政策未命中 → 繞過 ztunnelistio-cni攔截檢查ztunnel閒置 · 0% 流量4 · Svc IP → Pod IP (DNAT)kube-proxyDatapath V25 · 封裝並送出Calico路由引擎 (CNI)實體網卡 NIC-1線路上為明文流量

A · 標準 Kubernetes

未安裝任何 mesh 元件 — IF · 未安裝 mesh

  • 1Pod-A 內的應用程式開啟一條明文 TCP 連線。
  • 2封包經 veth-A 離開,進入主機核心。
  • 3kube-proxy 將 Service IP DNAT 成目標 Pod IP。
  • 4Calico 解析路由,跨節點時封裝(VXLAN/Geneve),再交給 NIC-1。

B · Ambient — 轉向

istio.io/dataplane-mode=ambient · 標籤已啟用 — IF · istio-cni 政策命中(標籤已啟用)

  • 1–2明文 TCP 經 veth-A 離開 Pod-A 進入核心。
  • 3istio-cni 規則命中帶 ambient 標籤的命名空間,將流量轉向。
  • 4ztunnel 接管連線並以 HBONE (mTLS) 封裝。
  • 5–6加密封包走標準的 kube-proxy → Calico → NIC 路徑。

C · Ambient — 繞過

已安裝 mesh · 命名空間無標籤 — IF · istio-cni 政策未命中(無標籤)

  • 1–2明文 TCP 經 veth-A 離開 Pod-A 進入核心。
  • 3istio-cni 檢查未命中(命名空間未加入);ztunnel 保持閒置,完全不經過。
  • 4–5封包繼續走標準的 kube-proxy → Calico → NIC 路徑,未加密。