WebAssemblyモジュールの配布
Istioは、WebAssembly(Wasm)を使用してプロキシ機能を拡張する機能を提供します。Wasmの拡張性の主な利点の1つは、拡張機能を実行時に動的にロードできることです。これらの拡張機能は、まずEnvoyプロキシに配布される必要があります。Istioは、プロキシエージェントがWasmモジュールを動的にダウンロードできるようにすることで、これを可能にしています。
テストアプリケーションのセットアップ
このタスクを開始する前に、Bookinfoサンプルアプリケーションをデプロイしてください。
Wasmモジュールの構成
この例では、HTTP Basic認証拡張機能をメッシュに追加します。Istioを設定して、リモートイメージレジストリからBasic認証モジュールをプルしてロードします。これは、/productpage
への呼び出しで実行するように構成されます。
リモートWasmモジュールでWebAssemblyフィルターを構成するには、WasmPlugin
リソースを作成します。
$ kubectl apply -f - <<EOF
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: basic-auth
namespace: istio-system
spec:
selector:
matchLabels:
istio: ingressgateway
url: oci://ghcr.io/istio-ecosystem/wasm-extensions/basic_auth:1.12.0
phase: AUTHN
pluginConfig:
basic_auth_rules:
- prefix: "/productpage"
request_methods:
- "GET"
- "POST"
credentials:
- "ok:test"
- "YWRtaW4zOmFkbWluMw=="
EOF
HTTPフィルターは、認証フィルターとしてイングレスゲートウェイプロキシに挿入されます。Istioエージェントは、WasmPlugin
構成を解釈し、OCIイメージレジストリからローカルファイルにリモートWasmモジュールをダウンロードし、そのファイルを参照してHTTPフィルターをEnvoyに挿入します。
構成されたWasmモジュールの確認
認証情報なしで
/productpage
をテストします。$ curl -s -o /dev/null -w "%{http_code}" "http://$INGRESS_HOST:$INGRESS_PORT/productpage" 401
認証情報を使用して
/productpage
をテストします。$ curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Basic YWRtaW4zOmFkbWluMw==" "http://$INGRESS_HOST:$INGRESS_PORT/productpage" 200
WasmPlugin
APIの使用例の詳細については、APIリファレンスをご覧ください。
Wasmモジュールのクリーンアップ
$ kubectl delete wasmplugins.extensions.istio.io -n istio-system basic-auth
Wasmモジュール配布の監視
リモートWasmモジュールの配布ステータスを追跡する統計がいくつかあります。
次の統計はIstioエージェントによって収集されます。
istio_agent_wasm_cache_lookup_count
:Wasmリモートフェッチキャッシュルックアップの数。istio_agent_wasm_cache_entries
:成功、リモートロードなし、マーシャル失敗、リモートフェッチ失敗、およびリモートフェッチヒントのミスを含む、Wasm構成変換と結果の数。istio_agent_wasm_config_conversion_duration_bucket
:Wasmモジュールの構成変換にistio-agentが費やす合計時間(ミリ秒単位)。istio_agent_wasm_remote_fetch_count
:Wasmリモートフェッチとその結果の数。成功、ダウンロード失敗、チェックサムの不一致が含まれます。
ダウンロードの失敗などの理由でWasmフィルター構成が拒否された場合、istiodはtype.googleapis.com/envoy.config.core.v3.TypedExtensionConfig
というタイプラベルでpilot_total_xds_rejects
も出力します。
Wasm拡張機能の開発
Wasmモジュールの開発の詳細については、Istioコミュニティによって維持され、IstioのテレメトリWasm拡張機能の開発に使用されるistio-ecosystem/wasm-extensions
リポジトリで提供されているガイドを参照してください。
- C++を使用してWasm拡張機能を記述、テスト、デプロイ、および保守する。
- Istio Wasmプラグイン互換のOCIイメージをビルドする。
- C++ Wasm拡張機能の単体テストを記述する。
- Wasm拡張機能の統合テストを記述する。
制限事項
このモジュール配布メカニズムには既知の制限があり、今後のリリースで対応されます。
- HTTPフィルターのみがサポートされています。