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) イメージが使用されています。フィールド url
、imagePullPolicy
、および 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
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
spec.selector | WorkloadSelector |
このプラグイン設定を適用する必要がある Pod/VM の特定のセットを選択するために使用される基準。省略した場合に、この設定は同じ namespace 内のすべてのワークロードインスタンスに適用されます。 | いいえ |
spec.url | 文字列 |
Wasm モジュールまたは OCI コンテナーの URL。スキームが存在しない場合には、デフォルトで | いいえ |
spec.sha256 | 文字列 |
Wasm モジュールまたは OCI コンテナーの検証に使用される SHA256 チェックサム。 | いいえ |
spec.imagePullPolicy | PullPolicy |
OCI イメージをフェッチするときに適用されるプル動作。イメージが SHA ではなくタグで参照されている場合にのみ参照します。デフォルト値は | いいえ |
spec.imagePullSecret | 文字列 |
OCI イメージのプルに使用するクレデンシャル。イメージをプルするときにレジストリーに対して認証するためのプルシークレットなど、 | いいえ |
spec.phase | PluginPhase |
フィルターチェーンのどこにこの | いいえ |
spec.priority |
|
| いいえ |
spec.pluginName | 文字列 | Envoy 設定で使用されるプラグイン名。一部の Wasm モジュールでは、実行する Wasm プラグインを選択するためにこの値が必要になる場合があります。 | いいえ |
spec.pluginConfig | Struct | プラグインに渡される設定。 | いいえ |
spec.pluginConfig.verificationKey | 文字列 | 署名された OCI イメージまたは Wasm モジュールの署名を検証するために使用される公開鍵。PEM 形式で指定する必要があります。 | いいえ |
WorkloadSelector
オブジェクトは、フィルターをプロキシーに適用できるかどうかを判別するために使用される条件を指定します。一致の条件には、プロキシーに関連付けられたメタデータ、Pod/VM に添付されたラベルなどのワークロードインスタンス情報、またはプロキシーが最初のハンドシェイク中に Istio に提供するその他の情報が含まれます。複数の条件が指定されている場合には、ワークロードインスタンスを選択するには、すべての条件が一致する必要があります。現在、ラベルベースの選択メカニズムのみがサポートされています。
フィールド | タイプ | 説明 | 必須 |
---|---|---|---|
matchLabels | map<string, string> | ポリシーを適用する必要がある Pod/VM の特定のセットを示す 1 つ以上のラベル。ラベル検索の範囲は、リソースが存在する設定 namespace に限定されます。 | はい |
PullPolicy
オブジェクトは、OCI イメージをフェッチするときに適用されるプル動作を指定します。
値 | 説明 |
---|---|
<empty> |
デフォルト値は |
IfNotPresent | イメージの既存のバージョンが以前にプルされている場合は、それが使用されます。イメージのバージョンがローカルに存在しない場合は、最新バージョンをプルします。 |
Always | このプラグインを適用するときは、常に最新バージョンのイメージをプルします。 |
Struct
は、動的に型付けされた値にマップされるフィールドで設定される構造化データ値を表します。一部の言語では、Struct はネイティブ表現でサポートされている場合があります。たとえば、JavaScript のようなスクリプト言語では、構造体はオブジェクトとして表されます。
フィールド | タイプ | 説明 |
---|---|---|
fields | map<string, Value> | 動的に型付けされた値のマップ。 |
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
フィルターを作成します。
手順
以下のリソース例を作成します。
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
次のコマンドを使用して
plugin.yaml
ファイルを適用します。$ oc apply -f plugin.yaml