10.6. WasmPlugin カスタムリソースの作成
Service Mesh は、WasmPlugin として知られる Proxy-WASM エクステンションを指定してサイドカープロキシーに適用するためのカスタムリソース定義 (CRD) を提供します。Service Mesh は、3scale による HTTP API 管理を必要とする一連のワークロードにカスタムリソース (CR) を適用します。
手順
- このモジュールを適用する Service Mesh デプロイメント上の OpenShift Container Platform (OCP) namespace (info プロジェクトなど) を特定します。
registry.redhat.io 認証情報を使用してプルシークレットを取得します。
-
WasmPluginと同じ namespace に新しいプルシークレットリソースを作成します。
-
モジュールが適用されるアプリケーションのセットを識別するセレクターとともに、
threescale-wasm-authモジュールがデプロイされる namespace を宣言する必要があります。次の例は、threescale-wasm-authモジュールの CR の YAML 形式です。apiVersion: extensions.istio.io/v1alpha1 kind: WasmPlugin metadata: name: <threescale_wasm_plugin_name> namespace: <namespace> spec: url: oci://registry.redhat.io/3scale-amp2/3scale-auth-wasm-rhel8:0.0.3 imagePullSecret: <pull_secret_resource> phase: AUTHZ priority: 100 match: - mode: CLIENT selector: matchLabels: app: <selector> pluginConfig: api: v1 system: name: system upstream: name: outbound|443||<system_host> url: <system_url> timeout: 5000 token: <access_token> backend: name: backend upstream: name: outbound|<backend_port>||<backend_host> url: <backend_url> timeout: 5000 extensions: - no_body services: - id: '<product_id>' authorities: - "*" credentials: user_key: - query_string: keys: - user_key - header: keys: - user_key-
spec.pluginConfigフィールドはアプリケーションによって異なります。その他のフィールドはすべて、このカスタムリソースの複数のインスタンス間で永続します。 -
この特定の
WasmPluginspec.pluginConfigは、クエリー文字列で提供されるuser_key認証を使用して設定されています。 説明:
name
3scale 内における
WasmPluginの一意の名前または識別子を指定します。namespace
ワークロードの namespace。
imagePullSecret
手順 2 で作成したプルシークレットの名前。
selector
ワークロードラベルセレクター。info プロジェクトの製品ページをご利用ください。
backend-port
使用している 3scale により異なります。3scale URL を Service Mesh に追加する を参照してください。たとえば、内部 3scale はポート 80 を使用し、外部 3scale はポート 443 を使用します。
backend-host と system-host
Adding 3scale URLs to Service Mesh で使用したホストと同じホストを使用します。
system-url と backend-url
それぞれのホストを使用してプロトコルを追加します。たとえば、
https://<system-host>などです。access-token
システムテナントへのアクセストークン。
product_id
使用するプロダクトの ID。複数の製品が必要な場合は、サービスセクションで複数の製品を定義します。
spec.pluginConfigおよび残りのカスタムリソースにモジュール設定を追加したら、oc applyコマンドでこれを適用します。$ oc apply -f threescale-wasm-auth-info.yaml
-
10.6.1. 3scale API Management WasmPlugin 認証オプション リンクのコピーリンクがクリップボードにコピーされました!
これらは、3scale User key (App id/App key) 認証の設定例です。
ユーザーキー
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: <threescale_wasm_plugin_name>
spec:
...
pluginConfig:
...
services:
- id: '<service_id>'
authorities:
- "*"
credentials:
user_key:
- query_string:
keys:
- user_key
- header:
keys:
- user_key
App ID と App key
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: <threescale_wasm_plugin_name>
spec:
...
pluginConfig:
...
services:
- id: '<service_id>'
authorities:
- "*"
credentials:
app_id:
- query_string:
keys:
- app_id
- header:
keys:
- app_id
app_key:
- query_string:
keys:
- app_key
- header:
keys:
- app_key
OIDC
WasmPlugin 自体とは別に、OpenID Connect (OIDC) が機能するには、RequestAuthentication と呼ばれる追加のカスタムリソースも必要です。RequestAuthentication を適用すると、JWT トークンを検証するネイティブプラグインを使用して Envoy が設定されます。プロキシーは、モジュールを実行する前にすべてを検証します。したがって、失敗したリクエストが 3scale WebAssembly モジュールに実行されません。
apiVersion: security.istio.io/v1beta1
kind: RequestAuthentication
metadata:
name: jwt-example
namespace: <info>
spec:
selector:
matchLabels:
app: <productpage>
jwtRules:
- issuer: >-
"<url>/auth/realms/<realm_name>"
jwksUri: >-
"<url>/auth/realms/<realm_name>/protocol/openid-connect/certs"
詳細
-
<url>: OIDC インスタンスの URL は、keycloak で設定されている場合、認証設定用の keycloak OIDC プロバイダーのメタデータエンドポイントを指定するために使用されます。 -
<realm_name>: OIDC で使用されるレルムの名前。
apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
name: <threescale_wasm_plugin_name>
spec:
...
pluginConfig:
...
services:
- id: '<service_id>'
authorities:
- "*"
credentials:
app_id:
- filter:
path:
- envoy.filters.http.jwt_authn
- "0"
keys:
- azp
- aud
ops:
- take:
head: 1