博客 / 詳情

返回

藍易雲cdn:如何構建Sidecarless模式的高性能服務網格

要構建 <span style="color:red;">Sidecarless</span>(無 Sidecar)高性能服務網格,核心思路是:把“每個 Pod 背一個代理小書包”的模式,升級為“每個節點設一個流量與安全崗亭”,並且把 <span style="color:red;">L4</span>(連通與零信任)與 <span style="color:red;">L7</span>(路由/鑑權/限流)能力分層按需啓用。這樣能顯著降低每 Pod 的 CPU/內存/冷啓動開銷,並把治理能力平台化。🙂


兩條主流落地路線(務實選型)

  1. <span style="color:red;">Istio Ambient</span>:底座是每節點 <span style="color:red;">ztunnel</span>(<span style="color:red;">DaemonSet</span>)負責 L4 安全與轉發,上層按需部署 <span style="color:red;">Waypoint</span> 負責 L7 能力;Ambient 明確採用“兩層數據平面”分拆思路。 (Istio)
  2. <span style="color:red;">Cilium Service Mesh</span>:用 <span style="color:red;">eBPF</span> 在內核側攔截與加速轉發,必要時把流量透明引到每節點的 <span style="color:red;">Envoy</span>(常見結合 <span style="color:red;">TPROXY</span>)做 L7 策略與路由。 (Cilium 文檔)

原理對比表(你要的“高性能抓手”在這裏)📊

維度 傳統 Sidecar <span style="color:red;">Istio Ambient</span> <span style="color:red;">Cilium eBPF Mesh</span>
數據平面位置 每 Pod 1 個代理 每節點 <span style="color:red;">ztunnel</span> + 可選 <span style="color:red;">Waypoint</span> 內核 <span style="color:red;">eBPF</span> + 每節點 Envoy(可選)
性能/成本 Pod 數越多成本越高 L4 默認輕量,L7 按需 L3/L4 更“貼內核”,L7 再上代理
L7 能力 全量可用 只給需要的服務上 Waypoint 只給需要的流量引到 Envoy
升級與風險域 影響面分散、運維複雜 組件集中、變更更可控 組件集中,但更依賴內核/EBPF 能力
適合場景 小規模/強依賴 L7 全量治理 大規模、追求降本+漸進治理 追求極致轉發性能與可觀測閉環

建設路線圖(按這個做,少走彎路)🚀

flowchart TD
A[定義目標:p99/成本/治理範圍] --> B[選數據平面:Ambient 或 eBPF]
B --> C[先落地 L4:<span style='color:red;'>mTLS</span>/身份/基礎策略]
C --> D[分域啓用:命名空間或服務級 Opt-in]
D --> E[只給關鍵鏈路上 L7:Waypoint/Envoy]
E --> F[可觀測閉環:指標/日誌/追蹤 + 迴歸壓測]
F --> G[規模化:多集羣、發佈灰度、SLO化運營]

方案 A:Istio Ambient(Sidecarless 的“分層治理”)

1)安裝 Ambient(示例)

istioctl install --set profile=ambient -y

解釋:

  • istioctl install:下發控制面與數據面組件。
  • --set profile=ambient:啓用 <span style="color:red;">Ambient</span> 數據平面模式;其關鍵點是每節點 <span style="color:red;">ztunnel</span> 承擔 L4 安全覆蓋,L7 由可選 <span style="color:red;">Waypoint</span> 承擔。 (Istio)
  • -y:自動確認,便於自動化流水線執行。

2)讓業務“加入 Ambient”(按命名空間漸進)

kubectl label namespace prod istio.io/dataplane-mode=ambient --overwrite

解釋:

  • label namespace:把接入做成“配置動作”,避免改 Pod 模板。
  • istio.io/dataplane-mode=ambient:表示該命名空間走 <span style="color:red;">Sidecarless</span> 數據面(節點級 ztunnel 接管東西向流量)。(Istio)
  • --overwrite:冪等覆蓋,適合反覆執行的 GitOps。

3)只在需要 L7 的地方部署 Waypoint(把成本花在刀刃上)

Waypoint 通常與 <span style="color:red;">Gateway API</span> 生態配合,用於 L7 路由/策略等能力“按需開通”。(Istio)

方案 B:Cilium eBPF Mesh(追求轉發效率的“內核加速派”)

1)安裝 Cilium 並開啓服務網格能力(示例)

helm install cilium cilium/cilium -n kube-system \
  --set envoy.enabled=true \
  --set hubble.enabled=true

解釋:

  • helm install:以聲明式方式部署 Cilium。
  • envoy.enabled=true:開啓每節點 <span style="color:red;">Envoy</span>(通常是 DaemonSet 形態)用於 L7 策略/路由能力;Cilium 文檔明確 Envoy 作為主機側代理組件部署。(Cilium 文檔)
  • hubble.enabled=true:打開觀測面,便於把“性能優化”做成可驗證閉環,而不是拍腦袋。

2)為何性能更好(關鍵機制一句話講透)

Cilium 利用 <span style="color:red;">eBPF</span> 在內核側攔截與轉發,必要時通過 <span style="color:red;">TPROXY</span> 把流量透明導向每節點 Envoy 做 L7 處理,從而避免“每 Pod 一跳代理”的常態開銷。(Medium)


落地建議(高性能網格的“經營原則”)

  • 默認只做 <span style="color:red;">L4 + mTLS</span> 覆蓋,把 <span style="color:red;">L7</span> 當成“可選增值服務”:只給支付、登錄、核心 API 等關鍵鏈路啓用。 (Istio)
  • 用“命名空間/服務標籤”做接入開關,避免一次性全量上網格造成性能與排障壓力。
  • 每次啓用/升級都配一套壓測迴歸指標:<span style="color:red;">p95/p99</span>、CPU/內存、連接數、重傳率;否則你只是在“感覺性能更好”。

如果你告訴我:你的集羣規模(節點數/Pod 數)、主要協議(HTTP/gRPC/自定義 TCP)、是否需要強 L7(鑑權/灰度/限流),我可以把上面路線收斂成一份“可直接執行的建設清單 + 分階段驗收指標”。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.