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

danny_2018發表於2022-09-13

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

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

關於 Ambient 模式的看法

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

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

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

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

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

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. 安全問題 :雖然 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 代理的程式碼,更多細節我們不得而知。

來自 “ 雲原生社群 ”, 原文作者:Jimmy Song;原文連結:https://mp.weixin.qq.com/s/98wXMdeutx0wHqcJUIFl8A,如有侵權,請聯絡管理員刪除。

相關文章