ルースモードトラフィックレーンは、VirtualService や DestinationRule などのカスタムルーティングリソースと連携して、統一されたエンドツーエンドトラフィックのイングレス、きめ細かなルーティング、およびプラグインベースのトラフィック処理を提供します。
機能紹介
ルースモードトラフィックレーンを使用すると、アプリケーションのバージョンを分離できます。トラフィックは、パススルーリクエストヘッダーとトラフィック誘導リクエストヘッダーに基づいて、異なるレーンにルーティングされます。レーン内のサービスが相互に呼び出す際、現在のレーンにターゲットサービスが存在しない場合、トラフィックはベースラインレーンに転送されます。これにより、リンクの整合性が確保され、トラフィック管理が簡素化されます。
ルースモードトラフィックレーンを使用する前に、以下の概念を理解しておく必要があります。
呼び出しチェーンコンテキストのパススルー方法
呼び出しチェーンコンテキストのパススルーは、ルースモードトラフィックレーンの前提条件です。単一の呼び出しチェーンでは、すべてのリクエストが同じリクエストヘッダーを共有する必要があります。
ルースモードトラフィックレーンは、呼び出しチェーンコンテキストをパススルーするための一般的な方法をサポートしています。ご自身のアプリケーションに合ったシナリオを選択してください。
シナリオ 1:トレース ID のパススルー
トレース ID は、以下の特徴を持つリクエストヘッダーです:
-
リクエストヘッダーが呼び出しチェーン全体でパススルーされます。
-
リクエストヘッダーが各呼び出しチェーンで一意です。
トレース ID は、完全な呼び出しチェーンを一意に識別します。その値は通常、ランダムな文字列です。アプリケーションがトレーシングシステムと統合されている場合、トレース ID がパススルーされる可能性が高いです。一般的なトレーシング標準では、x-b3-trace-id や x-datadog-trace-id などの、トレース ID 用の一意のリクエストヘッダーが使用されます。
シナリオ 2:カスタムリクエストヘッダーのパススルー
アプリケーションコードで、version や env といったビジネス上の意味を持つリクエストヘッダーがすでにパススルーされている場合があります。これらのヘッダーは、多くの場合、呼び出しチェーンのバージョンと環境を識別します。このシナリオでは、パススルーされたカスタムリクエストヘッダーをトラフィック誘導リクエストヘッダーとして使用する必要があります。
シナリオ 3:Baggage リクエストヘッダーのパススルー
Baggage は、HTTP ヘッダーに Baggage フィールドを追加することで、分散呼び出しチェーンのプロセス間でコンテキスト情報を渡すための標準的な OpenTelemetry のメカニズムです。フィールド値はキーと値のペアのセットであり、テナント ID、トレース ID、セキュリティ認証情報などのコンテキストデータを伝達でき、コードを変更することなくトレーシングとログの関連付けを可能にします。例:
baggage: userId=alice,serverNode=DF%2028,isProduction=false
Baggage は、呼び出しチェーンコンテキストをパススルーするための標準的な OpenTelemetry のメカニズムであるため、ルースモードトラフィックレーンを設定する際に推奨される方法です。
シナリオ 1 と 3 について:アプリケーションがトレーシングシステムと統合されていない場合、またはコード内で Baggage をパススルーしない場合は、自動計装を使用できます。OpenTelemetry Operator を使用して、自動計装機能をアプリケーションにインジェクションできます。これにより、アプリケーションコードを変更することなく、トレース ID リクエストヘッダーのパススルーが可能になります。自動計装を設定するには、コミュニティドキュメントの手順に従ってください。OpenTelemetry Operator をインストールし、自動計装を設定し、アプリケーションの Pod にアノテーションを追加する必要があります。OpenTelemetry の自動計装は、W3C Baggage や B3 など、分散呼び出しチェーンコンテキストをパススルーするための多くの一般的な標準をサポートしています。コミュニティドキュメントでは、W3C TraceContext と W3C Baggage をパススルーする例が提供されています。詳細については、「自動計装」をご参照ください。
トラフィック誘導リクエストヘッダー
ルースモードトラフィックレーンは、トラフィック誘導リクエストヘッダーを使用してリクエストチェーンにタグを付けます。アプリケーションの既存のビジネス関連ヘッダーと競合しない任意のリクエストヘッダーを指定できます。選択した呼び出しチェーンコンテキストのパススルー方法に基づいて、ルースモードトラフィックレーンは、呼び出しチェーンのすべてのステップでトラフィック誘導リクエストヘッダーが含まれることを保証します。ヘッダーの値はトラフィックレーンの名前です。たとえば、トラフィック誘導リクエストヘッダーとして x-asm-prefer-tag を指定した場合、s1 という名前のレーン内のサービスにリクエストが送信されると、呼び出しチェーン内の後続のリクエストには常に x-asm-prefer-tag: s1 リクエストヘッダーが付与されます。トラフィックレーンは、リクエストヘッダー内のレーンタグを使用して、異なるアプリケーションバージョン用に分離された環境を作成します。
カスタムリクエストヘッダーをパススルーすることを選択した場合は、同じヘッダーをトラフィック誘導リクエストヘッダーとして使用する必要があります。
シナリオ概要
以下のシナリオでは、3 つの異なるリクエストヘッダーのパススルー方法を使用してレーンにトラフィックをルーティングする方法と、カスタムの VirtualService を設定してルースモードレーンにトラフィックを誘導する方法を示します。
関連ドキュメント
-
トラフィックレーンには、
StrictとLooseの 2 つのモードがあります。モードとその違いの詳細については、「トラフィックレーンの概要」をご参照ください。 -
パススルーとトラフィック誘導の両方に同じヘッダーを使用してエンドツーエンドトラフィックを管理する方法については、「シナリオ 2:チェーン内でのカスタムリクエストヘッダーのパススルー」をご参照ください。
-
VirtualService や DestinationRule などのトラフィックルールを使用してトラフィックレーンを実装できます。また、トラフィックフォールバックを設定することもできます。特定のバージョンまたは機能を持つアプリケーションが利用できない場合、トラフィックは指定されたフォールバックバージョンに送信されます。詳細については、「トラフィックルールに基づくトラフィックレーンとトラフィックフォールバックの実装」をご参照ください。
-
トラフィックレーンのトラフィック誘導ルールには、リクエストヘッダーとリクエストの URI に一致するルールが含まれます。より複雑な一致ルールやカスタムルーティングを実装するには、カスタムの VirtualService を使用できます。設定の詳細については、「カスタム VirtualService を使用したルースモードレーンへのトラフィック誘導」をご参照ください。