2.21.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 | string |
Wasm モジュールまたは OCI コンテナーの URL。スキームが存在しない場合は、デフォルトで | いいえ |
| spec.sha256 | string |
Wasm モジュールまたは OCI コンテナーの検証に使用される SHA256 チェックサム。 | いいえ |
| spec.imagePullPolicy | PullPolicy |
OCI イメージをフェッチするときに適用されるプル動作。イメージが SHA ではなくタグで参照されている場合にのみ参照します。デフォルト値は | いいえ |
| spec.imagePullSecret | string |
OCI イメージのプルに使用するクレデンシャル。イメージをプルするときにレジストリーに対して認証するためのプルシークレットなど、 | いいえ |
| spec.phase | PluginPhase |
この | いいえ |
| spec.priority |
|
| いいえ |
| spec.pluginName | string | Envoy 設定で使用されるプラグイン名。一部の Wasm モジュールでは、実行する Wasm プラグインを選択するためにこの値が必要になる場合があります。 | いいえ |
| spec.pluginConfig | Struct | プラグインに渡される設定。 | いいえ |
| spec.pluginConfig.verificationKey | string | 署名された 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 認証フィルターの後にプラグインを挿入します。 |
2.21.3.1. WasmPlugin リソースのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
WasmPlugin リソースを使用して、Red Hat OpenShift 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