Java エージェントは、Kubernetes サービスディスカバリに基づくエンドツーエンドのカナリアリリースをサポートしています。 Spring Boot アプリケーションはサードパーティのレジストリに接続できません。 このため、Kubernetes クラスターにデプロイされた Spring Boot アプリケーションは、Kubernetes サービスディスカバリに基づいて他のアプリケーションを呼び出します。 このトピックでは、マイクロサービスエンジン(MSE)を使用して、Kubernetes クラスターにデプロイされた Spring Boot アプリケーションのエンドツーエンドのカナリアリリースを実装する方法について説明します。
前提条件
Kubernetes クラスターが作成されていること。 詳細については、「ACK マネージドクラスターを作成する」および「ACK Serverless クラスターを作成する」をご参照ください。
MSE Microservices Governance Enterprise Edition がアクティブ化されていること、およびマイクロサービス名前空間が作成されていること。
ack-onepilot という名前の MSE マイクロサービスガバナンスコンポーネントがインストールされていること。 詳細については、「マイクロサービスガバナンスコンポーネントをインストールおよび更新する」をご参照ください。 バージョン 3.3.x 以降の ack-onepilot コンポーネントをインストールすることをお勧めします。
Kubernetes クラスターで高度なガバナンス機能が有効になっていること。 詳細については、「Kubernetes クラスターの高度なガバナンスを有効にする」をご参照ください。
説明ack-onepilot コンポーネントのバージョンが 4.x 以降の場合は、高度なガバナンス機能が有効になるまで約 10 分お待ちください。 また、ack-onepilot を再起動し、アプリケーションを再デプロイすることもできます。 待機時間の問題はすぐに解決されます。
制限事項
この機能はパブリックプレビュー段階であり、次のリージョンでのみ使用できます:中国(北京)、中国(上海)、中国(杭州)、中国(深圳)、中国(張家口)、米国(シリコンバレー)、シンガポール。 その他のリージョンはサポートされていません。
Spring Boot アプリケーションが他のアプリケーションを呼び出すときにサポートされる HTTP フレームワークとそのバージョンについては、「マイクロサービスガバナンスでサポートされるフレームワーク」をご参照ください。
この機能はパブリックプレビュー段階であるため、Java エージェントのバージョンを 4.2.5-proxyless に設定する必要があります。 エージェントバージョンを指定する方法の詳細については、「エージェントバージョンを指定する」をご参照ください。
デモの概要
このデモでは、アプリケーションは ACK コンソールにデプロイされます。 次の図は、デモアプリケーションのアーキテクチャを示しています。 アプリケーション呼び出しシナリオには、Nacos インスタンスに基づく Spring Cloud アプリケーションのディスカバリと、Kubernetes サービスに基づく Spring Boot アプリケーションのディスカバリが含まれます。
ゲートウェイ:Spring Cloud ゲートウェイとして機能します。 バックエンドトラフィックのイングレスとして使用され、Nacos サービスディスカバリに基づいてアプリケーション A を呼び出します。
A:Spring Cloud アプリケーション。 そのノードは、サービスディスカバリのために Nacos インスタンスに登録されます。 アプリケーション A は、Kubernetes サービスディスカバリに基づいてアプリケーション B を呼び出し、Nacos サービスディスカバリに基づいてアプリケーション D を呼び出します。
B:Spring Boot アプリケーション。 Kubernetes サービスディスカバリに基づいてアプリケーション D を呼び出します。
D:Spring Cloud アプリケーション。 そのノードは、サービスディスカバリのために Nacos インスタンスに登録されます。
手順
手順 1:ベースアプリケーションとカナリアアプリケーションをデプロイする
ACK コンソール にログインします。
左側のナビゲーションウィンドウで、[クラスター] をクリックします。 次に、管理するクラスターの名前をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
ページの上部で、クラスターの [名前空間] を選択し、[YAML から作成] をクリックします。
次のコマンドを実行して、MySQL Flexible Server インスタンスを作成します。
ステップ 2: エンドツーエンドカナリアリリース機能を設定する
MSE コンソール にログインし、上部のナビゲーションバーでリージョンを選択します。
左側のナビゲーションウィンドウで、 を選択します。
[フルリンクグレースケール] ページで、マイクロサービス名前空間ドロップダウンリストから
mse-springboot-demo
を選択します。選択したマイクロサービス名前空間にレーン グループが作成されていない場合は、[レーン グループとレーンを作成] をクリックします。選択したマイクロサービス名前空間にレーン グループが既に作成されている場合は、[+ レーン グループを作成] をクリックします。
Create Lane Group パネルでパラメーターを設定し、[OK] をクリックします。
パラメーター
例
レーン グループ名
mse-springboot-demo など、レーン グループのカスタム名を入力します。
Ingress タイプ
[Java マイクロサービス ゲートウェイ] を選択します。
Lane Group Traffic Entry
spring-cloud-gateway を選択します。
Lane Group Application
spring-cloud-a、spring-boot-b、spring-cloud-d を選択します。
選択したマイクロサービス名前空間にレーンが作成されていない場合は、Full link grayscale ページの下部にある [最初の分割レーンを作成] をクリックします。選択したマイクロサービス名前空間にレーンが既に作成されている場合は、[レーンを作成] をクリックします。
[レーンを作成] パネルでパラメーターを設定し、[OK] をクリックします。
パラメーター
説明
ノード タグを追加
カナリア アプリケーション ノードとベース アプリケーション ノードを区別するために、カナリア アプリケーション ノードのタグを追加します。
レーン情報を入力
レーン名: 分かりやすいレーン名を入力します。
レーン タグ: このレーンで一致するトラフィックのタグ名を入力します。この例では、このパラメーターは gray に設定されています。
一致関係の確認: 指定されたタグを持つアプリケーション ノードの数が想定どおりであることを確認します。
レーンの状態: スイッチをオンにします。
カナリアリリース ルールを追加
レーン内のアプリケーション ノードへのリクエストをルーティングするためのルールを指定します。
カナリアリリース モード: [コンテンツによるカナリアリリース] を選択します。
カナリアリリース条件: [すべての条件を満たす] を選択します。
この例の構成の詳細:
パラメーター タイプ:
Header
を選択します。パラメーター:
x-springboot-demo
を入力します。条件:
==
を選択します。Value:
1
を入力します。
ステップ 3: 結果の検証
ACK コンソール にログインします。
左側のナビゲーションウィンドウで、[クラスター] をクリックします。次に、管理するクラスターの名前をクリックします。
[クラスター情報] ページの左側のナビゲーションウィンドウで、[ネットワーク] > [サービス] を選択します。[サービス] ページで、
spring-cloud-gateway-slb
の外部 IP アドレスをコピーし、次の検証操作を実行します。ベース環境での結果の検証
ルート
/A/A/a
に基づいて Spring Cloud ゲートウェイにリクエストを送信し、すべてのトラフィックがベースノードにルーティングされていることを確認します。これは、エンドツーエンドカナリアリリース構成が有効であることを示します。# テストコマンド curl http://xxx.xx.131.81/A/A/a # テスト結果 A:192.168.0.17:base -(java)- B:192.168.100.231:base - D:192.168.0.19:base
カナリア環境での結果の検証
ルート
/A/A/a
に基づいて Spring Cloud ゲートウェイにリクエストを送信し、Header
にx-springboot-demo=1
を追加します。すべてのトラフィックがカナリアノードにルーティングされていることを確認します。これは、エンドツーエンドカナリアリリース構成が有効であることを示します。# テストコマンド curl -H "x-springboot-demo:1" http://xxx.xx.131.81/A/A/a # テスト結果 A:192.168.100.234:gray -(java)- B:192.168.0.21:gray - D:192.168.0.14:gray
タブ 2 本文