Sidecar 還是 Ambient?
一個 Istio 服務網格在邏輯上分為資料平面和控制平面。
資料平面是調解和控制微服務之間所有網路通訊的代理程式集合。它們還收集和報告所有網格流量的遙測數據。
控制平面管理和配置資料平面中的代理程式。
Istio 支援兩種主要的 資料平面模式
- sidecar 模式,它會在您在叢集中啟動的每個 Pod 旁邊部署一個 Envoy 代理,或者在虛擬機器上運行的服務旁邊運行。
- ambient 模式,它使用每個節點的第 4 層代理,以及可選的每個命名空間的 Envoy 代理,用於第 7 層功能。
您可以選擇將某些命名空間或工作負載加入到每種模式中。
Sidecar 模式
Istio 從 2017 年首次發佈以來,就建立在 sidecar 模式的基礎上。Sidecar 模式廣為人知且經過徹底的實戰測試,但會帶來資源成本和操作開銷。
- 您部署的每個應用程式都會有一個 Envoy 代理以 Sidecar 的方式 注入
- 所有代理程式都可以處理第 4 層和第 7 層
Ambient 模式
Ambient 模式於 2022 年推出,旨在解決 Sidecar 模式使用者回報的缺點。從 Istio 1.22 版本開始,它已準備好用於單叢集使用案例的生產環境。
- 所有流量都通過僅限第 4 層的節點代理進行代理
- 應用程式可以選擇通過 Envoy 代理進行路由,以獲得第 7 層功能
Sidecar 和 Ambient 模式的選擇
使用者通常會部署網格以啟用零信任安全態勢作為第一步,然後根據需要有選擇地啟用 L7 功能。當不需要時,Ambient 網格允許這些使用者完全繞過 L7 處理的成本。
Sidecar | Ambient | |
---|---|---|
流量管理 | 完整的 Istio 功能集 | 完整的 Istio 功能集(需要使用 waypoint) |
安全性 | 完整的 Istio 功能集 | 完整的 Istio 功能集:ambient 模式中的加密和 L4 授權。L7 授權需要使用 waypoint。 |
可觀察性 | 完整的 Istio 功能集 | 完整的 Istio 功能集:ambient 模式中的 L4 遙測;使用 waypoint 時的 L7 可觀察性 |
擴展性 | 完整的 Istio 功能集 | 完整的 Istio 功能集(需要使用 waypoint)α |
將工作負載新增到網格 | 標記命名空間並重新啟動所有 Pod 以新增 sidecar | 標記命名空間 - 無需重新啟動 Pod |
增量部署 | 二進制:sidecar 要麼注入,要麼不注入 | 漸進式:L4 始終開啟,L7 可以透過組態新增 |
生命週期管理 | 代理程式由應用程式開發人員管理 | 平台管理員 |
資源利用 | 浪費;CPU 和記憶體資源必須針對每個單獨 Pod 的最差情況使用進行配置 | Waypoint 代理程式可以像任何其他 Kubernetes 部署一樣自動擴展。 具有許多副本的工作負載可以使用一個 waypoint,而不是每個副本都有自己的 Sidecar。 |
平均資源成本 | 大 | 小 |
平均延遲 (p90/p99) | 0.63 毫秒 - 0.88 毫秒 | Ambient:0.16 毫秒 - 0.20 毫秒 Waypoint:0.40 毫秒 - 0.50 毫秒 |
L7 處理步驟 | 2(來源和目的地 sidecar) | 1(目的地 waypoint) |
大規模組態 | 需要 配置每個 sidecar 的範圍以減少配置 | 無需自訂配置即可工作 |
支援「伺服器優先」協定 | 需要配置 | 是 |
支援 Kubernetes Jobs | 由於 sidecar 的生命週期較長而變得複雜 | 透明 |
安全模型 | 最強:每個工作負載都有自己的金鑰 | 強:每個節點代理程式僅擁有該節點上工作負載的金鑰 |
受損的應用程式 Pod 允許存取網格金鑰 | 是 | 否 |
支援 | 穩定,包括多叢集 | Beta,單叢集 |
支援的平台 | Kubernetes (任何 CNI) 虛擬機器 | Kubernetes (任何 CNI) |
第四層 (Layer 4) vs 第七層 (Layer 7) 功能
在第 7 層處理協定的開銷遠高於在第 4 層處理網路封包的開銷。對於給定的服務,如果您的需求可以在 L4 滿足,則可以以大幅降低的成本提供服務網格。
安全性
L4 | L7 | |
---|---|---|
加密 | Pod 之間的所有流量都使用 mTLS 進行加密。 | 不適用 — Istio 中的服務身份基於 TLS。 |
服務對服務身份驗證 | 透過 mTLS 憑證的 SPIFFE。Istio 會發出一個短期的 X.509 憑證,其中編碼了 Pod 的服務帳戶身份。 | 不適用 — Istio 中的服務身份基於 TLS。 |
服務對服務授權 | 基於網路的授權,加上基於身份的策略,例如:
| 完整策略,例如:
|
最終使用者身份驗證 | 不適用 — 我們無法套用每個使用者的設定。 | JWT 的本機身份驗證,支援透過 OAuth 和 OIDC 流程進行遠端身份驗證。 |
最終使用者授權 | 不適用 — 請參閱以上內容。 | 服務對服務策略可以擴展為要求 具有特定範圍、發行者、主體、受眾等的最終使用者憑證。 可以使用外部授權來實作完整的使用者對資源存取,允許來自外部服務(例如 OPA)的每個請求策略具有決策。 |
可觀察性
L4 | L7 | |
---|---|---|
記錄 | 基本網路資訊:網路 5 元組、已傳送/接收的位元組等。請參閱 Envoy 文件。 | 完整請求中繼資料記錄,以及基本網路資訊。 |
追蹤 | 目前沒有;最終可能透過 HBONE 實現。 | Envoy 參與分散式追蹤。請參閱 Istio 追蹤概觀。 |
指標 | 僅限 TCP(已傳送/接收的位元組、封包數等)。 | L7 RED 指標:請求率、錯誤率、請求持續時間(延遲)。 |
流量管理
L4 | L7 | |
---|---|---|
負載平衡 | 僅限連線層級。請參閱 TCP 流量轉移任務。 | 每個請求,啟用例如 Canary 部署、gRPC 流量等。請參閱 HTTP 流量轉移任務。 |
斷路器 | 僅限 TCP. | 除了 TCP 之外,還有 HTTP 設定。 |
離群值偵測 | 在連線建立/失敗時。 | 在請求成功/失敗時。 |
速率限制 | 僅限在連線建立時對 L4 連線資料進行速率限制,具有全域和本機速率限制選項。 | 對每個請求的 L7 請求中繼資料進行速率限制。 |
逾時 | 僅限連線建立(連線保持運作透過斷路器設定進行配置)。 | 每個請求。 |
重試 | 重試連線建立 | 重試每個請求失敗。 |
故障注入 | 不適用 — 無法在 TCP 連線上配置故障注入。 | 完整的應用程式和連線層級故障 (逾時、延遲、特定回應碼)。 |
流量鏡像 | 不適用 — 僅限 HTTP | 將請求百分比鏡像到多個後端. |
不支援的功能
以下功能在 sidecar 模式中可用,但尚未在 ambient 模式中實作
- Sidecar 到 waypoint 的互通性
- 多叢集安裝
- 多網路支援
- 虛擬機器支援