ローカルモードでの Flex Gateway のカスタムポリシーのデプロイ

WebAssembly (WASM) 拡張機能を使用して、Envoy 上でカスタムフィルターとして機能するカスタムポリシーを実装できます。次の手順は、ローカルモードで実行されている API にカスタム検索条件 (ポリシー) をデプロイおよび適用する方法を示しています。

  1. 設定 YAML ファイルを作成します。

  2. ファイルを Flex Gateway 設定ディレクトリに保存します。

  3. 拡張機能定義を作成します。

  4. base64​ を使用して、カスタムポリシー WASM 実装をエンコードします。

  5. 拡張機能定義をカスタムポリシー WASM バイナリ実装にリンクします。

  6. カスタムポリシーを API インスタンスにリンクします。

  7. リソースを Flex Gateway インスタンスに適用します。

始める前に

始める前に、次の準備が整っていることを確認します。

カスタムポリシーのデプロイ

  1. custom-policy-example.yaml​ という設定ファイルを作成します。

  2. ファイルを Flex Gateway 設定ディレクトリに保存します。次に例を示します。

    • /etc/mulesoft/flex-gateway/conf.d/policies

  3. 拡張機能定義を作成します。

    次の YAML スニペットをコピーして、新しい設定ファイルに貼り付けます。YAML は、カスタムポリシーの設定とメタデータプロパティを定義します。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: Extension
    metadata:
      name: custom-local-example-definition
    spec:
      extends:
      - name: extension-authentication
      - name: extension-definition
      properties:
        secret-value:
          type: string
      required:
        - secret-value
    • metadata.name​ 値には、拡張機能名が含まれます。

    • Extension​ は、他の定義済み拡張機能からプロパティを継承します。たとえば、​spec.extends​ は、拡張機能が ​extension-definition​ であり、​authentication​ カテゴリ (​extension-authentication​) に属していることを指定します。

    • spec.properties​ 値は、カスタムポリシーインスタンスを設定するプロパティを定義します。

    • spec.required​ 値は、必要なプロパティを指定します。

  4. base64​ を使用して、カスタムポリシー WASM バイナリ実装をエンコードします。

    次のコマンドを実行して、カスタムポリシー WASM バイナリ実装をエンコードします。

    base64 <your-custom-policy-name>.wasm | tr -d '\n\r' > policy

    このコマンドは、エンコードデータを ​policy​ というファイルに送信します。次のステップで、​<WASM_BINARY_IN_BASE64>​ をこのエンコードデータに置き換えます。

    wasm32-unknown-unknown​ の対象を使用してポリシーをコンパイルした場合、​./target/wasm32-unknown-unknown/release​ にバイナリがあります。

    wasm32-wasi​ の対象を使用してポリシーをコンパイルした場合、​./target/wasm32-wasi/release​ にバイナリがあります。

  5. 拡張機能定義をカスタムポリシー WASM バイナリ実装にリンクします。

    custom-policy-example.yaml​ で、ポリシー実装を含む別のリソースを定義します。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: Extension
    metadata:
      name: custom-local-example-flex
    spec:
      extends:
        - name: custom-local-example-definition
        - name: envoy-filter
        - name: proxy-wasm-filter
      properties:
        rootId:
          type: string
          default: main
        implementation:
          type: string
          default: base64://<WASM_BINARY_IN_BASE64>
    • metadata.name​ 値にはポリシー名が含まれます。これは、定義で指定された名前とは異なる必要があります。

    • spec.extends​ 値は、継承元のリソース定義を指定します。たとえば、​custom-local-example-definition​ は以前に定義されたリソースです。

    • spec.properties.implementation.default​ の ​<WASM_BINARY_IN_BASE64>​ 値を、以前に生成した ​base64​ エンコード WASM バイナリデータに置き換えます。

      ポリシー定義と実装を同じ ​Extension​ リソースに含めることができますが、これにより、それらの間の結合がより緊密になります。したがって、その 2 つは別のリソースに分離することをお勧めします。

  6. カスタムポリシーを API インスタンスにリンクします。

    custom-policy-example.yaml​ で、ポリシーを API インスタンスにリンクする別のリソースを定義します。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: PolicyBinding
    metadata:
      name: custom-local-example
    spec:
      targetRef:
        kind: ApiInstance
        name: ingress-http
      policyRef:
        kind: Extension
        name: custom-local-example-flex
      config:
        secret-value: "an-example-value"
    • metadata.name​ 値には、カスタムポリシーインスタンス名が含まれます。

    • spec.targetRef.name​ 値には、カスタムポリシーを適用する API インスタンスの名前が含まれます。API インスタンスはすでに定義済みで、適用されている必要があります。

    • spec.policyRef.name​ 値には、適用するカスタムポリシー実装が含まれます。

    • spec.config​ 値には、ポリシー設定データが含まれます。

  7. リソースを Flex Gateway インスタンスに適用します。

    完全な ​custom-policy-example.yaml​ ファイルに次の内容が含まれるようになります。

    ---
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: Extension
    metadata:
      name: custom-local-example-definition
    spec:
      extends:
      - name: extension-authentication
      - name: extension-definition
      properties:
        secret-value:
          type: string
      required:
        - secret-value
    ---
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: Extension
    metadata:
      name: custom-local-example-flex
    spec:
      extends:
        - name: custom-local-example-definition
        - name: envoy-filter
        - name: proxy-wasm-filter
      properties:
        rootId:
          type: string
          default: main
        implementation:
          type: string
          default: base64://<WASM_BINARY_IN_BASE64>
    ---
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: PolicyBinding
    metadata:
      name: custom-local-example
    spec:
      targetRef:
        kind: ApiInstance
        name: ingress-http
      policyRef:
        kind: Extension
        name: custom-local-example-flex
      config:
        secret-value: "an-example-value"

    ファイルを Flex Gateway 設定ディレクトリに保存します。次に例を示します。

    • /etc/mulesoft/flex-gateway/conf.d/policies

これで、カスタムポリシーが ​ingress-http​ という API インスタンスに適用されます。