Microservices Engine (MSE) を使用すると、MSE Ingress ゲートウェイに基づいてエンドツーエンドカナリアリリースを実装できます。これにより、ビジネスコードを変更することなく、エンドツーエンドのトラフィックスロットリングを実装できます。このトピックでは、MSE Ingress ゲートウェイを使用してエンドツーエンドカナリアリリースを実装する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) クラスターが作成されていること。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
Microservices Governance Professional Edition が有効化されていること。詳細については、「Microservices Governance の有効化」をご参照ください。
MSE Ingress Controller コンポーネントがインストールされ、関連する権限がコンポーネントに付与されていること。詳細については、「コンポーネントの管理」および「MSE Ingress Controller への権限付与」をご参照ください。
制限事項
エンドツーエンドカナリアリリース機能は、タグベースルーティング機能と統合されています。Microservices Governance を使用してアプリケーションのエンドツーエンドカナariaリリース機能を実装する場合、アプリケーションにカナリアリリースルールとタグベースルーティングルールを設定しないことを推奨します。
エンドツーエンドカナリアリリースでサポートされている Java のバージョンとフレームワークの詳細については、「Microservices Governance でサポートされている Java フレームワーク」をご参照ください。
背景情報
Spring Cloud アプリケーションまたは Dubbo アプリケーションをデプロイしており、これらのアプリケーションに新しいバージョンが利用可能になったマイクロサービスのシナリオでは、使用中のバージョンに関係なく、トラフィックはランダムにアプリケーションにルーティングされます。この場合、特定の特性を持つトラフィックが、目的のバージョンのアプリケーションにルーティングされない可能性があります。この問題を解決するには、エンドツーエンドカナリアリリース機能を使用して、アプリケーションの特定のバージョンを他のバージョンから分離し、特定のルールに一致するリクエストトラフィックを目的のバージンのアプリケーションにルーティングします。独立したランタイム環境に相当するレーンを作成してアプリケーションのバージョンを分離し、MSE Ingress ゲートウェイのルーティングルールを設定してトラフィックをルーティングできます。
エンドツーエンドカナリアリリースのシナリオ
このトピックでは、e コマース業界の注文シナリオで、MSE Ingress ゲートウェイからマイクロサービスアプリケーションへのエンドツーエンドカナリアリリースを実装する方法の例を示します。この例では、アプリケーションアーキテクチャは MSE Ingress ゲートウェイとバックエンドマイクロサービスフレームワーク (Spring Cloud) で構成されています。バックエンドの呼び出しプロセスには、トランザクションセンター (アプリケーション A)、商品センター (アプリケーション B)、在庫センター (アプリケーション C) のバックエンドアプリケーションが関与します。クライアントまたは HTML ページを使用して、Nacos インスタンスに登録されているこれらのバックエンドアプリケーションにアクセスできます。
顧客が注文すると、トラフィックは MSE Ingress ゲートウェイに流れ込み、トランザクションセンター (アプリケーション A)、商品センター (アプリケーション B)、在庫センター (アプリケーション C) に順番にルーティングされます。次の呼び出しプロセスが使用されます: 顧客 -> MSE Ingress ゲートウェイ -> アプリケーション A -> アプリケーション B -> アプリケーション C。
アプリケーションのバージョンの特徴は、ビジネスの反復とともに更新されます。アプリケーション A とアプリケーション C の新しいバージョンが正式にリリースされる前に、カナリアリリースを使用して両方のアプリケーションでバージョンをテストする必要があります。バージョンが安定していることが証明された後、アプリケーションのバージョンをリリースできます。バージョンの新機能をリリースするには、アプリケーション A とアプリケーション C の両方でバージョンをリリースする必要があります。エンドツーENDカナリアリリース機能は、MSE Ingress ゲートウェイと Microservices Governance に基づいて提供されます。MSE Ingress ゲートウェイから複数のバックエンドアプリケーションへのエンドツーエンドカナリアリリースを実装できます。これにより、特定の特性を持つカナリアトラフィックを常にアプリケーションのカナリアバージョンにルーティングできます。これは、カナリアリリースを使用して複数のアプリケーションでバージョンをテストするのに役立ちます。アプリケーションにカナリアバージョンがない場合、トラフィックは自動的にアプリケーションのベース環境にルーティングされます。

用語
レーン
同じバージョンのアプリケーションに対して定義された分離環境。特定のトラフィックコントロールルールに一致するトラフィックのみが、レーン内でマークされたアプリケーションにルーティングできます。1 つのアプリケーションは複数のレーンに属することができ、1 つのレーンには複数のアプリケーションを含めることができます。アプリケーションとレーンは多対多の関係にあります。
レーングループ
レーンのコレクション。レーングループは、異なるチームやシナリオを区別するために使用されます。
MSE Ingress ゲートウェイ
MSE Ingress ゲートウェイを使用すると、MSE クラウドネイティブゲートウェイに基づいて Ingress トラフィックを管理できます。MSE Ingress ゲートウェイは NGINX Ingress ゲートウェイと互換性があり、NGINX Ingress ゲートウェイの 50 を超えるアノテーションをサポートしています。MSE Ingress ゲートウェイは、複数のサービスバージョンのカナリアリリースを同時にサポートします。MSE Ingress ゲートウェイは、柔軟なサービスガバナンス機能と包括的なセキュリティ保護を提供します。MSE Ingress ゲートウェイは、多くのクラウドネイティブ分散アプリケーションが利用可能なシナリオでのトラフィックガバナンスに適しています。
準備
アプリケーションの Microservices Governance の有効化
MSE Microservices Governance Professional Edition を有効化します。
詳細については、「Microservices Governance の有効化」をご参照ください。
アプリケーションの Microservices Governance を有効化します。
MSE コンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。管理するクラスターを見つけ、[操作] 列の [管理] をクリックします。
[クラスター詳細] ページで、管理する名前空間を見つけ、[操作] 列の [Microservices Governance の有効化] をクリックします。表示されるメッセージで、[OK] をクリックします。
デモアプリケーションのデプロイ
ACK コンソールにログインします。
左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[操作] 列の [詳細] をクリックします。クラスターの詳細ページが表示されます。
詳細ページの左側のナビゲーションウィンドウで、 を選択します。
[ステートレス] ページで、[名前空間] を選択し、[YAML から作成] をクリックします。
パラメーターを設定し、[作成] をクリックします。
この例では、Nacos Server アプリケーションをデプロイしてサービスディスカバリを実装します。アプリケーション A、B、C がデプロイされます。アプリケーション A と C にはベースバージョンとカナリアバージョンがデプロイされ、アプリケーション B にはベースバージョンがデプロイされます。
nacos-server アプリケーションをデプロイします。
アプリケーション A をデプロイします。
ベースバージョンの YAML コード
カナリアバージョンの YAML コード
アプリケーション B をデプロイします。
ベースバージョンの YAML コード
アプリケーション C をデプロイします。
ベースバージョンの YAML コード
カナリアバージョンの YAML コード
Ingress アプリケーションであるアプリケーション A に 2 つの Kubernetes サービスを設定します。
ACK コンソールにログインします。
詳細ページの左側のナビゲーションウィンドウで、 を選択します
[サービス] ページで、[名前空間] を選択し、[YAML でリソースを作成] をクリックします。[作成] ページでパラメーターを設定し、[作成] をクリックします。
アプリケーション A のベースバージョン用にデプロイされる spring-cloud-a-base サービスの YAML コード
アプリケーション A のカナリアバージョン用にデプロイされる spring-cloud-a-gray サービスの YAML コード
ステップ 1: レーングループの作成
MSE コンソールにログインし、トップナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、Microservices Governance > Full link Grayscale を選択します。
[フルトレースグレーリリース] ページで、[レーングループとレーンの作成] をクリックします。選択したマイクロサービスの名前空間にレーングループが利用可能な場合は、[レーングループの作成] をクリックします。
[レーングループの作成] パネルで、パラメーターを設定し、[OK] をクリックします。
パラメーター
説明
レーングループ名
レーングループの名前を入力します。
Ingress タイプ
[その他のゲートウェイ] を選択します。
その他のゲートウェイには、NGINX Ingress、APISIX、および自己管理の Java ゲートウェイが含まれます。ゲートウェイでカナリア転送ルールを実装する必要があります。
レーングループアプリケーション
Ingress アプリケーションまたは Ingress ゲートウェイに関連するすべてのサービスを選択します。
レーングループが作成されたら、Ingress アプリケーションおよびその他の関連アプリケーションが有効であるかどうかを確認します。[フルトレースグレーリリース] ページの [レーングループと関連アプリケーション] セクションで作成したレーングループを表示できます。レーングループ情報を変更するには、右側の
アイコンをクリックして情報を変更します。
ステップ 2: レーンの作成
フルトレースグレーリリース ページで、トップナビゲーションバーでレーングループが存在するリージョンを選択し、下部にある [最初の分割レーンを作成] をクリックします。
選択したマイクロサービスの名前空間にレーンが利用可能な場合は、[レーンの作成] をクリックします。
重要アプリケーションでエンドツーエンドカナリアリリース機能が有効になっている場合、これらのアプリケーションにはカナリアリリース機能とタグベースルーティング機能を使用しないことを推奨します。
[レーンの作成] パネルで、パラメーターを設定し、[OK] をクリックします。
重要ゲートウェイが Ingress ゲートウェイの場合は、ACK コンソールで Ingress ルーティングルールを設定する必要があります。
パラメーター
説明
ノードタグの追加
設定方法: ACK コンソールで、アプリケーションの YAML ファイルの
spec.template.metadata.labelsにalicloud.service.tag: ${tag}を追加します。タグ名の設定: 次のキーと値のペアを
spec.template.metadata.labelsに追加します。msePilotCreateAppName:${AppName}alicloud.service.tag:{tag}
レーン名
レーンの名前を入力します。
レーンタグ
[ノードタグ] を設定すると、タグが [レーンタグ] ドロップダウンリストに表示されます。ドロップダウンリストから設定したタグを選択すると、タグはレーン内のアプリケーションに自動的に追加されます。
レーンを作成した後、[フルトレースグレーリリース] ページの [トラフィック分散] セクションでレーン情報を表示または設定できます。
アイコンをクリックして、レーンのトラフィックの割合を表示します。[アクション] 列の
アイコンをクリックして、レーンアプリケーションのステータスを設定します。レーンを有効にする: [有効化] をクリックします。トラフィックはレーンの設定に基づいてルーティングされます。トラフィックは、レーンタグを持つアプリケーションバージョンに優先的にルーティングされます。タグ付けされたアプリケーションバージョンが存在しない場合、トラフィックはタグ付けされていないアプリケーションバージョンにルーティングされます。
レーンを無効にする: [無効化] をクリックします。レーン内のアプリケーションのトラフィックは、その後タグ付けされていないアプリケーションバージョンにルーティングされます。
レーンに関する情報の編集: [編集] をクリックします。
レーンの削除: [削除] をクリックします。
ステップ 3: ベースバージョンの Ingress ルールの設定
ビジネスドメイン名が example.com で、example.com へのすべてのリクエストトラフィックをベースライン (オンライン) 環境のみにルーティングする場合、次のコードを使用してベースライン環境の Ingress ルールを設定できます。
curl コマンドを使用して example.com にアクセスし、トラフィックをベースライン環境にルーティングします。
curl -H "host: example.com" http://47.98.xxx.xx/a次の結果が返されます:
A[192.168.0.98][config=base] -> B[192.168.0.157] -> C[192.168.0.161]
ステップ 4: カナリアバージョンの Ingress ルーティングルールの設定
ヘッダーベースのポリシーを使用して本番トラフィックとカナリアトラフィックを区別する場合、example.com にアクセスするときに HTTP ヘッダー x-user-id: 100 を含むリクエストをカナリア環境にルーティングできます。トラフィックは、呼び出しチェーン内の各アプリケーションのカナリアリリースバージョンに優先的にルーティングされます。アプリケーションにカナリアリリースバージョンが存在しない場合、トラフィックはディザスタリカバリのためにベースラインバージョンにルーティングされます。次のコードを使用して、カナリア環境の Ingress ルールを設定します。
上記のコードでは、アノテーションを使用してカナリアリリース、ヘッダー設定、およびヘッダーコントロール機能を実装しています。アノテーションの使用方法の詳細については、「MSE Ingress の高度な使用法」をご参照ください。
curl コマンドを使用して example.com にアクセスし、トラフィックをカナリア環境にルーティングします。リクエストには HTTP ヘッダー x-user-id: 100 を含める必要があります。
curl -H "host: example.com" -H "x-user-id: 100" http://47.98.xxx.xx/a次の結果は、カナリアトラフィックがアプリケーション A と C のカナリアバージョンに優先的にルーティングされることを示しています。アプリケーション B については、カナリアバージョンが利用できないため、トラフィックはベースバージョンにルーティングされます。
Agray[192.168.0.128][config=base] -> B[192.168.0.152] -> Cgray[192.168.0.151]
MSE コンソールでのアプリケーションのトラフィックモニタリングチャートの表示
単一アプリケーションのモニタリングチャートを表示します。
フルトレースグレーリリース ページで、モニタリング情報を表示したいレーングループのタブをクリックします。
Lane Groups and Involved Applications セクションで、モニタリング情報を表示したいアプリケーションの名前をクリックします。1 秒あたりのクエリ数 (QPS) データが、ページの右側にある QPS data セクションに表示されます。
レーングループ内のすべてのアプリケーションのモニタリングチャートを表示します。
フルトレースグレーリリース ページで、モニタリング情報を表示したいレーングループのタブをクリックします。
[アプリケーション QPS モニタリング] セクションの右側にある [トラフィック詳細の表示] をクリックして、レーン内のすべてのアプリケーションのトラフィックモニタリングチャートを表示します。