11.8. 3scale WebAssembly モジュール設定


WasmPlugin カスタムリソース仕様は、Proxy-WASM モジュールが読み取る設定を提供します。

仕様はホストに組み込まれ、Proxy-WASM モジュールによって読み取られます。通常は、モジュールが解析するように設定は JSON ファイル形式です。ただし、WasmPlugin リソースは仕様値を YAML として解釈し、モジュールで使用できるように JSON に変換できます。

スタンドアロンモードで Proxy-WASM モジュールを使用する場合は、JSON 形式を使用して設定を作成する必要があります。JSON 形式を使用する場合は、host 設定ファイル内の必要な場所で、エスケープと引用を使用できます (例:Envoy)。WasmPlugin リソースで WebAssembly モジュールを使用する場合、設定は YAML 形式になります。この場合は、無効な設定により、JSON 表現に基づいて診断がモジュールによって強制的にサイドカーコンテナーのロギングストリームに表示されます。

重要

EnvoyFilter カスタムリソースは一部の 3scale Istio アダプターまたは Service Mesh リリースで使用できますが、このカスタムリソースはサポートされる API ではありません。EnvoyFilter カスタムリソースの使用は推奨されていません。EnvoyFilter カスタムリソースの代わりに WasmPlugin API を使用します。EnvoyFilter カスタムリソースを使用する必要がある場合は、仕様を JSON 形式で指定する必要があります。

11.8.1. 3scale WebAssembly モジュールの設定

3scale の WebAssembly モジュール設定のアーキテクチャーは、3scale アカウントおよび承認サービスや処理するサービスのリストによって異なります。

前提条件

前提条件は、すべてのケースで最小の必須フィールドのセットです。

  • 3scale アカウントおよび承認サービス:backend-listener URL。
  • 処理するサービスリスト: サービス ID と少なくとも 1 つの認証情報の検索方法、およびその検索場所。
  • userkeyappidappkey、および OpenID Connect (OIDC) パターンを処理する例があります。
  • WebAssembly モジュールは、静的設定で指定した設定を使用します。たとえば、モジュールにマッピングルール設定を追加する場合は、3scale 管理ポータルにこのようなマッピングルールが設定されていない場合でも、常に適用されます。残りの WasmPlugin リソースは spec.pluginConfig YAML エントリーに存在します。

11.8.2. 3scale WebAssembly モジュール api オブジェクト

3scale WebAssembly モジュールからの api 最上位文字列は、モジュールが使用する設定のバージョンを定義します。

注記

存在しないバージョンまたはサポート対象外のバージョンの api オブジェクトの場合、レンダリングされた 3scale WebAssembly モジュールは操作不能になります。

api 最上位文字列の例

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
  namespace: <info>
spec:
  pluginConfig:
    api: v1
...

api エントリーは、設定の残りの値を定義します。許可される値は v1 のみです。現在の設定との互換性が失われるか、v1 を使用するモジュールが処理できない追加のロジックが必要な新しい設定には、別の値が必要になります。

11.8.3. 3scale WebAssembly モジュール system オブジェクト

system 最上位オブジェクトは、特定のアカウントの 3scale Account Management API にアクセスする方法を指定します。upstream フィールドは、オブジェクトの最も重要な部分です。system オブジェクトはオプションですが、3scale WebAssembly モジュールに完全に静的な設定を提供する場合を除き、推奨されます。後者は、3scale の システム コンポーネントへの接続を提供したくない場合のオプションです。

system オブジェクトに加えて静的設定オブジェクトを指定する場合は、静的な設定オブジェクトが優先されます。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    system:
      name: <saas_porta>
      upstream: <object>
      token: <my_account_token>
      ttl: 300
  ...
表11.1 system オブジェクトフィールド
名前説明必須

name

3scale サービスの識別子 (現在、参照されていません)。

任意

upstream

問い合わせるネットワークホストの詳細。upstream は、system として知られる 3scale Account Management API ホストを参照します。

はい

token

読み取り権限を持つ 3scale の個人アクセストークン。

はい

ttl

新規の変更を取得する前に、このホストから取得した設定を有効なものと見なす最小時間 (秒数)。デフォルトは 600 秒 (10 分) です。注記: 最大の期間はありませんが、モジュールは通常、この TTL が経過した後に妥当な時間内に設定を取得します。

任意

11.8.4. 3scale WebAssembly モジュール upstream オブジェクト

upstream オブジェクトは、プロキシーが呼び出しを実行できる外部ホストを説明しています。

apiVersion: maistra.io/v1
upstream:
  name: outbound|443||multitenant.3scale.net
  url: "https://myaccount-admin.3scale.net/"
  timeout: 5000
...
表11.2 upstream オブジェクトフィールド
名前説明必須

name

name は自由形式の識別子ではありません。これは、プロキシー設定で定義される外部ホストの識別子です。スタンドアロン Envoy 設定の場合は、これは他のプロキシーの upstream とも呼ばれる クラスター 名にマッピングします。注記:Service Mesh および 3scale Istio アダプターコントロールプレーンは、複数のフィールドの区切り文字として垂直バー (|) を使用する形式に従って名前を設定します。この統合の目的上、常に outbound|<port>||<hostname> の形式を使用します。

はい

url

記述されたサービスにアクセスするための完全な URL。スキームによって暗示されていない限り、TCP ポートが含まれている必要があります。

はい

Timeout

応答にかかる時間がこの設定を超えたこのサービスへの接続がエラーとみなされるためのタイムアウト (ミリ秒単位)。デフォルトは 1000 秒です。

任意

11.8.5. 3scale WebAssembly モジュール backend オブジェクト

backend 最上位オブジェクトは、HTTP リクエストの承認および報告のために 3scale Service Management API にアクセスする方法を指定します。このサービスは、3scale の バックエンド コンポーネントによって提供されます。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    backend:
      name: backend
      upstream: <object>
    ...
表11.3 backend オブジェクトフィールド
名前説明必須

name

3scale バックエンドの識別子 (現在、参照されていません)。

任意

upstream

問い合わせるネットワークホストの詳細。これは、system として知られる 3scale Account Management API ホストを参照する必要があります。

有効。最も重要な必須フィールドです。

11.8.6. 3scale WebAssembly モジュール services オブジェクト

services の最上位オブジェクトは、module のこの特定のインスタンスで処理されるサービス識別子を指定します。

アカウントには複数のサービスがあるため、どのサービスが処理されているかを指定する必要があります。残りの設定は、サービスの設定方法に関するものです。

services フィールドは必須です。有用とするサービスを少なくとも 1 つ含める必要がある配列です。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - id: "2555417834789"
      token: service_token
      authorities:
        - "*.app"
        - 0.0.0.0
        - "0.0.0.0:8443"
      credentials: <object>
      mapping_rules: <object>
    ...

services 配列の各要素は、3scale サービスを表します。

表11.4 services オブジェクトフィールド
名前説明必須

id

この 3scale サービスの識別子 (現在、参照されていません)。

はい

token

この token は、System 内のサービスのプロキシー設定にあるか、以下の curl コマンドを使用して System から取得できます。

curl "\https://<system_host>/admin/api/services/<service_id>/proxy/configs/production/latest.json?access_token=<access_token>" | jq '.proxy_config.content.backend_authentication_value'

任意

authorities

文字列の配列。それぞれが一致する URL認証局 を表します。これらの文字列は、アスタリスク (*)、正符号 (+)、および疑問符 (?) マッチャーに対応する glob パターンを受け入れます。

はい

credentials

検索する認証情報の種類と場所を定義するオブジェクト。

はい

mapping_rules

ヒットするマッピングルールおよび 3scale メソッドを表すオブジェクトの配列。

任意

11.8.7. 3scale WebAssembly モジュール credentials オブジェクト

credentials オブジェクトは service オブジェクトのコンポーネントです。credentials は、検索する認証情報の種類と、このアクションを実行する手順を指定します。

すべてのフィールドはオプションですが、少なくとも 1 つの user_key または app_id を指定する必要があります。各認証情報を指定する順番は、モジュールによって事前確立されているために無関係です。各認証情報の 1 つのインスタンスのみを指定します。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - credentials:
        user_key: <array_of_lookup_queries>
        app_id: <array_of_lookup_queries>
        app_key: <array_of_lookup_queries>
    ...
表11.5 credentials オブジェクトフィールド
名前説明必須

user_key

これは、3scale ユーザーキーを定義する検索クエリーの配列です。ユーザーキーは、一般に API キーと呼ばれます。

任意

app_id

これは、3scale のアプリケーション識別子を定義する検索クエリーの配列です。アプリケーションの識別子は、3scale または Red Hat Single Sign-On (RH-SS0) や OpenID Connect (OIDC) などのアイデンティティープロバイダーを使用して提供されます。成功して 2 つの値に解決するたびに、ここで指定された検索クエリーの解決で、app_idapp_key が設定されます。

任意

app_key

これは、3scale のアプリケーションキーを定義する検索クエリーの配列です。解決される app_id のないアプリケーションキーは無意味なため、app_id が指定されている場合のみこのフィールドを指定します。

任意

11.8.8. 3scale WebAssembly モジュール検索クエリー

lookup query オブジェクトは、credentials オブジェクトのフィールドの一部になります。特定の認証情報フィールドが検出され、処理される方法を指定します。評価されると、解決に成功すると、1 つ以上の値が見つかったことを意味します。解決に失敗したことは、値が見つからなかったことを意味します。

lookup queries の配列は、ショートサーキットまたは関係を定義しています。いずれかのクエリーの正常な解決により、残りのクエリーの評価が停止され、値を指定の credential-type に割り当てます。アレイの各クエリーは、互いに独立しています。

lookup query は、1 つのフィールド (ソースオブジェクト) で設定されています。これは、複数のソースタイプの 1 つになります。以下の例を参照してください。

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    services:
    - credentials:
        user_key:
          - <source_type>: <object>
          - <source_type>: <object>
          ...
        app_id:
          - <source_type>: <object>
          ...
        app_key:
          - <source_type>: <object>
          ...
    ...

source オブジェクトは、任意の credentials オブジェクトフィールド内のソースの配列の一部として存在します。source-type として参照されるオブジェクトフィールド名は、以下のいずれかになります。

  • header: 検索クエリーは、HTTP リクエストヘッダーを入力として受け取ります。
  • query_string: lookup query は、URL クエリー文字列パラメーターを入力として受け取ります。
  • filter: lookup query は、フィルターメタデータをインプットとして受け取ります。

すべての source-type オブジェクトには、少なくとも以下の 2 つのフィールドがあります。

表11.6 source-type オブジェクトフィールド
名前説明必須

keys

文字列の配列。それぞれが key で、入力データで検索されたエントリーを参照します。

はい

ops

key エントリーの照合を行う operations の配列。配列は、操作が入力を受け取り、次の操作の出力を生成するパイプラインです。出力に失敗した operation は、lookup query を失敗として解決します。操作のパイプラインの順序により、評価の順序が決定されます。

任意

path

データの検索に使用されるメタデータ内のパスを表示します。ただし、header または query_string ソースタイプを使用する場合は必要ありませんが、filter ソースタイプを使用する場合は必須です。

任意

キーが 入力データと一致する場合は、残りの鍵は評価されず、ソース解決アルゴリズムは、指定した operations (ops) の実行にジャンプします。ops を指定しないと、一致する key の結果値 (ある場合) が返されます。

Operations は、最初のフェーズが key を検索した後に、入力に対する特定の条件および変換を指定する方法を提供します。プロパティーを変換、デコード、および要求する必要があるときに、operations を使用しますが、すべてのニーズに対応する成熟した言語は提供されず、Turing-completeness はありません。

スタックは operations の出力を保存します。評価されると、認証情報が消費する値の数に応じて、スタックの下部に値を割り当てて、lookup query は終了します。

11.8.9. 3scale WebAssembly モジュール operations オブジェクト

特定の source type に属する ops 配列の各要素は、値に変換を適用するか、テストを実行する operation オブジェクトです。このようなオブジェクトに使用するフィールド名は operation 自体の名前で、値は operation に対するパラメーターです。これは、フィールドと値のマップ、リスト、または文字列など、構造化オブジェクトになります。

ほとんどの operations は、1 つ以上の入力を処理し、1 つ以上の出力を生成します。入力を使用したり、出力を生成したりする場合、それらは値のスタックで作業します。操作によって消費される各値は、値のスタックからポップアップされ、source マッチと共に初期入力されます。出力される値はスタックにプッシュされます。他の operations は、特定のプロパティーを要求する以外、出力を使用または生成しませんが、値のスタックを検査します。

注記

解決が完了すると、次の手順 (値を app_idapp_key、または user_key に割り当てるなど) でピックアップされる値はスタックの下部の値から取得されます。

operations カテゴリーはいくつかあります。

  • decode: 別の形式を取得するために、入力値をデコードして変換します。
  • string: 文字列値を入力として取り、変換を実行し、確認します。
  • stack: 入力の値のセットを取得し、複数のスタック変換とスタック内の特定の位置の選択を実行します。
  • check: 影響を及ぼさない方法で、操作セットに関するプロパティーを要求します。
  • control: 評価フローを変更できる操作を実施します。
  • format: 入力値の形式固有の構造を解析し、その値を検索します。

すべての操作は、name 識別子で文字列として指定されます。

関連情報

11.8.10. 3scale WebAssembly モジュール mapping_rules オブジェクト

mapping_rules オブジェクトは service オブジェクトの一部です。これは、REST パスパターンのセットならびに関連する 3scale メトリックおよびパターンが一致する時に使用するカウント増分を指定します。

system 最上位オブジェクトに動的設定が提供されていない場合は、値が必要です。system 最上位エントリーに加えてオブジェクトが提供されると、mapping_rules オブジェクトが最初に評価されます。

mapping_rules は配列オブジェクトです。そのアレイの各要素は mapping_rule オブジェクトです。受信したリクエストの評価されたマッチするマッピングルールにより、承認およびAPIManager へのレポート用の 3scale methods のセットが提供されます。複数のマッチングルールが同じ methods を参照する場合は、3scale への呼び出し時に deltas の合算があります。たとえば、2 つのルールが、1 と 3 の deltasHits メソッドを 2 回増やすと、3scale にレポートする Hits の単一のメソッドエントリーの delta は 4 になります。

11.8.11. 3scale WebAssembly モジュール mapping_rule オブジェクト

mapping_rule オブジェクトは mapping_rules オブジェクトの配列の一部です。

mapping_rule オブジェクトフィールドは、以下の情報を指定します。

  • 照合する HTTP 要求メソッド
  • パスに一致するパターン。
  • 報告する量と共にレポートする 3scale メソッド。フィールドを指定する順番により、評価順序が決定されます。
表11.7 mapping_rule オブジェクトフィールド
名前説明必須

メソッド

HTTP リクエストメソッド (動詞) を表す文字列を指定します。許可される値は、許可される HTTP メソッド名の 1 つと一致し、大文字と小文字を区別しません。すべてのマッチのすべてのメソッドの特殊な値。

はい

pattern

HTTP リクエストの URI パスコンポーネントに一致するパターン。このパターンは、3scale で説明されている構文に従います。ワイルドカード、アスタリスク (*) 文字の使用、中括弧間の任意の文字シーケンスの使用 ({this} など) が許可されます。

はい

usages

usage オブジェクトのリスト。ルールがマッチすると、deltas を持つすべてのメソッドが、承認およびレポートのために 3scale に送信されるメソッドのリストに追加されます。

以下の必須フィールドに usages オブジェクトを埋め込みます。

  • name: レポートする method のシステム名。注記:name は大文字と小文字を区別します。
  • delta: その method の増分。

はい

last

このルールが正常にマッチした場合に、それ以外のマッピングルールの評価を停止する必要があるかどうか。

任意のブール値。デフォルトは false です。

以下の例は、3scale のメソッド間の既存の階層とは独立しています。つまり、3scale 側で実行されたすべての内容はこれには影響しません。たとえば、Hits メトリックは、それらすべての親となる可能性があるため、承認されたリクエストで報告されたすべてのメソッドの合計により 4 ヒットを保管し、3scale Authrep API エンドポイントを呼び出します。

以下の例では、すべてのルールに一致する、パス /products/1/sold への GET リクエストを使用します。

mapping_rules GET リクエストの例

apiVersion: extensions.istio.io/v1alpha1
kind: WasmPlugin
metadata:
  name: <threescale_wasm_plugin_name>
spec:
  pluginConfig:
    ...
    mapping_rules:
      - method: GET
        pattern: /
        usages:
          - name: hits
            delta: 1
      - method: GET
        pattern: /products/
        usages:
          - name: products
            delta: 1
      - method: ANY
        pattern: /products/{id}/sold
        usages:
          - name: sales
            delta: 1
          - name: products
            delta: 1
    ...

すべての usages は、モジュールが使用状況データを使用して 3scale に実施するリクエストに追加されます。

  • Hits: 1
  • products: 2
  • sales: 1
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.