すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:traffic-tag

最終更新日:Jan 08, 2025

このトピックでは、traffic-tag プラグインの構成項目について説明します。これらの構成は、特定のルールに基づいてカナリアリリースとテストのために定義されたトラフィックタグを管理するために使用されます。

プラグインタイプ

スロットリングプラグイン。

説明

traffic-tag プラグインを使用すると、特定のリクエストヘッダーを追加することで、重みまたは特定のリクエストコンテンツに基づいてリクエストトラフィックにタグを付けることができます。 traffic-tag プラグインを使用して、トラフィックにタグを付けるための複雑なロジックルールを設定できます。

構成項目

フィールド名

データ型

デフォルト値

必須

説明

conditionGroups

オブジェクトの配列

-

いいえ

コンテンツベースの条件グループ。詳細については、このトピックの conditionGroups 構成 セクションをご参照ください。

weightGroups

オブジェクトの配列

-

いいえ

重みベースの条件グループ。詳細については、このトピックの weightGroups 構成 セクションをご参照ください。

defaultTagKey

文字列

-

いいえ

デフォルトのタグキー。一致する条件がない場合、デフォルトのタグキーが使用されます。このフィールドは、defaultTagVal フィールドが設定されている場合にのみ有効になります。

defaultTagVal

文字列

-

いいえ

デフォルトのタグ値。一致する条件がない場合、デフォルトのタグ値が使用されます。このフィールドは、defaultTagKey フィールドが設定されている場合にのみ有効になります。

conditionGroups 構成

次の表に、conditionGroups 構成項目のフィールドを示します。

フィールド名

データ型

デフォルト値

必須

説明

headerName

文字列

-

はい

追加または変更する HTTP ヘッダーの名前。

headerValue

文字列

-

はい

HTTP ヘッダーの値。

logic

文字列

-

はい

条件間の論理関係。 and または or を指定できます。値は小文字でなければなりません。

conditions

オブジェクトの配列

-

はい

タグ付け条件。

次の表に、conditions 構成項目のフィールドを示します。

フィールド名

データ型

デフォルト値

必須

説明

conditionType

文字列

-

はい

条件タイプ。 headerparameter、または cookie を指定できます。

key

文字列

-

はい

条件キーワード。

operator

文字列

-

はい

演算子。 equalnot_equalprefixinnot_inregex、または percentage を指定できます。

value

文字列の配列

-

はい

条件値。演算子が in または not_in の場合にのみ複数の値を設定できます。

説明

operatorregex の場合、正規表現エンジン RE2 が使用されます。詳細については、RE2 公式ドキュメントをご参照ください。

weightGroups 構成

次の表に、weightGroups 構成項目のフィールドを示します。

フィールド名

データ型

デフォルト値

必須

説明

headerName

文字列

-

はい

追加または変更する HTTP ヘッダーの名前。

headerValue

文字列

-

はい

HTTP ヘッダーの値。

weight

整数

-

はい

トラフィックの重み(パーセント)。

演算子

演算子

説明

equal

値が指定された値と完全に同じ場合、条件が満たされます。

not_equal

値が指定された値と異なる場合、条件が満たされます。

prefix

値が指定された値で始まる場合、条件が満たされます。

in

値が指定されたリストに含まれている場合、条件が満たされます。

not_in

値が指定されたリストに含まれていない場合、条件が満たされます。

regex

値が正規表現ルールに準拠している場合、条件が満たされます。

percentage

不等式 hash(get(key)) % 100 < value が真の場合、条件は真です。

説明

percentage 演算子と weight フィールドは、以下の点で異なります。

  • percentage 演算子: 条件式で使用され、指定されたパーセントとキーと値のペアに基づいて操作を実行するかどうかを決定します。キーと値のペアの場合、複数の一致の結果は冪等です。条件にヒットした場合、後続の一致でも条件にヒットします。

  • weight フィールド: トラフィックを異なるパスにルーティングするための重みを定義するために使用されます。トラフィックが重みベースでタグ付けされている場合、weight フィールドは、パスにルーティングされるトラフィックの割合を決定します。 percentage 演算子とは異なり、weight フィールドは固定の比較基準を定義せず、トラフィックは重みベースでランダムに分散されます。リクエストは、異なる一致で異なるパスにルーティングされる場合があります。

  • percentage 演算子を使用する場合、システムはリクエストが指定されたパーセント条件を満たしているかどうかを判断します。 weight フィールドを使用する場合、システムはトラフィックを静的かつランダムに分散します。

構成例

特定のルートに対して traffic-tag プラグインを有効にする

この例では、_match_route_ で指定された route-aroute-b は、作成されたゲートウェイルートに対して構成されたルート名です。 2 つのルートのいずれかが一致すると、構成が有効になります。

複数のルールが設定されている場合、ルールは _rules_ で指定された順序で有効になります。ルールが一致すると、そのルールの構成が有効になり、後続のルールは無視されます。

例 1:コンテンツベースのマッチング

次のサンプルコードでは、route-a ルートと route-b ルートにルーティングされたリクエストが一致しています。リクエストのヘッダー roleuserviewer、または 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.comtest.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