1.19.3. WasmPlugin API リファレンス


WasmPlugins API には、WebAssembly フィルターを介して Istio プロキシーによって提供される機能を拡張するメカニズムがあります。

複数の WasmPlugin をデプロイできます。phase および priority の設定により、実行の順序が (Envoy のフィルターチェーンの一部として) 決定され、ユーザー提供の WasmPlugins と Istio の内部フィルター間の複雑な対話設定が可能になります。

次の例では、認証フィルターが OpenID フローを実装し、Authorization ヘッダーに JSON Web Token (JWT) を入力します。Istio 認証はこのトークンを消費し、ingress ゲートウェイにデプロイします。WasmPlugin ファイルはプロキシーサイドカーファイルシステムに存在します。フィールドの URL に注意してください。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: openid-connect
  namespace: istio-ingress
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  url: file:///opt/filters/openid.wasm
  sha256: 1ef0c9a92b0420cf25f7fe5d481b231464bc88f486ca3b9c83ed5cc21d2f6210
  phase: AUTHN
  pluginConfig:
    openid_server: authn
    openid_realm: ingress

以下は同じ例ですが、今回はファイルシステム内のファイルの代わりに Open Container Initiative (OCI) イメージが使用されています。フィールド urlimagePullPolicy、および imagePullSecret に注意してください。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: openid-connect
  namespace: istio-system
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  url: oci://private-registry:5000/openid-connect/openid:latest
  imagePullPolicy: IfNotPresent
  imagePullSecret: private-registry-pull-secret
  phase: AUTHN
  pluginConfig:
    openid_server: authn
    openid_realm: ingress
表1.15 WasmPlugin フィールドリファレンス
フィールドタイプ説明必須

spec.selector

WorkloadSelector

このプラグイン設定を適用する必要がある Pod/VM の特定のセットを選択するために使用される基準。省略した場合に、この設定は同じ namespace 内のすべてのワークロードインスタンスに適用されます。WasmPlugin フィールドが configroot namespace に存在する場合には、任意の namespace の該当するすべてのワークロードに適用されます。

いいえ

spec.url

文字列

Wasm モジュールまたは OCI コンテナーの URL。スキームが存在しない場合には、デフォルトで oci:// になり、OCI イメージを参照します。その他の有効なスキームとして、プロキシーコンテナー内にローカルに存在する.wasm モジュールファイルを参照するための file:// と、リモートでホストされる.wasm モジュールファイルを参照するため の http s:// があります。

いいえ

spec.sha256

文字列

Wasm モジュールまたは OCI コンテナーの検証に使用される SHA256 チェックサム。url フィールドがすでに SHA256 を参照している場合 (@sha256: 表記を使用) には、このフィールドの値と一致する必要があります。OCI イメージがタグによって参照され、このフィールドが設定されている場合には、プル後にそのチェックサムがこのフィールドの内容に対して検証されます。

いいえ

spec.imagePullPolicy

PullPolicy

OCI イメージをフェッチするときに適用されるプル動作。イメージが SHA ではなくタグで参照されている場合にのみ参照します。デフォルト値は IfNotPresent です。ただし、URL フィールドで OCI イメージが参照され、latest タグが使用されている場合は、Always の値がデフォルトで、K8s の動作を反映しています。url フィールドが file:// または http s:// を使用して Wasm モジュールを直接参照している場合には、設定が無視されます。

いいえ

spec.imagePullSecret

文字列

OCI イメージのプルに使用するクレデンシャル。イメージをプルするときにレジストリーに対して認証するためのプルシークレットなど、WasmPlugin オブジェクトと同じ namespace 内のシークレットの名前。

いいえ

spec.phase

PluginPhase

フィルターチェーンのどこにこの WasmPlugin オブジェクトを挿入するかを決定します。

いいえ

spec.priority

int64

phase の値が同じ WasmPlugins オブジェクトの順序を決定します。複数の WasmPlugins オブジェクトが同じフェーズで同じワークロードに適用される場合には、それらは優先度と降順をもとに適用されます。優先度 フィールドが設定されていない場合や値が同じ WasmPlugins オブジェクトが 2 つある場合には、順序は WasmPlugins オブジェクトの名前と namespace をもとに決定されます。デフォルト値は 0 です。

いいえ

spec.pluginName

文字列

Envoy 設定で使用されるプラグイン名。一部の Wasm モジュールでは、実行する Wasm プラグインを選択するためにこの値が必要になる場合があります。

いいえ

spec.pluginConfig

Struct

プラグインに渡される設定。

いいえ

spec.pluginConfig.verificationKey

文字列

署名された OCI イメージまたは Wasm モジュールの署名を検証するために使用される公開鍵。PEM 形式で指定する必要があります。

いいえ

WorkloadSelector オブジェクトは、フィルターをプロキシーに適用できるかどうかを判別するために使用される条件を指定します。一致の条件には、プロキシーに関連付けられたメタデータ、Pod/VM に添付されたラベルなどのワークロードインスタンス情報、またはプロキシーが最初のハンドシェイク中に Istio に提供するその他の情報が含まれます。複数の条件が指定されている場合には、ワークロードインスタンスを選択するには、すべての条件が一致する必要があります。現在、ラベルベースの選択メカニズムのみがサポートされています。

表1.16 WorkloadSelector
フィールドタイプ説明必須

matchLabels

map<string, string>

ポリシーを適用する必要がある Pod/VM の特定のセットを示す 1 つ以上のラベル。ラベル検索の範囲は、リソースが存在する設定 namespace に限定されます。

はい

PullPolicy オブジェクトは、OCI イメージをフェッチするときに適用されるプル動作を指定します。

表1.17 PullPolicy
説明

<empty>

デフォルト値は IfNotPresent です。ただし、OCI イメージのタグが latest の場合は、デフォルト値は Always です。

IfNotPresent

イメージの既存のバージョンが以前にプルされている場合は、それが使用されます。イメージのバージョンがローカルに存在しない場合は、最新バージョンをプルします。

Always

このプラグインを適用するときは、常に最新バージョンのイメージをプルします。

Struct は、動的に型付けされた値にマップされるフィールドで設定される構造化データ値を表します。一部の言語では、Struct はネイティブ表現でサポートされている場合があります。たとえば、JavaScript のようなスクリプト言語では、構造体はオブジェクトとして表されます。

表1.18 Struct
フィールドタイプ説明

fields

map<string, Value>

動的に型付けされた値のマップ。

PluginPhase は、プラグインが注入されるフィルターチェーンのフェーズを指定します。

表1.19 PluginPhase
フィールド説明

<empty>

コントロールプレーンは、プラグインを挿入する場所を決定します。これは通常、フィルターチェーンの最後かつ、ルーターの直前にあります。プラグインが他のプラグインから独立している場合は、PluginPhase を指定しないでください。

AUTHN

Istio 認証フィルターの前にプラグインを挿入します。

AUTHZ

Istio 認証フィルターの前と Istio 認証フィルターの後にプラグインを挿入します。

STATS

Istio 統計フィルターの前と Istio 認証フィルターの後にプラグインを挿入します。

1.19.3.1. WasmPlugin リソースのデプロイ

WasmPlugin リソースを使用して、Red Hat Service Mesh エクステンションを有効にできます。この例では、istio-system が Service Mesh コントロールプレーンプロジェクトの名前です。次の例では、OpenID Connect フローを実行してユーザーを認証する openid-connect フィルターを作成します。

手順

  1. 以下のリソース例を作成します。

    plugin.yaml の例

    apiVersion: extensions.istio.io/v1alpha1
    kind: WasmPlugin
    metadata:
      name: openid-connect
      namespace: istio-system
    spec:
      selector:
        matchLabels:
          istio: ingressgateway
      url: oci://private-registry:5000/openid-connect/openid:latest
      imagePullPolicy: IfNotPresent
      imagePullSecret: private-registry-pull-secret
      phase: AUTHN
      pluginConfig:
        openid_server: authn
        openid_realm: ingress

  2. 次のコマンドを使用して plugin.yaml ファイルを適用します。

    $ oc apply -f plugin.yaml
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.