IstioとEnvoy WebAssembly拡張機能、1年間の軌跡

EnvoyとIstioのWebAssemblyベースの拡張機能への取り組みの最新情報。

2021年3月5日 | 執筆者:Pengyuan Bian - Google

1年前の今日、1.5リリースで、WebAssemblyベースの拡張機能をIstioに導入しました。この1年間、Istio、Envoy、Proxy-Wasmコミュニティは、WebAssembly(Wasm)拡張機能を安定性、信頼性、導入の容易さを向上させるための共同作業を続けてきました。Istio 1.9リリースまでのWasmサポートの更新と、今後の計画について説明します。

WebAssemblyサポートがアップストリームEnvoyにマージ

WasmとWebAssembly for Proxies(Proxy-Wasm)ABIの試験的サポートをIstioのEnvoyフォークに追加した後、アーリーアダプターのコミュニティから素晴らしいフィードバックを収集しました。このフィードバックと、Istio Wasmコア拡張機能の開発から得られた経験により、ランタイムの成熟と安定化が進みました。これらの改善により、2020年10月にWasmサポートがEnvoyアップストリームに直接マージされ、すべての公式Envoyリリースの一部となりました。これは重要なマイルストーンであり、以下のことを示しています。

wasm-extensionsエコシステムリポジトリ

Envoy Wasmランタイムのアーリーアダプターとして、Istio Extensions and Telemetryワーキンググループは拡張機能の開発において多くの経験を積みました。メタデータ交換Prometheus統計属性生成など、いくつかの主要な拡張機能を構築しました。学習内容をより広く共有するために、istio-ecosystem組織にwasm-extensionsリポジトリを作成しました。このリポジトリには2つの目的があります。

このガイドでは、現在、C++を使用したWebAssembly拡張機能の開発単体テスト、IstioプロキシバイナリでWasmモジュールを実行することで実際のランタイムをシミュレートするGoテストフレームワークを使用した統合テストについて説明しています。今後、Open Policy Agentとの統合や、JWTトークンに基づくヘッダー操作など、さらにいくつかの標準的な拡張機能を追加する予定です。

Istio Agentを介したWasmモジュールの配布

Istio 1.9より前は、リモートWasmモジュールをプロキシに配布するためにEnvoyリモートデータソースが必要でした。この例では、2つのEnvoyFilterリソースが定義されています。1つはリモートフェッチEnvoyクラスタを追加するため、もう1つはHTTPフィルターチェーンにWasmフィルターを挿入するためのものです。この方法には欠点があります。設定ミスや一時的なエラーが原因でリモートフェッチが失敗した場合、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をどのように拡張するか、楽しみにしています!

この記事を共有する