Istio 和 Envoy WebAssembly 擴展性,一年回顧
關於 Envoy 和 Istio 基於 WebAssembly 的擴展性工作的更新。
一年前的今天,在 1.5 版本中,我們將基於 WebAssembly 的擴展性引入了 Istio。在過去的一年中,Istio、Envoy 和 Proxy-Wasm 社群持續共同努力,使 WebAssembly (Wasm) 的擴展性變得穩定、可靠且易於採用。讓我們回顧一下 Istio 1.9 版本中對 Wasm 支援的更新,以及我們未來的計畫。
WebAssembly 支援合併到上游 Envoy
在為 Istio 的 Envoy 分支添加 Wasm 和 Proxies 的 WebAssembly (Proxy-Wasm) ABI 的實驗性支援後,我們從早期採用者的社群收集到了一些很棒的回饋。結合開發核心 Istio Wasm 擴充功能的經驗,這幫助我們成熟和穩定了運行時。這些改進使得 Wasm 支援在 2020 年 10 月直接合併到 Envoy 上游,使其成為所有官方 Envoy 版本的一部分。這是一個重要的里程碑,因為它表明
- 運行時已準備好被更廣泛地採用。
- 程式設計 ABI/API、擴展配置 API 和運行時行為正趨於穩定。
- 您可以預期未來會有更大的採用和支援社群。
wasm-extensions
生態系統儲存庫
作為 Envoy Wasm 運行時的早期採用者,Istio 擴展和遙測工作組在開發擴展方面獲得了很多經驗。我們建立了一些一流的擴展,包括元數據交換、Prometheus 統計和屬性生成。為了更廣泛地分享我們的學習,我們在 istio-ecosystem
組織中建立了一個wasm-extensions
儲存庫。這個儲存庫有兩個用途
- 它提供了規範的擴展範例,涵蓋了幾個高度需求的功能(例如基本身份驗證)。
- 它提供了 Wasm 擴展開發、測試和發佈指南。該指南基於 Istio 擴展團隊使用、維護和測試的相同建置工具鏈和測試框架。
該指南目前涵蓋了使用 C++ 的WebAssembly 擴展開發和單元測試,以及使用 Go 測試框架的整合測試,該框架通過使用 Istio 代理二進制檔案執行 Wasm 模組來模擬真實的運行時。未來,我們還將添加幾個更規範的擴展,例如與 Open Policy Agent 的整合,以及基於 JWT 令牌的標頭操作。
通過 Istio 代理程式進行 Wasm 模組分發
在 Istio 1.9 之前,需要使用 Envoy 遠端數據來源來將遠端 Wasm 模組分發到代理。在此範例中,您可以看到定義了兩個 EnvoyFilter
資源:一個用於新增遠端獲取 Envoy 叢集,另一個用於將 Wasm 篩選器注入 HTTP 篩選器鏈。此方法有一個缺點:如果遠端獲取失敗,無論是因為配置錯誤還是暫時性錯誤,Envoy 都會陷入錯誤的配置中。如果 Wasm 擴展配置為失敗關閉,則錯誤的遠端獲取將阻止 Envoy 服務。為了修復此問題,需要對 Envoy xDS 協定進行根本性的變更,使其允許非同步 xDS 回應。
Istio 1.9 通過利用 istio-agent 內的 xDS 代理和 Envoy 的擴展配置發現服務 (ECDS),提供了開箱即用的可靠分發機制。
istio-agent 會攔截來自 istiod 的擴展配置資源更新,從中讀取遠端獲取提示,下載 Wasm 模組,並使用下載的 Wasm 模組的路徑重寫 ECDS 配置。如果下載失敗,istio-agent 將拒絕 ECDS 更新,並防止錯誤的配置到達 Envoy。有關更多詳細資訊,請參閱我們關於 Wasm 模組分發的文件。
Istio Wasm SIG 和未來工作
儘管我們在 Wasm 擴展性方面取得了很大的進展,但仍有許多專案方面有待完成。為了整合各方的努力並更好地應對未來的挑戰,我們成立了一個Istio WebAssembly SIG,旨在為 Istio 提供一種標準且可靠的方式來使用 Wasm 擴展。以下是我們正在進行的一些工作
- 一流的擴展 API:目前,Wasm 擴展需要通過 Istio 的
EnvoyFilter
API 注入。一流的擴展 API 將使 Istio 更容易使用 Wasm,我們預計這將在 Istio 1.10 中引入。 - 分發工件互操作性:基於 Solo.io 的WebAssembly OCI 映像規範工作,標準的 Wasm 工件格式將使建置、提取、發佈和執行變得容易。
- 基於容器儲存介面 (CSI) 的工件分發:使用 istio-agent 分發模組易於採用,但每個代理都會保留 Wasm 模組的副本,效率可能不高。作為更有效率的解決方案,使用臨時 CSI,將提供一個 DaemonSet,該 DaemonSet 可以為 pod 配置儲存。與 CNI 外掛程式類似,CSI 驅動程式將從 xDS 流之外獲取 Wasm 模組,並在 pod 啟動時將其掛載到
rootfs
內部。
如果您想加入我們,該小組將在太平洋時間每隔一個星期二下午 2 點舉行會議。您可以在Istio 工作組日曆上找到會議資訊。
我們期待看到您如何使用 Wasm 來擴展 Istio!