セルフマネージドの Spring Cloud または Zuul ゲートウェイによってバックアップされた SAE アプリケーションでカナリアリリースを実行する場合、特定のトラフィックを各マイクロサービスのグレーバージョンにルーティングし、そのルーティングがサービスチェーン全体に自動的に伝播する方法が必要です。このトピックでは、ビジネスコードを変更することなく、単一の HTTP リクエストヘッダーを使用してエンドツーエンドのトラフィックルーティングを構成する方法について説明します。
基本概念
| 用語 | 説明 |
|---|---|
| Baseline environment | マイクロサービスの安定した本番バージョン — アプリケーション A、B、C。すべてのトラフィックはデフォルトでここにルーティングされます。 |
| Canary release environment | 検証中の新しいバージョン — アプリケーション A-gray、B-gray、および C-gray。カナリアヘッダーを持つリクエストのみがこの環境に到達します。 |
| End-to-end propagation | イングレスゲートウェイがリクエストをグレーインスタンスにルーティングすると、グレータグはコード変更なしで、すべてのダウンストリームサービス呼び出し (A-gray → B-gray → C-gray) を介して自動的に伝播します。 |
x-mse-tag | このシナリオでのみ、カナリアリリース環境にトラフィックをルーティングするために使用される HTTP リクエストヘッダーです。アプリケーションのカナリアリリースルールを構成する際には、このヘッダーを使用しないでください。 |
前提条件
開始する前に、以下を確認してください。
イングレスゲートウェイとして構成された Application Load Balancer (ALB) インスタンス
サービス登録と検出に利用可能な Nacos サービスレジストリ
mse-simple-demo パッケージをダウンロード済み
SAE デモアプリケーションのデプロイ
バックボーンアプリケーションのデプロイ
アプリケーション A (ショッピングカート)、アプリケーション B (トランザクションセンター)、およびアプリケーション C (在庫センター) を SAE にデプロイします。セットアップ手順については、「アプリケーションのサービス登録と検出を Nacos に変更する」をご参照ください。
カナリアリリースアプリケーションのデプロイ
アプリケーション A-gray、アプリケーション B-gray、アプリケーション C-gray をデプロイします。各カナリアアプリケーションの起動コマンドに -Dalicloud.service.tag=gray を追加して、システムがそれらをベースラインの対応するアプリケーションと区別できるようにします。
デプロイメントで SAE 組み込み以外のサービスレジストリを使用している場合は、以下の起動パラメーターも追加します。-Dnacos.use.endpoint.parsing.rule=false -Dnacos.use.cloud.namespace.parsing=falseSpring Cloud または Zuul ゲートウェイのデプロイ
同じドメイン名へのリクエストを、異なる URL パスを使用して転送します。構成の詳細については、「CLB インスタンスを使用してアプリケーションのゲートウェイルーティングを設定する」をご参照ください。
カナリアリリース環境へのトラフィックルーティング
クライアントのドメイン名を変更できない場合は、www.base.com ドメイン名をルートに関連付け、カナリアリリース環境にルーティングされるべきリクエストに x-mse-tag:gray ヘッダーを追加します。ALB イングレスゲートウェイはヘッダーを読み取り、リクエストをグレーサービスインスタンスにルーティングします。これにより、グレータグはすべてのダウンストリームサービスに伝播されます。
x-mse-tag ヘッダーは、この特定のシナリオでのみ機能します。アプリケーションのカナリアリリースルールを構成する際には、使用しないでください。詳細については、「Java アプリケーションのカナリアリリースルールを管理」をご参照ください。
次の図は、x-mse-tag:gray ヘッダーが追加された後、受信リクエストがどのようにカナリアリリース環境に誘導されるかを示しています。

カナリアリリースの検証
トラフィックが正しくルーティングされることを確認するために、以下のコマンドを実行します。
ベースライントラフィックの確認 — x-mse-tag ヘッダーのないリクエストは本番環境にルーティングされます。
curl -H "Host:www.base.com" http://106.14.XX.XX/a期待される出力:
A[172.18.XX.XX] -> B[172.18.XX.XX] -> C[172.18.XX.XX]カナリアトラフィックの確認 — x-mse-tag:gray を追加して、3つのグレーインスタンスすべてを介してリクエストをルーティングします。
curl -H "Host:www.base.com" -H "x-mse-tag:gray" http://106.14.XX.XX/a期待される出力:
Agray[172.18.XX.XX] -> Bgray[172.18.XX.XX] -> Cgray[172.18.XX.XX]%出力は、Classic Load Balancer (CLB) イングレスコントローラーがリクエストをアプリケーション A のカナリアリリース環境にルーティングし、グレータグがアプリケーション B-gray およびアプリケーション C-gray を介してエンドツーエンドで伝播したことを確認します。
次のステップ
Java アプリケーションの自動カナリアリリースルールを構成するには、「Java アプリケーションのカナリアリリースルールを管理」をご参照ください。