介紹 Ambient Mesh

一種新的 Istio 資料平面模式,無需 Sidecar。

2022 年 9 月 7 日 | 作者:John Howard - Google、Ethan J. Jackson - Google、Yuval Kohavi - Solo.io、Idit Levine - Solo.io、Justin Pettit - Google、Lin Sun - Solo.io

今天,我們很高興推出「ambient mesh」及其參考實作:一種新的 Istio 資料平面模式,旨在簡化操作、更廣泛的應用程式相容性並降低基礎設施成本。Ambient mesh 讓使用者可以選擇放棄 Sidecar 代理,而改用整合到其基礎設施中的資料平面,同時保持 Istio 零信任安全、遙測和流量管理的核心功能。我們正在與 Istio 社群分享 ambient mesh 的預覽版,我們正在努力在未來幾個月內使其達到生產就緒狀態。

Istio 和 Sidecar

自成立以來,Istio 架構的一個決定性特徵是使用 Sidecar – 與應用程式容器一起部署的可程式化代理。Sidecar 允許操作員獲得 Istio 的優勢,而無需應用程式進行重大改造及其相關成本。

Istio’s traditional model deploys Envoy proxies as sidecars within the workloads’ pods
Istio 的傳統模型在工作負載的 Pod 中部署 Envoy 代理作為 Sidecar

儘管 Sidecar 比重構應用程式具有顯著優勢,但它們並不能在應用程式和 Istio 資料平面之間提供完美的隔離。這導致了一些限制

雖然 Sidecar 有其用武之地(稍後將詳細介紹),但我們認為需要一種侵入性較小且更簡單的選項,這將更適合許多服務網格使用者。

切割層

傳統上,Istio 在單個架構元件(Sidecar)中實作所有資料平面功能,從基本加密到進階 L7 策略。實際上,這使得 Sidecar 成為一種全有或全無的方案。即使工作負載只需要簡單的傳輸安全性,管理員仍然需要支付部署和維護 Sidecar 的操作成本。Sidecar 每個工作負載都有固定的操作成本,不會根據用例的複雜性而擴展。

Ambient 資料平面採用不同的方法。它將 Istio 的功能分為兩個不同的層。在基礎層,有一個安全覆蓋層,負責處理流量的路由和零信任安全性。在此之上,在需要時,使用者可以啟用 L7 處理以存取 Istio 的全部功能。L7 處理模式雖然比安全覆蓋層更重,但仍作為基礎設施的 Ambient 元件執行,無需修改應用程式 Pod。

Layers of the ambient mesh
Ambient Mesh 的層

這種分層方法允許使用者以更漸進的方式採用 Istio,根據需要,在每個命名空間的基礎上,從沒有網格平穩過渡到安全覆蓋層,再到完整的 L7 處理。此外,在不同 Ambient 層或使用 Sidecar 執行的工作負載可以無縫互操作,允許使用者根據隨時間變化的特定需求混合和匹配功能。

建構 Ambient Mesh

Istio 的 Ambient 資料平面模式使用在 Kubernetes 叢集中每個節點上執行的共享代理。這個代理是一個零信任通道(或 ztunnel),其主要職責是安全地連線和驗證網格內的元素。節點上的網路堆疊會將參與工作負載的所有流量重新導向到本機 ztunnel 代理。這完全將 Istio 資料平面的關注點與應用程式的關注點分開,最終允許操作員啟用、停用、擴展和升級資料平面,而不會干擾應用程式。ztunnel 不對工作負載流量執行 L7 處理,使其比 Sidecar 精簡得多。這種複雜性的巨大降低和相關的資源成本使其適合作為共享基礎設施交付。

Ztunnel 啟用服務網格的核心功能:零信任。當命名空間啟用 Ambient 模式時,會建立一個安全覆蓋層。它為工作負載提供 mTLS、遙測、驗證和 L4 授權,而無需終止或剖析 HTTP。

Ambient mesh uses a shared, per-node ztunnel to provide a zero-trust secure overlay
Ambient mesh 使用每個節點共享的 ztunnel 來提供零信任安全覆蓋層

啟用 Ambient 模式並建立安全覆蓋層後,可以將命名空間設定為使用 L7 功能。這允許命名空間實作 Istio 的全部功能,包括 Virtual Service APIL7 遙測L7 授權策略。在此模式下運作的命名空間使用一個或多個基於 Envoy 的 航點代理 來處理該命名空間中工作負載的 L7 處理。Istio 的控制平面會設定叢集中的 ztunnel,以將所有需要 L7 處理的流量傳遞到航點代理。重要的是,從 Kubernetes 的角度來看,航點代理只是可以像任何其他 Kubernetes 部署一樣自動擴展的常規 Pod。我們預期這會為使用者節省大量資源,因為航點代理可以自動擴展以滿足其服務命名空間的即時流量需求,而不是操作員預期的最大最壞情況負載。

When additional features are needed, ambient mesh deploys waypoint proxies, which ztunnels connect through for policy enforcement
當需要額外功能時,Ambient mesh 會部署航點代理,ztunnel 會透過這些代理連線以進行策略強制執行

Ambient mesh 使用 mTLS 上的 HTTP CONNECT 來實作其安全通道並在路徑中插入航點代理,我們將這種模式稱為 HBONE (HTTP-Based Overlay Network Environment)。HBONE 提供比單獨使用 TLS 更乾淨的流量封裝,同時實現與通用負載平衡器基礎設施的互通性。預設情況下使用 FIPS 建置來滿足合規性需求。有關 HBONE、其基於標準的方法以及 UDP 和其他非 TCP 協定的計劃的更多詳細資訊將在未來的部落格中提供。

在單個網格中混合使用 Sidecar 和 Ambient 模式不會對系統的功能或安全屬性造成限制。無論選擇哪種部署模型,Istio 控制平面都能確保正確強制執行策略。Ambient 模式只是引入了一個具有更好人體工學和更高靈活性的選項。

為什麼不在本機節點上進行 L7 處理?

Ambient 模式使用節點上共享的 ztunnel 代理來處理網格的零信任方面,而 L7 處理則在單獨排程的 Pod 中的航點代理中進行。為什麼要費心進行間接處理,而不僅僅是在節點上使用共享的完整 L7 代理?有幾個原因

但是那些額外的躍點呢?

使用 Ambient 模式,航點不一定保證與其服務的工作負載位於同一節點上。雖然乍看之下這似乎是一個效能問題,但我們相信延遲最終會與 Istio 目前的 Sidecar 實作一致。我們將在專門的效能部落格文章中進行更多討論,但現在我們將用兩點來總結

資源開銷

總體而言,我們預期 Istio 的 Ambient 模式對大多數使用者而言具有更少且更可預測的資源需求。ztunnel 的有限責任允許它作為節點上的共享資源部署。這將大大減少大多數使用者所需的每個工作負載保留。此外,由於航點代理是普通的 Kubernetes Pod,它們可以根據其服務的工作負載的即時流量需求動態部署和擴展。

另一方面,Sidecar 需要為每個工作負載保留最差情況下的記憶體和 CPU。進行這些計算很複雜,因此實際上管理員傾向於過度配置。這導致節點利用率不足,因為高保留量會阻止其他工作負載被排程。Ambient 模式較低的每個節點固定開銷和動態擴展的航點代理,將需要在總體上更少的資源保留,從而更有效率地使用叢集。

那麼安全性呢?

隨著一個全新的架構出現,自然會產生關於安全性的問題。關於環境模式安全性的部落格有深入的探討,但我們將在此處進行總結。

Sidecar 與它們所服務的工作負載共置,因此,一方的漏洞會危害到另一方。在環境網格模型中,即使應用程式遭到入侵,ztunnel 和航點代理仍然可以對遭到入侵的應用程式流量強制執行嚴格的安全策略。此外,考慮到 Envoy 是全球最大網路營運商使用的成熟且久經考驗的軟體,它可能比與其並行的應用程式更不容易受到攻擊。

雖然 ztunnel 是一個共享資源,但它只能存取目前在其執行節點上的工作負載的金鑰。因此,它的影響範圍不比任何其他依賴於每個節點金鑰進行加密的加密 CNI 更糟。此外,考慮到 ztunnel 有限的 L4 攻擊面和 Envoy 前述的安全特性,我們認為這種風險是有限且可接受的。

最後,雖然航點代理是共享資源,但它們僅限於服務一個服務帳戶。這使得它們不比現在的 Sidecar 更糟;如果一個航點代理遭到入侵,與該航點關聯的憑證會遺失,其他任何東西都不會遺失。

這是 Sidecar 的末路嗎?

絕對不是。雖然我們相信環境網格將成為未來許多網格使用者的最佳選擇,但 Sidecar 對於那些需要專用資料平面資源(例如,用於合規性或效能調優)的使用者來說仍然是一個不錯的選擇。Istio 將繼續支援 Sidecar,並且重要的是,允許它們與環境模式無縫互通。事實上,我們今天發布的環境模式程式碼已經支援與基於 Sidecar 的 Istio 互通。

了解更多

觀看一段簡短影片,了解 Christian 如何介紹 Istio 環境模式元件,並示範一些功能

參與貢獻

我們今天發布的是 Istio 中環境模式的早期版本,它仍然處於積極開發中。我們很高興與更廣泛的社群分享它,並期待更多人參與其中,在我們邁向 2023 年的生產就緒階段時,共同塑造它。

我們非常希望收到您的回饋,以幫助塑造這個解決方案。支援環境模式的 Istio 版本可於 下載和試用,位於 Istio 實驗性儲存庫。遺失的功能和工作項目的清單可在 README 中找到。請試用一下,並告訴我們您的想法!

感謝為啟動環境網格做出貢獻的團隊!

分享此文章