如何評價 Istio 新推出的 Ambient 模式?

語言: CN / TW / HK

近日 Istio 社群推出了 Ambient Mesh [1] ,這是一種新的 Istio 資料平面模式,旨在簡化操作、擴大應用相容性並降低基礎設施成本。使用者可以選擇將 Ambient Mesh 整合到其基礎設施的網格資料平面,放棄 sidecar 代理,同時保持 Istio 的零信任安全、遙測和流量管理等核心功能。該模式目前還是預覽版,Istio 社群準備在未來幾個月內將其推向生產就緒。

Ambient Mesh 推出的訊息對於社群來說可能顯得有些突然,但其實關於 sidecar 模式對於資源的消耗過大,以及簡化服務網格的呼聲在社群裡已經存在很久了,Google 從多年前就在尋求 HBONE(HTTP-Based Overlay Network Environment,基於 HTTP 的重疊網路環境)解決方案,還有社群提出的 多種 sidecar 部署模式  [2] proxyless 模式  [3] 等都是為了解決這個問題。

關於 Ambient 模式的看法

本文我將談談對 ambient 模式的幾點看法:

  1. 1. 關於 Ambient Mesh 的命名 :我覺得叫做  Ambient Mode 會更好,有些接觸 Istio 的初學者可能會覺得它是一種全新的不同於 Istio 的 service mesh;另外關於這個模式的中文翻譯,如果直接翻譯成 “環境網格” 似乎讓人很難理解,我還想到了其他詞彙,如 “外圍”、“氛圍”、“周圍”、“環繞”、” 情景” 等,沒有一個漢語詞彙可以準確表達這個 ambient 的含義,因為相對於 sidecar 模式,ambient 模式對應用程式 pod 沒有侵入性,暫且將其稱之為  外圍模式

  2. 2. Ambient Mode 的本質 :它的本質是分離 sidecar proxy(Envoy)中的 L4 和 L7 功能,讓一部分僅需要安全功能的使用者可以最小阻力(低資源消耗、運維成本)地使用 Istio service mesh。

  3. 3. Ambient Mode 的意義 :因為它 sidecar 模式相容,使用者在採納 Ambient Mode 獲得了 mTLS 和有限的可觀察性及 TPC 路由等 L4 功能,之後可以更方便的過度到 sidecar mode 以獲得完全的 L7 功能。這給使用者採納 Istio 提供了更多模式選擇,優化了 Istio 採納路徑。

  4. 4. Ambient Mode 的壞處 :Proxyless、sidecar、ambient 模式,使得 Istio 越來越複雜,使用者理解起來更加費力;控制平面為了支援多種資料平面部署模式,其實現將更加複雜。

  5. 5. 與其他 service mesh 的關係 :有的 service mesh 從原先的 per-proxy per-node 模式轉變為 sidecar mode,如 Linkerd;還有的從 CNI 做到 service mesh,如 Cilium 使用 per-proxy per-node 模式;如今 Istio 在 sidecar mode 的基礎上增加了 ambient mode,這也是目前唯一同時支援這兩種部署模式的 service mesh,為使用者提供了多樣的選擇。

  6. 6. 安全問題 :雖然  Istio 服務網格 ambient 模式安全詳解  [4] 說明了 ambient 模式的設計主旨是為了將應用程式與資料平面分離,讓安全覆蓋層的元件(ztunnel)處於類似於 CNI 的網格底層,考慮到 ztunnel 有限的 L4 攻擊面,該模式的安全風險是可以接受的;但是,ztunnel 座位 DaemonSet 部署在每個節點上,需要處理和分發排程到該節點上的所有 pod 的證書來建立 mTLS 連線,一旦 一個 ztunnel 被攻破,它的爆炸半徑確實是大於一個 sidecar,安全詳解的部落格中說 Envoy 的 CVE 問題會影響所有 sidecar,升級 sidecar 也會帶來很大的運營成本,所以權衡之下選擇 ambient 模式,安全問題再次給使用者造成了困惑,不過最終選擇的權利還是在使用者自己。

Ambient 模式的限制

目前 ambient 模式的程式碼位於 Istio 程式碼庫的 experimental-ambient 分支  [5]  根據 Matt Klein 和 Louis Ryan 的說法  [6] ,ztunnel 和 Waypoint proxy 是用 Envoy 實現的,其中 ztunnel 是精簡後的 Envoy,只負責 L4 功能且繼續使用 xDS 協議來控制。但是 ambient 模式依然有很多  限制  [7] ,例如:

  • • 不支援 EnvoyFilter

  • • 直接對 Pod IP 而不是 service 的請求在某些情況下將無效;

  • • Ambient 模式下的服務無法通過 LoadBalancer 和  NodePort 方式訪問,不過你可以部署一個入口閘道器(未啟用 ambient 模式)以從外部訪問服務;

但是目前在 experimental-ambient 分支中還有看到 ztunnel 和 waypoint 代理的程式碼,更多細節我們不得而知。

更多

以上就是筆者對 ambient 模式(外圍模式)的看法,該模式還處於試驗階段,但絕不是玩具,據信已在某些場景試驗過。筆者也將繼續追蹤該模式的最新進展,請保持關注。也歡迎更多關注 Istio 的朋友 加入雲原生社群 Istio 討論群  [8] ,與社群大咖一起探討,或者在本文下面評論聊聊你的看法。

推薦閱讀

引用連結

[1] Istio 社群推出了 Ambient Mesh:  https://lib.jimmysong.io/blog/introducing-ambient-mesh/

[2] 多種 sidecar 部署模式:  https://jimmysong.io/blog/beyond-istio-oss/#sidecar-management

[3] proxyless 模式:  https://jimmysong.io/blog/beyond-istio-oss/#proxyless-pattern

[4] Istio 服務網格 ambient 模式安全詳解:  https://lib.jimmysong.io/blog/ambient-security/

[5] experimental-ambient 分支:  https://github.com/istio/istio/tree/experimental-ambient

[6] 根據 Matt Klein 和 Louis Ryan 的說法:  https://twitter.com/mattklein123/status/1567870635568955392?ref_src=twsrc^tfw

[7] 限制:  https://github.com/istio/istio/tree/experimental-ambient#limitations

[8] 加入雲原生社群 Istio 討論群:  https://cloudnative.to/community/join/

歡迎 加入雲原生社群 ,點選閱讀原文了解更多。