このトピックでは、traffic-tag
プラグインの構成項目について説明します。これらの構成は、特定のルールに基づいてカナリアリリースとテストのために定義されたトラフィックタグを管理するために使用されます。
プラグインタイプ
スロットリングプラグイン。
説明
traffic-tag
プラグインを使用すると、特定のリクエストヘッダーを追加することで、重みまたは特定のリクエストコンテンツに基づいてリクエストトラフィックにタグを付けることができます。 traffic-tag プラグインを使用して、トラフィックにタグを付けるための複雑なロジックルールを設定できます。
構成項目
フィールド名 | データ型 | デフォルト値 | 必須 | 説明 |
| オブジェクトの配列 | - | いいえ | コンテンツベースの条件グループ。詳細については、このトピックの conditionGroups 構成 セクションをご参照ください。 |
| オブジェクトの配列 | - | いいえ | 重みベースの条件グループ。詳細については、このトピックの weightGroups 構成 セクションをご参照ください。 |
| 文字列 | - | いいえ | デフォルトのタグキー。一致する条件がない場合、デフォルトのタグキーが使用されます。このフィールドは、defaultTagVal フィールドが設定されている場合にのみ有効になります。 |
| 文字列 | - | いいえ | デフォルトのタグ値。一致する条件がない場合、デフォルトのタグ値が使用されます。このフィールドは、defaultTagKey フィールドが設定されている場合にのみ有効になります。 |
conditionGroups 構成
次の表に、conditionGroups
構成項目のフィールドを示します。
フィールド名 | データ型 | デフォルト値 | 必須 | 説明 |
| 文字列 | - | はい | 追加または変更する HTTP ヘッダーの名前。 |
| 文字列 | - | はい | HTTP ヘッダーの値。 |
| 文字列 | - | はい | 条件間の論理関係。 |
| オブジェクトの配列 | - | はい | タグ付け条件。 |
次の表に、conditions
構成項目のフィールドを示します。
フィールド名 | データ型 | デフォルト値 | 必須 | 説明 |
| 文字列 | - | はい | 条件タイプ。 |
| 文字列 | - | はい | 条件キーワード。 |
| 文字列 | - | はい | 演算子。 |
| 文字列の配列 | - | はい | 条件値。演算子が |
operator
が regex
の場合、正規表現エンジン RE2 が使用されます。詳細については、RE2 公式ドキュメントをご参照ください。
weightGroups 構成
次の表に、weightGroups
構成項目のフィールドを示します。
フィールド名 | データ型 | デフォルト値 | 必須 | 説明 |
| 文字列 | - | はい | 追加または変更する HTTP ヘッダーの名前。 |
| 文字列 | - | はい | HTTP ヘッダーの値。 |
| 整数 | - | はい | トラフィックの重み(パーセント)。 |
演算子
演算子 | 説明 |
| 値が指定された値と完全に同じ場合、条件が満たされます。 |
| 値が指定された値と異なる場合、条件が満たされます。 |
| 値が指定された値で始まる場合、条件が満たされます。 |
| 値が指定されたリストに含まれている場合、条件が満たされます。 |
| 値が指定されたリストに含まれていない場合、条件が満たされます。 |
| 値が正規表現ルールに準拠している場合、条件が満たされます。 |
| 不等式 |
percentage
演算子と weight
フィールドは、以下の点で異なります。
percentage
演算子: 条件式で使用され、指定されたパーセントとキーと値のペアに基づいて操作を実行するかどうかを決定します。キーと値のペアの場合、複数の一致の結果は冪等です。条件にヒットした場合、後続の一致でも条件にヒットします。weight
フィールド: トラフィックを異なるパスにルーティングするための重みを定義するために使用されます。トラフィックが重みベースでタグ付けされている場合、weight
フィールドは、パスにルーティングされるトラフィックの割合を決定します。percentage
演算子とは異なり、weight フィールドは固定の比較基準を定義せず、トラフィックは重みベースでランダムに分散されます。リクエストは、異なる一致で異なるパスにルーティングされる場合があります。percentage
演算子を使用する場合、システムはリクエストが指定されたパーセント条件を満たしているかどうかを判断します。weight
フィールドを使用する場合、システムはトラフィックを静的かつランダムに分散します。
構成例
特定のルートに対して traffic-tag プラグインを有効にする
この例では、_match_route_
で指定された route-a
と route-b
は、作成されたゲートウェイルートに対して構成されたルート名です。 2 つのルートのいずれかが一致すると、構成が有効になります。
複数のルールが設定されている場合、ルールは _rules_
で指定された順序で有効になります。ルールが一致すると、そのルールの構成が有効になり、後続のルールは無視されます。
例 1:コンテンツベースのマッチング
次のサンプルコードでは、route-a
ルートと route-b
ルートにルーティングされたリクエストが一致しています。リクエストのヘッダー role
が user
、viewer
、または editor
であり、リクエストに foo=bar
が指定されている場合、リクエストヘッダー x-mse-tag: gray
がリクエストに追加されます。リクエストに一致する条件がない場合、defaultTagKey
フィールドと defaultTagVal
フィールドの構成で定義されているように、リクエストヘッダー x-mse-tag: base
がリクエストに追加されます。
# _rules_ フィールドを使用して、きめ細かいルールを構成します。
_rules_:
- _match_route_:
- route-a
- route-b
defaultTagKey: x-mse-tag
defaultTagVal: base
conditionGroups:
- headerName: x-mse-tag
headerValue: gray
logic: and
conditions:
- conditionType: header
key: role
operator: in
value:
- user
- viewer
- editor
- conditionType: parameter
key: foo
operator: equal
value:
- bar
例 2:重みベースのマッチング
次のサンプルコードでは、リクエストには、リクエストヘッダー x-mse-tag: gray
が追加される確率が 30 %、リクエストヘッダー x-mse-tag: blue
が追加される確率が 30 %、リクエストヘッダーが追加されない確率が 40 % です。
_rules_:
- _match_route_:
- route-a
- route-b
# 重みの合計は 100 です。構成されていない重み値 40 は、ヘッダーが追加されないことを示します。
weightGroups:
- headerName: x-mse-tag
headerValue: gray
weight: 30
- headerName: x-mse-tag
headerValue: blue
weight: 30
特定のドメイン名に対して traffic-tag プラグインを有効にする
この例では、_match_domain_
で指定された *.example.com
と test.com
は、リクエストの照合に使用されるドメイン名です。 2 つのドメイン名のいずれかが一致すると、構成が有効になります。
次のサンプルコードでは、*.example.com
または test.com
にアクセスするリクエストが一致しています。リクエストにリクエストヘッダー role
が含まれており、ヘッダーの値が user
で始まる場合(例:role: user_common
)、リクエストヘッダー x-mse-tag: blue
がリクエストに追加されます。
_rules_:
- _match_domain_:
- "*.example.com"
- test.com
conditionGroups:
- headerName: x-mse-tag
headerValue: blue
logic: and
conditions:
- conditionType: header
key: role
operator: prefix
value:
- user
ゲートウェイに対して traffic-tag プラグインを有効にする
この例では、_rules_ フィールドは指定されておらず、構成はゲートウェイレベルで有効になります。
コンテンツベースのマッチングの場合は conditionGroups
を、重みベースのマッチングの場合は weightGroups
を構成できます。両方の構成項目を設定した場合、traffic-tag プラグインは、conditionGroups
の条件に基づいてリクエストを優先的に照合します。条件が満たされると、リクエストヘッダーが追加され、マッチングは終了します。 conditionGroups
のどの条件も満たされない場合、traffic-tag プラグインは、weightGroups
で指定された重み基づいてリクエストヘッダーを追加します。
conditionGroups:
- headerName: x-mse-tag-1
headerValue: gray
# logic は or に設定されています。これは、いずれかの条件が満たされた場合にリクエストが一致することを示します。
logic: or
conditions:
- conditionType: header
key: foo
operator: equal
value:
- bar
- conditionType: cookie
key: x-user-type
operator: prefix
value:
- test
- headerName: x-mse-tag-2
headerValue: blue
# logic は and に設定されています。これは、すべての条件が満たされた場合にのみリクエストが一致することを示します。
logic: and
conditions:
- conditionType: header
key: x-type
operator: in
value:
- type1
- type2
- type3
- conditionType: header
key: x-mod
operator: regex
value:
- "^[a-zA-Z0-9]{8}$"
- headerName: x-mse-tag-3
headerValue: green
logic: and
conditions:
- conditionType: header
key: user_id
operator: percentage
value:
- 60
# 重みの合計は 100 です。構成されていない重み値 40 は、ヘッダーが追加されないことを示します。
weightGroups:
- headerName: x-mse-tag
headerValue: gray
weight: 30
- headerName: x-mse-tag
headerValue: base
weight: 30