ローカルモードでの複数のアップストリームサービスを使用した API のパブリッシュ

ローカルモードで実行されている Flex Gateway は、1 つのコンシューマーエンドポイントを通じて複数のアップストリームサービスを公開する API インスタンスをサポートしています。

Flex Gateway は、定義済みのルート順になっている複数のルートと個別のルールセットを使用してトラフィックを異なるセットのアップストリームサービスに転送することで、トラフィックを管理します。各 API インスタンスでは、トラフィックを複数のアップストリームサービスに転送できる複数のルートがサポートされます。

ローカルモードで実行されている Flex Gateway では、複数のアップストリームサービスがある API インスタンスは ​ApiInstance​ および ​PolicyBinding​ YAML 設定リソースを使用して設定されます。​ApiInstance​ リソースでは API インスタンスが定義され、​route-weighted​ ポリシーリソースでは 1 つ以上のアップストリームサービスへの 1 つのルートが定義されます。ルートをさらに追加するには、複数の ​route-weighted​ リソースを追加します。

次のチュートリアルでは、事前設定済みの ​route-weighted​ ポリシーリソースを使用しています。リソースの設定方法については、複数のアップストリームサービスポリシーのトラフィック管理 (加重)を参照してください。

20%

25%

20%

Linux で Flex Gateway の背後で実行されている API のパブリッシュ

始める前に

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

API のパブリッシュ

  1. .yaml​ ファイル拡張子で設定ファイルを作成します。

    1. ファイルにカスタム名を付けます。

    2. ファイルを Flex Gateway の設定ディレクトリ ​/etc/mulesoft/flex-gateway/conf.d/custom​ に保存します。このディレクトリには複数の設定ファイルを保存できます。

  2. 次の YAML スニペットをコピーしてファイルに貼り付け、設定項目値を適切な値に変更します。

    次のスニペットでは架空の ​products-api​ と ​products-api-beta​ というサービスと架空の ​json-http​ API インスタンスを使用しています。各自の API 参照名と各自のサービスの詳細を指定してください。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: ApiInstance
    metadata:
      name: json-http
    spec:
      address: http://0.0.0.0:8080/json
    ​
    ---
    ​
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: PolicyBinding
    metadata:
      name: weight-routing-test
    spec:
      targetRef:
        name: json-http
      policyRef:
        name: route-weighted
      config:
        routes:
        - weight: 75 # max_value=100, min_value=1
          destinationPath: /posts/
          destinationRef:
            name: products-api
        - weight: 25
          destinationPath: /posts/
          destinationRef:
            name: products-api-beta
      rules:
      - path: (.*)
        methods: POST
        headers:
          x-test: true
        host: test.com
      - methods: GET|POST
        headers:
          x-test: true
          y-test: false
        host: test.com
  3. ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。

  4. 次のコマンドを実行してログを表示します。

    journalctl -u flex-gateway-*

    応答は次のようになります。

    [agent][info] Generating config
    [agent][info] Gateway default/18b4e890fe7d: Adding ApiInstance default/products-users-api http://0.0.0.0:8080
    [agent][info] Gateway default/18b4e890fe7d: Adding Route: &{host: path:/api/products(/.*) methods: headerConditions:[] profile:0xc0030529f0} => {Kind:Service Name:products-users-api-products Namespace:default}
    [agent][info] Gateway default/18b4e890fe7d: Adding Route: &{host: path:/api/users(/.*) methods: headerConditions:[] profile:0xc0030529f0} => {Kind:Service Name:products-users-api-users Namespace:default}
    [agent][info] Gateway default/18b4e890fe7d: Adding Policy default/envoy.filters.http.router
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/monitoring_metrics http://0.0.0.0:9881
    [agent][debug] generating service monitoring_metrics.default.svc hostname: 0.0.0.0 port: 9881
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/products-users-api-products https://<your products URL>:<your port>/
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/products-users-api-users https://<your users URL>:<your port>/
    [agent][debug] generating service products-users-api-products.default.svc hostname: <your products URL> port: <your port>
    [agent][debug] generating service products-users-api-users.default.svc hostname: <your users URL> port: <your port>
    [agent][info] Writing envoy bootstrap configuration to /tmp/envoy.json
    [envoy][info] cds: add 2 cluster(s), remove 2 cluster(s)
    [envoy][info] cds: added/updated 1 cluster(s), skipped 1 unmodified cluster(s)

複数のアップストリームサービスを使用した API は Flex Gateway の背後で実行されるようになりました。

Docker コンテナで Flex Gateway の背後で実行されている API のパブリッシュ

始める前に

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

API のパブリッシュ

  1. ターミナルを開いて、Flex Gateway 設定ファイルが保存されているディレクトリに移動します。このディレクトリは、Flex Gateway を起動したときに指定されています。

  2. .yaml​ ファイル拡張子で設定ファイルを作成します。

    1. ファイルにカスタム名を付けます。

    2. ファイルを保存します。

  3. 次の YAML スニペットをコピーしてファイルに貼り付け、設定項目を適切な値に変更します。

    次のスニペットでは架空の ​products-api​ と ​products-api-beta​ というサービスと架空の ​json-http​ API インスタンスを使用しています。各自の API 参照名と各自のサービスの詳細を指定してください。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: ApiInstance
    metadata:
      name: json-http
    spec:
      address: http://0.0.0.0:8080/json
    ​
    ---
    ​
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: PolicyBinding
    metadata:
      name: weight-routing-test
    spec:
      targetRef:
        name: json-http
      policyRef:
        name: route-weighted
      config:
        routes:
        - weight: 75 # max_value=100, min_value=1
          destinationPath: /posts/
          destinationRef:
            name: products-api
        - weight: 25
          destinationPath: /posts/
          destinationRef:
            name: products-api-beta
      rules:
      - path: (.*)
        methods: POST
        headers:
          x-test: true
        host: test.com
      - methods: GET|POST
        headers:
          x-test: true
          y-test: false
        host: test.com
  4. ファイルを保存します。ゲートウェイによって設定が自動的に更新されます。

  5. Docker コンテナログを表示します。内容は次のようになっています。

    [agent][info] Generating config
    [agent][info] Gateway default/18b4e890fe7d: Adding ApiInstance default/products-users-api http://0.0.0.0:8080
    [agent][info] Gateway default/18b4e890fe7d: Adding Route: &{host: path:/api/products(/.*) methods: headerConditions:[] profile:0xc0030529f0} => {Kind:Service Name:products-users-api-products Namespace:default}
    [agent][info] Gateway default/18b4e890fe7d: Adding Route: &{host: path:/api/users(/.*) methods: headerConditions:[] profile:0xc0030529f0} => {Kind:Service Name:products-users-api-users Namespace:default}
    [agent][info] Gateway default/18b4e890fe7d: Adding Policy default/envoy.filters.http.router
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/monitoring_metrics http://0.0.0.0:9881
    [agent][debug] generating service monitoring_metrics.default.svc hostname: 0.0.0.0 port: 9881
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/products-users-api-products https://<your products URL>:<your port>/
    [agent][info] Gateway default/18b4e890fe7d: Adding Service default/products-users-api-users https://<your users URL>:<your port>/
    [agent][debug] generating service products-users-api-products.default.svc hostname: <your products URL> port: <your port>
    [agent][debug] generating service products-users-api-users.default.svc hostname: <your users URL> port: <your port>
    [agent][info] Writing envoy bootstrap configuration to /tmp/envoy.json
    [envoy][info] cds: add 2 cluster(s), remove 2 cluster(s)
    [envoy][info] cds: added/updated 1 cluster(s), skipped 1 unmodified cluster(s)

複数のアップストリームサービスを使用した API は Flex Gateway の背後で実行されています。

Kubernetes クラスターで Flex Gateway の背後で実行されている API のパブリッシュ

始める前に

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

アップストリームサービスとして Kubernetes サービス​を使用しているか、Kubernetes サービスに対する要求を行うポリシーを適用する場合は、​service​ リソースで次のパラメーターを設定します。

  • spec.ports[].protocol​ を ​TCP​ に

  • spec.ports[].name

spec.ports[].name​ サービスは ​<protocol>[-<suffix>]​ 構造に準拠している必要があります。 [-<suffix>]​ は省略可能であり、​<protocol>​ の有効なオプションは次のとおりです。

  • HTTP

  • H2

  • HTTPS

API のパブリッシュ

  1. kubectl apply​ コマンドを使用して次の ​.yaml​ 設定ファイルを適用し、設定項目値を適切な値に変更します。

    次のスニペットでは架空の ​products-api​ と ​products-api-beta​ というサービスと架空の ​json-http​ API インスタンスを使用しています。各自の API 参照名と各自のサービスの詳細を指定してください。

    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: ApiInstance
    metadata:
      name: json-http
    spec:
      address: http://0.0.0.0:8080/json
    ​
    ---
    ​
    apiVersion: gateway.mulesoft.com/v1alpha1
    kind: PolicyBinding
    metadata:
      name: weight-routing-test
    spec:
      targetRef:
        name: json-http
      policyRef:
        name: route-weighted
      config:
        routes:
        - weight: 75 # max_value=100, min_value=1
          destinationPath: /posts/
          destinationRef:
            name: products-api
        - weight: 25
          destinationPath: /posts/
          destinationRef:
            name: products-api-beta
      rules:
      - path: (.*)
        methods: POST
        headers:
          x-test: true
        host: test.com
      - methods: GET|POST
        headers:
          x-test: true
          y-test: false
        host: test.com
  2. 次のコマンドを入力してポッドログを表示し、API が正常に作成されたことを確認します。

kubectl logs -f <pod-name>