Microservices Engine (MSE) を使用すると、MSE Ingress ゲートウェイに基づいてエンドツーエンドカナリアリリースを実装できます。これにより、ビジネスコードを変更せずにエンドツーエンドでのトラフィック速度制限を実現できます。
前提条件
-
ACK クラスターまたは ACK Serverless クラスターが作成済みである必要があります。詳細については、「ACK マネージドクラスターの作成」をご参照ください。
-
マイクロサービスガバナンス Professional Edition が有効化されています。詳細については、「マイクロサービスガバナンスを有効化する」をご参照ください。
-
MSE Ingress Controller コンポーネントがインストールされ、コンポーネントに必要な権限が付与されている必要があります。詳細については、「コンポーネントの管理」および「MSE Ingress コントローラーの権限付与」をご参照ください。
制限事項
エンドツーエンドカナリアリリース機能は、タグベースルーティング機能と統合されています。アプリケーションに対して Microservices Governance を使用してエンドツーエンドカナリアリリース機能を実装する場合は、アプリケーションに対してカナリアリリースルールおよびタグベースルーティングルールを設定しないことを推奨します。
エンドツーエンドカナリアリリースでサポートされる Java バージョンおよびフレームワークの詳細については、「Microservices Governance でサポートされる Java フレームワーク」をご参照ください。
背景情報
Spring Cloud または Dubbo アプリケーションを使用したマイクロサービスシナリオでは、デフォルトでトラフィックはアプリケーションバージョン間でランダムに分散されます。そのため、特定の特性を持つトラフィックが意図したバージョンに到達しない可能性があります。エンドツーエンドカナリアリリース機能は、特定のアプリケーションバージョンをスイムレーン(独立した実行環境)に分離し、定義されたルールに一致するトラフィックを目的のバージョンにルーティングすることでこの問題を解決します。アプリケーションバージョンを分離するためにスイムレーンを作成し、MSE Ingress ゲートウェイのルーティングルールを設定してトラフィックをルーティングできます。
シナリオ
この例では、MSE Ingress ゲートウェイから e コマース注文シナリオにおけるバックエンドマイクロサービスへのエンドツーエンドカナリアリリースを紹介します。アーキテクチャは MSE Ingress ゲートウェイと、トランザクションセンター(アプリケーション A)、商品センター(アプリケーション B)、在庫センター(アプリケーション C)の 3 つのアプリケーションで構成される Spring Cloud バックエンドで構成されています。クライアントまたは HTML ページは、Nacos インスタンスに登録されたこれらのバックエンドアプリケーションにアクセスします。
顧客が注文を完了すると、トラフィックは MSE Ingress ゲートウェイを経由し、アプリケーション A → アプリケーション B → アプリケーション C の順にルーティングされます:顧客 → MSE Ingress ゲートウェイ → アプリケーション A → アプリケーション B → アプリケーション C。
アプリケーション A およびアプリケーション C の新バージョンをリリースする前に、両方のアプリケーションに対してカナリアリリースを使用して新バージョンをテストする必要があります。バージョンの安定性が確認された後、アプリケーション A およびアプリケーション C の両方に対して本番リリースを行います。MSE Ingress ゲートウェイおよび Microservices Governance に基づくエンドツーエンドカナリアリリース機能により、特定の特性を持つカナリアトラフィックが複数のアプリケーションにわたって常にカナリアバージョンにルーティングされます。アプリケーションにカナリアバージョンが存在しない場合、トラフィックは自動的にベース環境にルーティングされます。

用語
-
レーン
同じバージョンのアプリケーションに対して定義された分離された環境です。特定のトラフィック制御ルールに一致するトラフィックのみがスイムレーン内のアプリケーションにルーティングされます。アプリケーションは複数のスイムレーンに属することができ、スイムレーンには複数のアプリケーションを含めることができます。アプリケーションとスイムレーンは多対多の関係にあります。
-
レーングループ
複数のスイムレーンを集めたコレクションで、異なるチームやシナリオを区別するために使用されます。
-
MSE Ingress ゲートウェイ
MSE Ingress ゲートウェイは、MSE クラウドネイティブゲートウェイに基づいて Ingress トラフィックを管理します。NGINX Ingress と互換性があり、50 種類以上の NGINX Ingress アノテーションをサポートしているため、複数のサービスバージョンに対して同時にカナリアリリースを実現できます。柔軟なサービスガバナンスと包括的なセキュリティ保護により、大規模なクラウドネイティブ分散アプリケーションのトラフィックガバナンス要件を満たします。
前提条件
アプリケーションに対する Microservices Governance の有効化
-
MSE Microservices Governance Professional Edition を有効化します。
詳細については、「Microservices Governance の有効化」をご参照ください。
-
アプリケーションに対して Microservices Governance を有効化します。
MSE コンソール にログインします。
左側のナビゲーションウィンドウで、 を選択します。管理対象のクラスターを見つけ、操作 列の 管理 をクリックします。
クラスター詳細 ページで、管理対象の名前空間を見つけ、操作 列の Microservices Governance の有効化 をクリックします。表示されたメッセージで、OK をクリックします。
デモアプリケーションのデプロイ
Container Service 管理コンソールにログインします。
-
左側のナビゲーションウィンドウで、Clusters をクリックします。
クラスターリスト ページで、対象クラスターの名前をクリックするか、詳細 を 操作 列でクリックします。
クラスター管理ページの左側ナビゲーションウィンドウで、 を選択します。
-
Stateless ページで、Namespaces を選択し、YAML から作成 をクリックします。
-
テンプレートを設定し、Create をクリックします。
この例では、サービス検出のために Nacos Server アプリケーションをデプロイします。アプリケーション A、B、C をデプロイします。アプリケーション A および C にはベースバージョンとカナリアバージョンをデプロイし、アプリケーション B にはベースバージョンのみをデプロイします。
nacos-server アプリケーションをデプロイします。
-
アプリケーション A をデプロイします。
-
ベースバージョンの YAML コード
-
カナリアバージョンの YAML コード
-
-
アプリケーション B をデプロイします。
-
ベースバージョンの YAML コード
-
-
アプリケーション C をデプロイします。
-
ベースバージョンの YAML コード
-
カナリアバージョンの YAML コード
-
-
-
Ingress アプリケーションであるアプリケーション A に対して、2 つの Kubernetes サービスを設定します。
ACK コンソール にログインします。
クラスター管理ページの左側ナビゲーションウィンドウで、 を選択します。
-
Service ページで、Namespaces を選択し、YAML から作成 をクリックしてテンプレートを設定し、Create をクリックします。
-
アプリケーション A のベースバージョン用にデプロイされた spring-cloud-a-base サービスの YAML コード
-
アプリケーション A のカナリアバージョン用にデプロイされた spring-cloud-a-gray サービスの YAML コード
-
ステップ 1:レーングループの作成
-
MSE コンソール にログインし、上部ナビゲーションバーでリージョンを選択します。
-
左側のナビゲーションウィンドウで、Microservices Governance > Full link Grayscale を選択します。
-
End-to-end Canary Release ページで、Create Lane Groups and Lanes をクリックします。選択したマイクロサービ 名前空間にすでにレーングループが存在する場合は、+レーングループの作成 をクリックします。
-
Create Lane Group パネルで、レーングループのパラメーターを設定し、OK をクリックします。
パラメーター
説明
Name of Lane Group
レーングループの名前を入力します。
Entry Type
Other Gateways を選択します。
NGINX Ingress ゲートウェイ、APISIX ゲートウェイ、セルフマネージド Java ゲートウェイなどのその他のゲートウェイでは、ゲートウェイ上でカナリア転送ルールを実装する必要があります。
Lane group involves application
Ingress アプリケーションまたは Ingress ゲートウェイに関連するすべてのサービスを選択します。
レーングループを作成後、Ingress アプリケーションおよび関連するすべてのアプリケーションが正しいことを確認します。End-to-end Canary Release ページの Lane Groups and Involved Applications セクションでレーングループを確認できます。レーングループ情報を変更するには、右側の
アイコンをクリックして情報を更新します。
ステップ 2:スイムレーンの作成
-
エンドツーエンドカナリアリリースページ の上部で、レーングループと同じリージョンを選択し、ページ下部の Create First Split Lane をクリックします。
選択したマイクロサービスの名前空間にすでにスイムレーンが存在する場合は、Create Lane をクリックします。
重要アプリケーションに対してエンドツーエンドカナリアリリース機能が有効になっている場合は、これらのアプリケーションに対してカナリアリリース機能およびタグベースルーティング機能を使用しないことを推奨します。
-
Create Lane パネルで、スイムレーンのパラメーターを設定し、OK をクリックします。
重要ゲートウェイが Ingress ゲートウェイの場合、ACK コンソール で Ingress ルーティングルールを設定する必要があります。
パラメーター
説明
Add Node Tag
-
設定方法:ACK コンソールで、アプリケーションの YAML ファイルの
spec.template.metadata.labelsにalicloud.service.tag: ${tag}を追加します。 -
タグの追加:
spec.template.metadata.labelsに以下のキーと値のペアを追加します。-
msePilotCreateAppName:${AppName} -
alicloud.service.tag:{tag}
-
Lane Name
スイムレーンの名前を入力します。
Lane Tag
Add Node Tag 後、ドロップダウンリストに該当するタグの一覧が表示されます。タグを選択すると、対応するアプリケーションが自動的に追加されます。
スイムレーンを作成後、End-to-end Canary Release ページの Traffic Distribution セクションで、その情報を確認または設定できます。
-
アイコンをクリックして、スイムレーンのトラフィック割合を確認します。 -
スイムレーンリストのActions列にある
アイコンをクリックして、スイムレーン内のアプリケーションのステータスを設定します。-
スイムレーンの有効化:Enable をクリックします。これによりスイムレーンがアクティブになり、スイムレーン構成に従ってトラフィックがルーティングされます。一致するトラフィックは、対応するスイムレーンタグを持つアプリケーションバージョンに優先的にルーティングされます。タグ付きバージョンが存在しない場合は、タグなしバージョンにルーティングされます。
-
スイムレーンの無効化:Close をクリックします。このアプリケーションのトラフィックはタグなしバージョンにルーティングされます。
-
スイムレーンの変更:Edit をクリックして、スイムレーン構成を変更します。
-
スイムレーンの削除:Delete をクリックして、スイムレーンを削除します。
-
-
ステップ 3:ベースバージョン用の Ingress ルールの設定
サービスドメイン名が example.com で、トラフィックをベースバージョン(オンラインバージョン)のみにルーティングしたい場合は、以下の YAML を使用してベースバージョン用の 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 ルーティングルールを設定します。リクエストは各アプリケーションのカナリアバージョンに優先的にルーティングされます。アプリケーションにカナリアバージョンが存在しない場合は、ベースバージョンにルーティングされます。
上記のコードでは、アノテーションを使用してカナリアリリース、ヘッダー設定、ヘッダーコントロールを実装しています。これらのアノテーションの詳細については、「Container Service for Kubernetes: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 セクションで、モニタリング情報を確認したいアプリケーションの名前をクリックします。秒間クエリ数 (QPS) データがページ右側の QPS data セクションに表示されます。
-
-
レーングループ内のすべてのアプリケーションのモニタリングチャートの確認
-
フルリンクグレースケール ページで、モニタリング情報を確認したいレーングループのタブをクリックします。
-
Application QPS Monitoring セクションの右側で、View Traffic Details をクリックして、レーングループ内のすべてのアプリケーションのトラフィックモニタリングチャートを確認します。
-