緩和モードのトラフィックレーンは、仮想サービスや宛先ルールなどのカスタムルーティングリソースと共に使用して、エンドツーエンド(E2E)トラフィック管理を集中化された方法で実装し、きめ細かいルーティング管理と簡素化されたトラフィック処理を実現できます。このトピックでは、緩和モードのトラフィックレーンを使用して E2E トラフィックを管理する方法について説明します。
機能紹介
緩和モードのトラフィックレーンを使用すると、アプリケーションバージョンを柔軟に分離できます。トラフィックは、リクエストルーティングヘッダーと E2E パススルーリクエストヘッダーに基づいて異なるレーンにルーティングされます。レーン内のサービスが相互に呼び出しを行う際に、呼び出し先のサービスがレーン内に存在しない場合、リクエストはベースラインレーン内の同じサービスに転送されます。この機能により、トレースの整合性が確保され、トラフィック管理が簡素化されます。
次のセクションでは、緩和モードのトラフィックレーンの詳細について説明します。
トレースコンテキストのパススルーモード
緩和モードのトラフィックレーンを使用するには、アプリケーションがトレースコンテキストのパススルーをサポートしている必要があります。これは、アプリケーションが次の特性を持っている必要があることを意味します。同じトレース内のすべてのリクエストは、同じリクエストヘッダーを持っています。
緩和モードのトラフィックレーンは、アプリケーションの一般的なトレースコンテキストのパススルーモードをサポートしています。ビジネス要件に基づいて、緩和モードのトラフィックレーンを設定できます。
シナリオ 1:トレース ID をパススルーする
トレース ID リクエストヘッダーは、次の特性を持つリクエストヘッダーです。
リクエストヘッダーの内容は、トレース全体にわたって透過的に送信できます。
リクエストヘッダーの内容は、トレースごとに異なります。
トレース ID は、通常、完全なトレースを一意に識別するために使用され、その内容はランダムな文字列です。アプリケーションがトレースシステムに接続されている場合、アプリケーションはトレース ID をパススルーする機能を持っている可能性があります。いくつかの一般的なトレース標準では、x-b3-trace-id や x-datadog-trace-id など、一意のトレース ID リクエストヘッダーが定義されています。
シナリオ 2:カスタムリクエストヘッダーをパススルーする
アプリケーションは、コードを使用して、バージョンや環境などのサービス情報を含む一部のリクエストヘッダーのパススルーを実装する場合があります。このようなリクエストヘッダーは、トレースのバージョンと環境を識別するために一般的に使用されます。このシナリオで緩和モードのトラフィックレーンを使用するには、パススルーカスタムリクエストヘッダーをリクエストルーティングヘッダーとしてのみ使用できます。
シナリオ 3:Baggage ヘッダーをパススルーする
Baggage は、OpenTelemetry によって開発された標準化されたメカニズムであり、分散システムのトレースにおいてプロセス間でコンテキスト情報を伝播するために使用されます。これを行うには、HTTP ヘッダーに Baggage という名前の HTTP ヘッダーを追加します。Baggage ヘッダーの値は、キーと値のペアの形式です。Baggage ヘッダーを使用して、テナント ID、トレース ID、セキュリティ資格情報などのコンテキストデータを転送できます。これにより、コードを変更することなく、トレース分析とログ関連付け機能を使用できます。例:
baggage: userId=alice,serverNode=DF%2028,isProduction=falseBaggage は、OpenTelemetry コミュニティによって提案された、トレースコンテキストを透過的に送信するための標準化されたメカニズムです。したがって、このメカニズムに基づいて緩和モードのトラフィックレーンを設定することもお勧めします。
シナリオ 1 と 3 では、アプリケーションがトレースシステムに接続されていない場合、またはコードによって Baggage ヘッダーを透過的に送信できない場合は、OpenTelemetry Operator を使用してアプリケーションに自動インストルメンテーション機能を挿入し、アプリケーションコードを変更せずにトレース ID リクエストヘッダーをパススルーできます。詳細については、「自動インストルメンテーションの挿入」をご参照ください。自動インストルメンテーションを実装するには、上記のコミュニティドキュメントに従って、OpenTelemetry Operator をインストールし、自動インストルメンテーションを設定し、アプリケーションポッドにアノテーションを追加する必要があります。 OpenTelemetry 自動インストルメンテーションは、W3C Baggage や B3 など、複数の一般的な分散トレースコンテキストパススルー標準をサポートしています。上記の自動インストルメンテーションコミュニティドキュメントでは、W3C TraceContext と W3C Baggage のパススルーの例を示しています。
リクエストルーティングヘッダー
通常、緩和モードのトラフィックレーンは、リクエストルーティングヘッダーを使用してリクエストトレースにラベルを付けます。アプリケーションの既存のサービス関連リクエストヘッダーと競合しない限り、任意のリクエストルーティングヘッダーを指定できます。選択したトレースコンテキストパススルーモードに基づいて、緩和モードのトラフィックレーンは、トレース内の各リクエストに、値がレーン名であるリクエストルーティングヘッダーが含まれていることを確認します。たとえば、レーン グループの作成時に Routing Request Header パラメーターを x-asm-prefer-tag に設定した場合、s1 レーンのサービスにリクエストが送信されると、トレース内の後続のリクエストには常に x-asm-prefer-tag: s1 リクエストヘッダーが含まれます。リクエストヘッダー内のレーンのタグ情報に基づいて、トラフィックレーンはアプリケーションの異なるバージョンを分離できます。
トレースコンテキストのパススルーモードパラメーターを カスタムヘッダーのパススルー に設定する場合は、リクエストルーティングヘッダーをパススルーされるカスタムリクエストヘッダーに設定する必要があります。
シナリオの説明
緩和モードのトラフィックレーンを使用すると、さまざまな方法でアプリケーションバージョンを分離できます。以下のシナリオの例では、3 つの異なるパススルーリクエストヘッダーを使用してトラフィックをレーンにルーティングする方法、およびカスタム仮想サービスを設定して緩和モードのトラフィックレーンのトラフィックをルーティングする方法について学習します。
参考資料
トラフィックレーンには、厳格モードと緩和モードの 2 つのモードがあります。2 つのモードの説明と違いについては、「トラフィックレーンの概要」をご参照ください。
リクエストルーティングヘッダーが E2E パススルーリクエストヘッダーと同じシナリオで、緩和モードのトラフィックレーンを使用して E2E トラフィックを管理する場合は、「シナリオ 2:トレースでカスタムリクエストヘッダーをパススルーする」をご参照ください。
仮想サービスと宛先ルールを指定することで、トラフィックレーンを設定できます。また、これらのルールを使用してトラフィックシフトを設定することもできます。トラフィックシフトは、宛先バージョンまたはアプリケーションが使用できない場合に、優先度の低いバージョンまたは特定の特性を持つアプリケーションにトラフィックをルーティングします。詳細については、「トラフィックルールを使用してトラフィックレーンとトラフィックシフトを設定する」をご参照ください。
トラフィックレーンのリクエストルーティングルールには、リクエストヘッダーとリクエストパスのマッチングルールが含まれています。カスタム仮想サービスを作成して、より複雑なマッチングルールを定義したり、カスタムリクエストルートを作成したりできます。詳細については、「カスタム仮想サービスを使用して緩和モードのトラフィックレーンのトラフィックをルーティングする」をご参照ください。