Istio 和 Envoy WebAssembly 擴展性,一年回顧

關於 Envoy 和 Istio 基於 WebAssembly 的擴展性工作的更新。

2021 年 3 月 5 日 | 作者:彭元斌 - Google

一年前的今天,在 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 版本的一部分。這是一個重要的里程碑,因為它表明

wasm-extensions 生態系統儲存庫

作為 Envoy Wasm 運行時的早期採用者,Istio 擴展和遙測工作組在開發擴展方面獲得了很多經驗。我們建立了一些一流的擴展,包括元數據交換Prometheus 統計屬性生成。為了更廣泛地分享我們的學習,我們在 istio-ecosystem 組織中建立了一個wasm-extensions 儲存庫。這個儲存庫有兩個用途

該指南目前涵蓋了使用 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 模組分發的文件

Remote Wasm module fetch flow
遠端 Wasm 模組獲取流程

Istio Wasm SIG 和未來工作

儘管我們在 Wasm 擴展性方面取得了很大的進展,但仍有許多專案方面有待完成。為了整合各方的努力並更好地應對未來的挑戰,我們成立了一個Istio WebAssembly SIG,旨在為 Istio 提供一種標準且可靠的方式來使用 Wasm 擴展。以下是我們正在進行的一些工作

如果您想加入我們,該小組將在太平洋時間每隔一個星期二下午 2 點舉行會議。您可以在Istio 工作組日曆上找到會議資訊。

我們期待看到您如何使用 Wasm 來擴展 Istio!

分享此文章