サービスメッシュ(ASM)では、ASMSwimLaneGroup および ASMSwimLane CustomResourceDefinitions(CRD)を使用して、サービスの呼び出しチェーンにトラフィックレーン機能を実装できます。 ASM を使用すると、アプリケーションの特定のバージョンのサービス、または特定の特性を持つアプリケーションを、独立したランタイム環境(レーンと呼ばれる)に分離できます。 その後、ルールに一致するリクエストを、アプリケーションの特定のバージョンのサービス、または特定の特性を持つアプリケーションにルーティングするように、レーンルールを設定できます。
設定例
次の設定は、Kubernetes クラスタの default ネームスペースにある mocka、mockb、および mockc サービスに対して、mock という名前のレーングループが作成されることを示しています。 レーングループには、v1 と v2 の 2 つのトラフィックレーンが含まれています。 v1 と v2 は、それぞれこれらのサービスの v1 と v2 のバージョンに対応しています。 バージョンは、ポッドのバージョンラベルによって区別されます。 mocka、mockb、および mockc サービスが互いに呼び出す場合、同じバージョンのサービスのみが呼び出されます。 これにより、v1 と v2 のサービスが分離されます。 さらに、istio-system ネームスペースにある ingressgateway という名前の Istio ゲートウェイに基づいて仮想サービスが作成され、リクエストが 2 つのレーンにルーティングされます。
ASMSwimLaneGroup フィールドの説明
ASMSwimLaneGroup は、トラフィックレーングループを定義します。 トラフィックレーングループは、トラフィックレーンを作成する必要があるサービスと、リクエストルーティングに使用される仮想サービスを作成する必要がある Istio ゲートウェイなど、複数のトラフィックレーンで共有される情報を定義します。 トラフィックレーングループは、複数のトラフィックレーンに関連付けることができます。 swimlane-group: {トラフィックレーングループの名前} を指定することで、トラフィックレーンをトラフィックレーングループに関連付けることができます。
ASMSwimLaneGroupSpec
ASMSwimLaneGroupSpec、つまり上記の例の spec セクションは、ASMSwimLaneGroup のコア設定です。
フィールド | タイプ | 必須 | 説明 |
services | はい | レーンを作成する必要がある Kubernetes クラスタ内のサービスを指定します。 Kubernetes サービスの名前、ネームスペース、クラスタ ID、およびクラスタ名を指定することで、Kubernetes クラスタ内のサービスを参照できます。 | |
ingress | はい | トラフィックレーングループのイングレスゲートウェイの設定を指定します。 イングレスゲートウェイは、主にレーングループ内のサービスの複数のバージョンにリクエストをルーティングするために使用されます。 | |
isPermissive | bool | いいえ | トラフィックレーングループのモードを指定します。有効な値:
厳格モードと許可モードのトラフィックレーンの詳細については、「トラフィックレーンの概要」をご参照ください。 |
permissiveModeConfiguration | いいえ | 許可モードのレーングループの設定。レーングループが許可モードの場合、このフィールドを設定する必要があります。 |
ClusterServiceRef
各 ClusterServiceRef は、Kubernetes クラスタにデプロイされた 1 つのサービスを参照します。レーンは、サービスの参照に基づいて作成されます。
フィールド | タイプ | 必須 | 説明 |
name | string | はい | Kubernetes サービスの名前。 |
namespace | string | はい | Kubernetes サービスが存在するネームスペース。 |
cluster | いいえ | Kubernetes クラスタに関する参照情報。 |
ClusterRef
ClusterRef は、ASM インスタンスに追加された Kubernetes クラスタに関する参照情報を提供します。
フィールド | タイプ | 必須 | 説明 |
name | string | いいえ | Kubernetes クラスタの表示名。 |
id | string | いいえ | Kubernetes クラスタの ID。 |
SwimLaneGroupIngressConfiguration
SwimLaneGroupIngressConfiguration は、レーングループ内のサービスのリクエストをルーティングするために使用されるイングレスゲートウェイに関する情報を定義します。
フィールド | タイプ | 必須 | 説明 |
gateway | はい | イングレスゲートウェイに関連付けられた Istio ゲートウェイに関する情報。 | |
ingressRouting | いいえ | レーングループ内のサービスのリクエストをルーティングするために使用されるリクエストルーティングルールの設定。 説明 V1.21.6.92 以降の ASM インスタンスのみがこのフィールドをサポートしています。 |
SwimLaneGatewayConfiguration
SwimLaneGatewayConfiguration は、イングレスゲートウェイに関連付けられた Istio ゲートウェイに関する情報を定義します。
フィールド | タイプ | 必須 | 説明 |
name | string | はい | Istio ゲートウェイの名前。 |
namespace | string | はい | Istio ゲートウェイが存在するネームスペース。 |
type | string | はい | Istio ゲートウェイのタイプ。このフィールドは、ASM によって提供される Istio ゲートウェイを示す |
SwimLaneGroupIngressRouteConfiguration
SwimLaneGroupIngressRouteConfiguration は、レーングループ内のサービスのリクエストをルーティングするために使用されるリクエストルーティングルールの設定を指定します。
フィールド | タイプ | 必須 | 説明 |
ingressRoutingStrategy | string | いいえ | レーングループ内のサービスのリクエストをルーティングするために使用されるポリシー。有効な値:
|
weightedRoutingRule | いいえ | 重みベースのリクエストルーティングポリシーが使用される場合に、すべてのリクエストを照合するために使用される統一されたリクエストルーティングルール。このフィールドは、ingressRoutingStrategy フィールドが weighted に設定されている場合にのみ有効になります。 |
WeightedSwimLaneIngressConfiguration
WeightedSwimLaneIngressConfiguration は、重みベースのリクエストルーティングポリシーが使用される場合に、すべてのリクエストを照合するために使用される統一されたリクエスト照合ルールの設定を指定します。
フィールド | タイプ | 必須 | 説明 |
hosts | []string | はい | リクエストに一致するホスト。ホストは、レーングループに関連付けられた Istio ゲートウェイで宣言する必要があります。 |
requestMatches | いいえ | リクエストの URI とヘッダーを照合するために使用されるリクエスト照合ルール。 |
PermissiveSwimLaneGroupConfiguration
PermissiveSwimLaneGroupConfiguration は、許可モードのトラフィックレーングループに指定する必要があるパラメータを定義します。
フィールド | タイプ | 必須 | 説明 |
routeHeader | string | はい | 許可モードのトラフィックレーンのリクエストルーティングヘッダーの名前。 リクエストルーティングヘッダーは、リクエストが呼び出しチェーンで渡されるときに、リクエストのレーンを決定するために使用されます。 許可モードでは、リクエストがイングレスゲートウェイを介してアップストリームサービスに転送されるときに、リクエストは、リクエストが存在するレーンを決定するために使用されるリクエストルーティングヘッダーを伝送する必要があります。 |
traceHeader | string | はい | 許可モードのトラフィックレーンのエンドツーエンド(E2E)パススルーリクエストヘッダーの名前。 E2E パススルーリクエストヘッダーには、次の特性が必要です。
|
fallbackTarget | string | いいえ | 許可モードのベースラインレーンの名前。リクエストが目的のレーン内の対応するバージョンのサービスにルーティングできない場合、リクエストはベースラインレーン内の対応するバージョンのサービスに送り返されます。 |
ASMSwimLane フィールドの説明
ASMSwimLane は、トラフィックレーンを定義します。トラフィックレーンは、サービスの特定のバージョンまたは特定の特性に関連する情報を定義します。swimlane-group: {トラフィックレーングループの名前} ラベルをトラフィックレーンに追加して、対応するトラフィックレーングループに関連付けることができます。
ASMSwimLaneSpec
ASMSwimLaneSpec、つまり spec セクションは、ASMSwimLane のコア設定です。
フィールド | タイプ | 必須 | 説明 |
labelSelector | map<string, string> | はい | レーン内のサービスのポッドを照合するために使用される 1 つ以上のラベル。一般に、バージョン情報を含むラベルを使用して、特定のレーン内のポッドを照合できます。たとえば、 |
services | いいえ | レーンにデプロイされているサービスを指定します。このフィールドは、ASMSwimLaneGroupSpec の services フィールドに似ています。 Kubernetes サービスの名前、ネームスペース、クラスタ ID、およびクラスタ名を指定することで、Kubernetes クラスタ内のサービスを参照できます。
| |
ingressRules | いいえ | レーンへのリクエストをルーティングするためのイングレスゲートウェイルールの定義。定義は、レーングループに関連付けられたイングレスゲートウェイの仮想サービスに自動的に変換されます。仮想サービスは、イングレスゲートウェイからのリクエストをレーン内のサービスにルーティングします。 ingressRules フィールドを指定しない場合は、イングレスゲートウェイの仮想サービスを手動で作成して、リクエストをレーン内のサービスにルーティングできます。 | |
ingressWeight | いいえ | レーングループが重みベースのリクエストルーティングポリシーを使用する場合、このフィールドはレーンのリクエストルーティングの重みを指定します。レーングループは、異なるレーンに宣言されたリクエストルーティングの重みに基づいて、リクエストの一定の割合をレーンのイングレスサービスに転送します。このフィールドは、ingressRoutingStrategy フィールドが weighted に設定されている場合にのみ有効になります。 |
SwimLaneIngressRule
SwimLaneIngressRule は、イングレスゲートウェイがレーン内のサービスにリクエストをルーティングするためのルーティングルールを指定します。ルールは、イングレスゲートウェイの仮想サービスに自動的に変換されます。
フィールド | タイプ | 必須 | 説明 |
online | bool | はい | リクエストルーティングルールが有効かどうかを指定します。対応する仮想サービスは、online フィールドが true に設定されている場合にのみ、イングレスゲートウェイに対して作成されます。 |
hosts | string[] | はい | リクエストルーティングルールに一致するホスト。このフィールドは、仮想サービスの hosts フィールドに対応します。 |
name | string | いいえ | リクエストルーティングルールの名前。仮想サービスの http セクションの下の name フィールドに対応します。 |
match | いいえ | リクエストルーティングルールが一致するためにリクエストが満たす必要のある条件。このフィールドは、仮想サービスの http セクションの下の match フィールドに自動的に変換されます。 | |
route | はい | リクエストのルーティング先となるデスティネーションサービス。このフィールドは、仮想サービスの http セクションの下の route フィールドに自動的に変換されます。 |
SwimLaneIngressWeight
フィールド | タイプ | 必須 | 説明 |
weight | int | いいえ | レーンのリクエストルーティングの重み。このフィールドが指定されていない場合、リクエストルーティングの重みは 0 です。重み値は、他のレーンのリクエストルーティングの重みとともに使用されて、リクエストルーティングの比率が決定されます。 |
destination | はい | このフィールドは、重みベースのリクエストルーティングポリシーが使用される場合にリクエストが転送されるデスティネーションサービスを指定します。 |
SwimLaneIngressRequestMatch
SwimLaneIngressRequestMatch は、リクエストルーティングルールが一致するためにリクエストが満たす必要のある条件を指定します。
フィールド | タイプ | 必須 | 説明 |
uri | いいえ | 対応するリクエストが一致するためにリクエスト URI が満たす必要のある条件。有効な値:
| |
headers | map<string, StringMatch> | いいえ | 対応するリクエストが一致するためにリクエストヘッダーが満たす必要のある条件。Map コレクションのキーは小文字で、ハイフン(-)を含める必要があります。キー(例:x-request-id)は、ヘッダーの名前を表します。Map コレクションの値は StringMatch タイプです。有効な値:
|
StringMatch
StringMatch は、リクエストの URI とヘッダーを照合する方法を定義する文字列照合条件を指定します。
フィールド | タイプ | 必須 | 説明 | |
一致モードに基づいてフィールドのいずれか 1 つを指定します | exact | string | いいえ | 完全一致。 |
prefix | string | いいえ | プレフィックス一致。 | |
regex | string | いいえ | RE2 正規表現一致。詳細については、「wiki」をご参照ください。 | |
SwimLaneIngressRoute
SwimLaneIngressRoute は、リクエストのルーティング先となるデスティネーションサービスを指定します。
フィールド | タイプ | 必須 | 説明 |
destination | はい | リクエストの転送先となるデスティネーションサービスを指定します。 |
RouteDestination
フィールド | タイプ | 必須 | 説明 |
host | string | はい | Kubernetes サービスのドメイン名。例: |
portNum | int | いいえ | Kubernetes クラスタのサービスポート。例: 説明 V1.21.4.104 以降の ASM インスタンスがこのフィールドをサポートしています。 |
参考文献
トラフィックレーンの概念と使用シナリオ、および厳格モードと許可モードのトラフィックレーンの比較の詳細については、「トラフィックレーンの概要」をご参照ください。
厳格モードのトラフィックレーンを使用してエンドツーエンドのトラフィックを管理する方法の詳細については、「厳格モードのトラフィックレーンを使用してエンドツーエンドのトラフィックを管理する」をご参照ください。
許可モードのトラフィックレーンを使用してエンドツーエンドのトラフィックを管理する方法の詳細については、「許可モードのトラフィックレーンを使用してエンドツーエンドのトラフィックを管理する」をご参照ください。