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モジュールの確認

  1. 認証情報なしで/productpageをテストします。

    $ curl -s -o /dev/null -w "%{http_code}" "http://$INGRESS_HOST:$INGRESS_PORT/productpage"
    401
    
  2. 認証情報を使用して/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リポジトリで提供されているガイドを参照してください。

制限事項

このモジュール配布メカニズムには既知の制限があり、今後のリリースで対応されます。

  • HTTPフィルターのみがサポートされています。
この情報は役に立ちましたか?
改善のための提案はありますか?

フィードバックありがとうございます!