兩全其美:Sidecarless 與 Sidecar 模式融合的服務網格新形態

01 前言

Istio 社區與 2022 年 9 月發佈了一種名爲 Ambient 的新架構,由於其從架構上將 Sidecar 轉變爲 4 層和 7 層代理,故而這種模式也被稱爲 Sidecarless 模式。阿里雲服務網格 ASM 是業內首個支持 Ambient 模式的託管式服務網格。

本文基於 2023 雲棲大會上關於阿里雲服務網格 ASM 產品技術最新進展分享的實錄,來自阿里云云原生產品線服務網格團隊的史澤寰、尹航同學將用 4 個部分,爲讀者介紹 ASM 如何落地這種 Sidecarless 和 Sidecar 模式融合的服務網格新形態,以及服務網格的 Serverless 化。

02 服務網格架構的演進

隨着服務網格在雲原生技術體系下越來越流行,越來越多的企業技術團隊在生產環境使用服務網格,相信有很多朋友已經瞭解過服務網格,爲了方便剛開始接觸服務網格的同學更順暢地理解後續內容,我們先來對服務網格經典的 Sidecar 模式做一個介紹。

經典服務網格架構根據組件的職責被劃分爲控制平面和數據平面,控制平面扮演服務網格的大管家,爲數據平面組件根據需求提供不同的配置,數據平面作爲執行者,它可以根據控制平面下發的配置對流量進行操縱,是服務網格能力真正的執行者。

爲了實現流量路由、負載均衡、故障注入、請求響應操縱或是認證鑑權、零信任網絡等等服務網格能力,服務網格的注入器(Injector)會嚮應用 Pod 注入一個專門用於執行服務網格能力的容器,它與應用在同一個 Pod 內,共享網絡命名空間,這個容器就是服務網格的 Sidecar。

由於 Sidecar 與應用容器共享網絡命名空間,可以通過 iptables 規則方便地將應用的流量攔截到位於該容器內的網格代理進程,這便是經典的 Sidecar 架構。

ASM 將控制平面與數據平面解耦,託管化部署,相比於 Istio,ASM 具備一些顯著的優勢。首先,ASM 具備完善的生命週期管理能力,在服務網格運維實踐中,由於服務網格配置複雜,社區迭代快速,往往安裝、升級服務網格都會存在一些挑戰,藉助 ASM 的生命週期管理能力,用戶可以一鍵創建、刪除、升級服務網格實例而完全不需要考慮配置問題或兼容適配問題。

其次,ASM 提供了屏蔽錯誤配置和診斷的能力,我們觀察到一些客戶在使用服務網格的過程中,配置錯誤導致結果不符合預期是比較常見的問題,ASM 將這些問題轉化成爲檢查項、診斷項,儘早對錯誤的配置進行攔截和告警,幫助服務網格運維人員及時發現和解決問題。服務網格作爲雲原生應用的網絡基礎設施,可以幫助應用與可觀測平臺進行對接,爲此,ASM 提供了一鍵快速對接多種雲服務的能力,幫助用戶快速打通雲原生生態體系。

最後,ASM 提供了企業級的多集羣模式支持,通過 ASM 用戶可以快速實現多數據面集羣的網格化。

ASM 目前將部分控制平面組件 Serverless 化,Serverless 化的組件可以實現自動化彈性擴容,按需使用。基於 Serverless 底座的能力,實現更高的調度效率和啓動速度優化,通過鏡像緩存,顯著降低就緒時間和啓動時間。

03 新型的數據平面模式

Sidecar 模式是非常直觀且有效的,但它仍然存在一些缺點:

1)Sidecar 的注入對工作負載存在侵入性,注入或取消注入需要重啓工作負載,調整 Sidecar 的配置(例如資源)也可能需要重啓工作負載,Sidecar 和工作負載是強綁定的。

2)資源利用率不夠理想,爲了應對最壞情況,每個 Sidecar 都需要預留一部分資源,集羣規模越大,閒置的資源越多。

3)流量捕獲、協議識別等等 7 層處理的計算成本高,但並非所有請求都是 HTTP 協議,或是需要經過 Sidecar 處理的。

基於以上原因,我們需要一種侵入性更小,使用成本更低的方式,讓服務網格適用於更多場景。於是,2022 年 9 月,Istio 社區推出了 Sidecarless 的 Ambient 模式,該模式將 Sidecar 的功能拆分至 4 層和 7 層代理,且 4 層代理和 7 層代理的部署均與工作負載分離,很好地彌補了 Sidecar 模式在一些場景下的缺點。ASM 則是業界首個支持 Ambient 模式的託管式服務網格。

在 Ambient 模式下,4 層代理主要專注於傳輸層的可觀測、路由以及通信加密,7層代理則基於 7 層協議在流量管理、安全、可觀測維度進行更復雜的行爲處理。用戶可以根據實際業務需求,漸進式地選擇是否爲應用啓用代理,啓用哪一層的代理。

我們將數據面的 L4 代理稱之爲 Ztunnel,它是一個 L4 處理層,L4 處理層將負責應用的所有 4 層通信的轉發,藉助 ztunnel 的能力,使得應用在加入網格後立即獲得零信任安全能力,包括 MTLS,身份驗證和授權策略。ztunnel 以 DaemonSet 模式部署後,利用 CNI 在節點上配置流量攔截規則,將網格內 Pod 的流量攔截至 ztunnel 實例,ztunnel 將流量經過 MTLS 加密後傳輸,對端 ztunnel 將流量解密,然後轉發至應用。藉助以上路徑,ztunnel 還可以收集 TCP 監控指標,訪問日誌等。

我們將 7 層代理稱爲 Waypoint 代理,Waypoint 代理與經典架構中的 Sidecar 一樣,是基於 Envoy 的代理,用於在 Ambient Mesh 模式中實現更高級的,基於 7 層協議的能力。例如,它可以基於請求標頭和憑據來應用服務網格的高級策略,諸如熔斷、流量整形,流量分割,重試,故障注入,基於角色的訪問控制授權策略等等。相比於 Ztunnel 代理基於節點級部署,Waypoint 代理則是以服務級別部署,用戶可以針對性地爲某個服務啓用或關閉 7 層代理,或是任意伸縮部署規模,按需部署,提高集羣中資源的利用率。

在瞭解 L4 和 L7 代理的具體能力之後,我們來看一下 L4、L7 解耦的 Ambient 模式下的網絡拓撲:

接下來我們來看看 Ambient 模式下的流量路徑是怎樣的,首先從 L4 代理開始:

1. Ambient 模式下的應用 Pod 啓動時,CNI 插件會將其 IP 地址寫入到節點網絡命名空間下的 ipset 中。

2. 發起請求時,流量數據包通過 Pod 的 veth pair 接口到達節點網絡命名空間,來自 ipset 中地址的數據包將被節點上 iptables 規則捕獲並進行處理。

3. Iptables 規則將數據包被標記爲 0x100。

4. 節點上的策略路由規則指定任何標記爲 0x100 的數據包都要通過 istio 出向網絡接口定向到目標 192.168.127.2。

5. ztunnel 代理 Pod 中的透明代理 iptables 規則將來自 pistioout 的數據包送入 ztunnel 出站端口 15001。

6. ztunnel 處理數據包並將其轉發至目標服務(httpbin)的 IP 地址。該地址在節點 B 上時 httpbin 的 veth 設備地址,數據包因此被路由至節點 B。

7. 數據包到達節點 B 後,入站流量的規則確保數據包被路由到 istioin 接口。

8. 數據包通過 istioin 和 pistioin 組成的隧道使數據包進入 ztunnel pod。

9. Ztunnel Pod 中的 iptables 規則捕獲來自 pistioin 的數據包,並根據標記將它們定向到端口 15008。

10. ztunnel pod 處理數據包並將其發送至目標 pod。

當 4 層代理轉發 Outbound 數據時,若目標應用啓用了 7 層代理,4 層代理會將流量通過 HBONE 隧道轉發至目標應用的 7 層代理,流量將通過監聽在 15008 端口的 connect terminate Listener 進入 7 層代理,這個 Listener 上通過特定的 Filter 處理,將 HBONE 流量解包並完成身份認證後,將流量送入 main internal 內部監聽器進行後續處理。在 main listener 上,根據 Service IP+Port 對流量進行匹配,並執行 7 層流量策略,確定目標 Cluster。最後,流量進入名爲 connect_originate 的 internal Listener,該 Listener 使用 HBONE 隧道繼續將流量轉發至上游目標。

對於 Ambient Mesh 流量路徑有興趣的讀者也可以參考筆者的另一篇文章,在這篇文章中對 Ambient 模式下的流量路徑做了更深入細緻的剖析。

04 Sidecarless 與 Sidecar 模式融合的新形態

在新的架構中,Sidecar 模式與 Sidecarless 模式並不衝突,用戶可以混合使用兩種模式混合部署,藉助這個特性,根據需求漸進式完成切換成爲可能。ASM 的託管 Ambient 模式在特定場景下最多可以減少 60% 資源開銷、減少 50% 運維工作以及降低 40% 的請求時延。

ASM 通過統一的控制平面 API,爲數據平面提供配置管理平臺,爲融合形態中 Sidecar 模式下的 Sidecar,Sidecarless 模式下的 4 層代理、7 層代理,甚至託管的代理,按需下發不同的配置。

由於七層代理承載了更豐富的服務網格能力,在生產實踐中,七層代理更有可能需要跟隨業務應用的擴縮容同時進行擴縮容。基於新架構下七層代理部署的靈活性,ASM 提供了託管的 7 層代理,將七層代理以 Serverless 形態部署,屏蔽 7 層代理的運維複雜度,用戶無需爲 7 層代理提前進行容量規劃,也不需要承擔 7 層代理的任何運維工作,根據業務需要,隨時可以對 7 層代理進行部署、回收以及一鍵擴縮容。

下面我們來看看託管 7 層代理的技術架構,用戶可以通過 K8s 標準的 Gateway API 聲明 7 層代理,位於 ASM 託管側的 Waypoint Proxy Controller 將會 Watch Gateway API,當 Gateway CR 創建、變更後,Waypoint Proxy Controller 根據 Gateway API 的 spec 對 Waypoint Proxy 工作負載進行生命週期管理。用戶可以通過 Gateway API 指定將七層代理部署在 ASM 託管的 Waypoint Proxy 池中,或是用戶集羣內的 ECI Serverless 節點上。

05 客戶案例

麗迅物流是百麗旗下專注於時尚產業、爲企業提供專業物流及供應鏈解決方案的服務商。麗迅物流在全國擁有 70+ 全渠道實體雲倉、6 大中心電商倉,總面積達 100 萬+ 平方米,服務覆蓋 300+ 城市、3000+ 商圈,爲多家知名時尚品牌及其品牌門店提供全渠道配送服務。

當前,麗訊物流已將核心生產系統 100% 切換至 ASM,ASM 幫助麗訊物流在網格化落地過程中縮短了至少 50% 的實施週期,託管化免運維的架構和豐富的產品化能力,也幫助麗訊物流運維團隊在網絡流量管理、安全配置管理等方面的運維效率至少提升 40%。麗訊物流切換至 ASM 後,運維人員通過 ASM 提供的各類 API 完成流量規則、安全、可觀測相關的所有配置。使用 ASM 網關接入自定義鑑權服務增強了入口安全性,藉助 ASM 的外服務註冊能力,打通了網格內外服務的通信,通過 ASM 提供的產品化能力高效地接入了統一的可觀測平臺,獲得了從可觀測數據生成,到採集,查詢、搜索;到儀表盤可視化展示,網格拓撲即時洞察,及網格服務健康評估等整套可觀測解決方案。

最後,讓我們先來縱覽阿里雲服務網格提供了哪些企業級服務網格能力。從服務網格能力層面上,包括:異構服務統一治理,多集羣、跨集羣應用的網絡管理,與 CI/CD 工具融合應用的灰度發佈與部署,應用雲上架構平滑演進,基於 Kserve 的 AI 彈性服務管理等。從集成性與兼容性層面上說,ASM 支持 Web 用戶界面,以及提供了完備的 OpenAPI,提供了強大靈活的被集成能力,同時,ASM 完全兼容 Istio 的使用規範,支持通過標準的 K8s API 對服務網格實例的配置進行配置變更。

ASM 控制平面核心組件採用完全託管化設計,標準版與企業版使用統一柔性架構,提供了完備的多版本支持,同時提供了多項包括流量管理增強、協議增強、自適應 XDS 優化、軟硬一體優化、網格診斷分析、擴展中心、異構服務註冊集成等的強大的定製能力。

ASM 是雲原生應用的網絡平臺,爲運行在異構計算基礎設施上的應用服務提供統一的網格化治理能力。基於 ASM 強大的異構計算設施支持能力,ASM 幫助用戶將運行在 K8s 節點上的工作負載、運行在 ECI 節點的 Serverless 工作負載、以及託管Serverless 組件甚至其他公有云或 IDC 內的工作負載、異構設施打通,進行統一管理和運維。更多 ASM 能力請移步 ASM 首頁或通過 ASM 官網文檔瞭解詳情。

ASM 首頁:
https://www.aliyun.com/product/servicemesh?spm=5176.28508143.J_4VYgf18xNlTAyFFbOuOQe.183.e939154a6Av1f8

作者:史澤寰、尹航

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章