複数のアップストリームサービスポリシーのトラフィック管理

ポリシー名

複数のアップストリームサービスのトラフィック管理

概要

1 つのコンシューマーエンドポイントから複数のアップストリームサービスへの API インスタンストラフィックを管理する

使用可能な最小 Flex Gateway バージョン

v1.5.0

返される状況コード

このポリシーの戻りコードは存在しません。

次の情報は、ローカルモードで実行されている Flex Gateway にのみ適用されます。接続モードで実行されている Flex Gateway 用に複数のアップストリームサービスを設定するには、​「Multiple Upstream Services for Flex Gateway Running in Connected Mode (接続モードで実行されている Flex Gateway 用の複数のアップストリームサービス)」​を参照してください。

概要

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

Flex Gateway は、トラフィックを複数のアップストリームサービスに転送できるさまざまなルートを使用して要求トラフィックを管理します。Flex Gateway はルート順と各ルートのルールを使用してトラフィックをルートに転送します。さらに、ルート内の各アップストリームサービスに加重率を追加してアップストリームサービスに送信される要求の割合を管理できます。

ローカルモードで複数のアップストリームサービスがある API インスタンスは、​PolicyBinding​ YAML 設定リソースを使用して設定されます。各 ​route-weighted​ リソースで 1 つのルートが定義されます。ルートをさらに追加するには、複数の ​route-weighted​ リソースを追加します。

このポリシーが適用された API インスタンスをパブリッシュする方法に関するチュートリアルは、ローカルモードでの複数のアップストリームサービスを使用した API のパブリッシュを参照してください。

複数のアップストリームサービスがある API をデプロイしても、​アウトバウンド Transport Layer Security ポリシー​には影響しません。各アップストリームサービスにアウトバウンド TLS ポリシーを適用できます。

ポリシーのパラメーターの設定

以下のポリシー定義とパラメーターの表を参照してください。

policyRef:
  name: route-weighted
config:
  routes:
  - weight: <int> // REQUIRED, max_value=100, min_value=1
    destinationPath: <string> // OPTIONAL, default: "/"
    destinationRef:
      name: <string> // REQUIRED
rules:
  - path: <URL-regex> // OPTIONAL, Example: (.*)
    methods: <regex-string> // OPTIONAL, Example: GET|POST
    headers:
      <header-name>: <regex-string> // OPTIONAL
    host: <regex-string> // OPTIONAL
パラメーター 必須または省略可能 デフォルト値 説明

routes

必須

API アップストリームサービスの配列。
少なくとも 1 つのアップストリームが必要です。

routes.weight

必須

なし

このアップストリームサービスに送信される要求の合計の重み。
そのアップストリームサービスに送信されるトラフィックの割合は、アップストリームサービスの重みをすべてのアップストリームサービスの重みの合計で除算したものです。

routes.destinationPath

必須

なし

アップストリームサービスのパス

routes.destinationRef.name

必須

なし

Service​ 設定リソースで定義されているアップストリームサービスの名前

rules

省略可能

このルートのルールセットの配列。
各ルートで複数のルールセットをサポートできます。

rules.path

省略可能

ルートがサービスできる要求パス。
ルールセットごとに 1 つの「URI テンプレート正規表現」パスしか定義できません。定義済みのパスがある要求しかこのルートには送信できません。

rules.methods

省略可能

ルートがサービスできる要求メソッドの種別を定義する配列。
ルールセットごとに複数のメソッドを選択できます。定義済みのメソッドのいずれかである要求しかこのルートには送信できません。サポートされている値は ​GET​、​POST​、​PUT​、​PATCH​、​DELETE​、​OPTIONS​、​HEAD​、​TRACE​、​CONNECT​ です。

rules.headers

省略可能

このルートが要求をサービスするために存在している必要があるヘッダーと正規表現を定義する配列。
指定されたすべてのヘッダー要件を満たす要求しかこのルートには送信できません。ルールで特に定義されていない要求に存在する追加のヘッダーは無視されます。

rules.host

省略可能

ルートがサービスできる要求ホスト URL。
ルールセットごとに 1 つのホスト URL しか定義できません。定義済みのホストから行われる要求しかこのルートには送信できません。

ポリシーのしくみ

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

次の図では、さまざまなルートでフライト情報データベースへの要求やカスタマーサービスアプリケーションへの要求を管理しています。ルート 1 では 2 つのアップストリームサービスが定義されており、要求の 70% を安定データベースに、要求の 30% をベータデータベースに転送します。

Flex Gateway によって複数のアップストリームサービスへのトラフィックが管理されます。

この設定を実現するには、2 つの ​route-weighted​ リソースを公開された API インスタンスにバインドします。1 つの ​route-weighted​ リソースはトラフィックをフライト情報データベースに転送し、もう 1 つの ​route-weighted​ リソースはトラフィックをカスタマーサービスアプリケーションに転送します。

アップストリームサービス

1 つのルートで複数のアップストリームサービスを使用し、要求を似たサービスに転送できます。たとえば、すべてのトラフィックを新しいサービスに送信せずに新しいベータアップストリームサービスのパフォーマンスをテストするには、半分のトラフィックを安定アップストリームサービスに転送し、半分を新しいアップストリームサービスに転送できます。

それぞれの要求が送信されるルート内のアップストリームサービスはランダムであり、前の要求とは無関係です。​routes.weight​ 値により、要求が特定のアップストリームサービスに送信される確率が定義されます。そのアップストリームサービスに送信されるトラフィックの割合は、アップストリームの ​routes.weight​ をすべてのアップストリームサービスの重みの合計で除算したものです。たとえば、重みが ​1​ のアップストリームサービスが 2 つある場合、それぞれのアップストリームサービスはそのルートへのトラフィックの 50% を受信します。重みの値が ​1​ と ​3​ の場合、1 つのルートはトラフィックの 25% を、もう 1 つは 75% を受信します。

ルート内のアップストリームサービスはどの要求でも受信できるため、同じルート内のすべてのアップストリームサービスは同じ API コントラクトに準拠している必要があります。

ルートルール

ルートルールを使用して、要求をさまざまなルートに転送できます。要求は、ルートのいずれか 1 つのルールセットのみのルールを満たしている必要があります。

ルールセットでは、次の 4 つのルールの任意の組み合わせを参照します: path​、​method​、​headers​、​host​。複数のルールセットを使用してさまざまな組み合わせのルールをサポートできます。

すべてのルールは省略可能です。ルールがルールセットに含まれていない場合、そのルールは無視されます。たとえば、ホストを指定しないと、要求が他のルートルールを満たす場合にルートは任意のホストをサービスできます。ルールを定義しないと、ルートはすべての要求をサービスできます。

要求がどのルートのルールも満たさないと、Flex Gateway によって ​404​ エラーコードが返されます。

ルート順序

ルートルールの使用に加えて、ポリシー順序を使用して要求をさまざまなルートに転送できます。

ポリシーを並び替えるには、ポリシーの並び替えを参照してください。

ポリシー順序を設定すると、トラフィックがルートに転送される順序が設定されます。要求がいずれかのルートルールセットを満たす場合、Flex Gateway は要求を最初のルートに転送します。したがって、要求が複数のルートのルートルールを満たす可能性がある場合、ルート順序は非常に重要です。

たとえば、ルート 1 でルールとして ​GET​ メソッドが定義されていて、ルート 2 でルートルールが定義されていない場合、すべての ​GET​ 要求はルート 1 に送信され、他のすべての要求はルート 2 に送信されます。ルート順序が逆で、ルート 1 にルートルールがなかったとしたら、Flex Gateway は ​GET​ 要求がルート 2 に達する前にすべての要求をルート 1 に転送します。