このトピックでは、クラウドネイティブ API Gateway によって提供される UI ベースの移行ツールを使用して、セルフマネージド NGINX Ingress ゲートウェイからクラウドネイティブ API Gateway インスタンスにトラフィックを移行する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) クラスター、Serverless Kubernetes クラスター、または ACS クラスターが作成され、クラスターに NGINX Ingress Controller がデプロイされています。
クラウドネイティブ API Gateway インスタンスが作成されています。詳細については、「ゲートウェイインスタンスを作成する」をご参照ください。
注意事項
このトピックでは、クラウドネイティブ API Gateway インスタンスは、移行中に Ingress の構成を再利用します。Ingress の構成はコピーされません。インスタンスは、既存の Ingress 構成の変更をリアルタイムでリッスンし、リッスンした構成を解析します。
移行中、NGINX Ingress Controller とクラウドネイティブ API Gateway インスタンスの両方が Ingress 構成の変更を認識できます。
移行が完了した後、使用中のオンライン NGINX Ingress 構成を削除しないでください。移行の目的は、クラウドネイティブ API Gateway インスタンスが既存および新規の Ingress 構成をリッスンして解析できるようにすることです。
移行が完了した後も、既存および新規の Ingress 構成は、NGINX Ingress ゲートウェイの Ingress クラスに関連付けられている必要があります。たとえば、NGINX Ingress ゲートウェイの spec の ingressClassName の値が nginx の場合、この設定は移行後も既存および新規の Ingress 構成で変更されません。
手順
クラウドネイティブ API Gateway は、プロンプトに従ってルート構成とトラフィックを移行するための移行ツールを提供します。
ステップ 1:ルーティングルールを移行する
クラウドネイティブ API Gateway コンソールにログインします。
左側のナビゲーションウィンドウで、[クラウドに移行] をクリックします。
[クラウドに移行] ページで、[タスクの作成] をクリックします。
[移行構成の作成] パネルで、パラメーターを構成します。
クラウドネイティブ API Gateway は、クラスター内のソース Ingress クラスに関連付けられているすべての Ingress リソースの変更を自動的にリッスンし、Ingress リソースのドメイン名とルートの構成を有効にします。
重要宛先クラウドネイティブ API Gateway インスタンスがクラスターに関連付けられており、クラスターの既存の Ingress クラスがこのステップで構成された Ingress クラスと同じでない場合、移行は許可されません。このステップで構成された Ingress クラスが、関連付けられたクラスターに構成された Ingress クラスと同じであることを確認する必要があります。
パラメーター
説明
インスタンス
NGINX Ingress ゲートウェイを移行するインスタンス。
ソースクラスター
NGINX Ingress ゲートウェイが属するクラスター。クラウドネイティブ API Gateway インスタンスとクラスターが同じ VPC にあることを確認する必要があります。
API 名
NGINX Ingress ゲートウェイがインポートされる HTTP API の名前。
リソースグループ
NGINX Ingress ゲートウェイを移行するリソースグループ。
名前空間
移行する Ingress リソースが関連付けられている名前空間。
IngressClass
移行する Ingress リソースが関連付けられている Ingress クラス。
説明1 つの Ingress クラスのみがサポートされています。
このパラメーターを指定しない場合、クラウドネイティブ API Gateway インスタンスはクラスター内のすべての Ingress リソースをリッスンします。
[次へ] をクリックします。
クラウドネイティブ API Gateway インスタンスは、クラスター内のソース Ingress クラスに関連付けられているすべての Ingress リソースの変更を自動的にリッスンし、Ingress リソースのドメイン名とルートの構成を有効にします。
この例では、nginx-route という名前の Ingress がクラスターにデプロイされています。
クラウドネイティブ API Gateway コンソールでは、クラスターの Ingress がクラウドネイティブ API Gateway インスタンスに自動的に同期され、Ingress のドメイン名とルートが生成されていることがわかります。
ステップ 2:ルートを確認する
クラウドネイティブ API Gateway インスタンスがリッスンする Ingress リソースの互換性を確認します。
すべての Ingress アノテーションがクラウドネイティブ API Gateway インスタンスと互換性がある場合は、次のステップに進みます。
Ingress アノテーションがクラウドネイティブ API Gateway インスタンスと互換性がない場合は、チケットを送信します。
重要値が二重引用符 ("") のアノテーション
nginx.ingress.kubernetes.io/service-weightは無視できます。このアノテーションは古い ACK コンソールにデフォルトで追加され、意味がありません。移行中は、使用中の互換性のないアノテーションを削除しないでください。これらの互換性のないアノテーションは、引き続き NGINX Ingress Controller によって解析され、ビジネストラフィックに影響を与えます。
ステップ 3:トラフィック切り替え方法を選択する
トラフィック切り替え前にテストトラフィック分散を行う
トラフィックを切り替える前に、次の操作を実行してローカルテストを実行することをお勧めします。ローカルホストファイルを修正し、DNS サービスのクラウドネイティブ API Gateway インスタンスに関連付けられた Server Load Balancer (SLB) インスタンスの IP アドレスのマッピングを追加してから、curl や Postman などのツールを使用して、トラフィック分散が期待どおりであるかどうかを確認します。
トラフィック切り替え方法を選択する
元の SLB を再利用する
この方法では、NGINX Ingress ゲートウェイに関連付けられた SLB インスタンスのバックエンド vServer グループにクラウドネイティブ API Gateway インスタンスを追加する必要があります。移行中、SLB インスタンスは構成された重みに基づいてビジネストラフィックをクラウドネイティブ API Gateway インスタンスに分散します。移行が完了すると、SLB インスタンス上のすべてのビジネストラフィックがクラウドネイティブ API Gateway インスタンスに切り替えられます。
次の表に、この方法を選択した場合のパラメーターを示します。
パラメーター | 説明 |
ACK クラスター名前空間 | NGINX Ingress ゲートウェイに関連付けられた SLB インスタンスに対応する Kubernetes サービスの名前空間。 |
ACK クラスター SLB サービス | NGINX Ingress ゲートウェイに関連付けられた SLB インスタンスに対応する Kubernetes サービスの名前。 |
SLB ID | 切り替えるトラフィックが流れる SLB インスタンスの ID。 |
ポートとバックエンドサーバー | クラスター内の SLB インスタンスのリスナーポートとゲートウェイプロトコル (HTTP または HTTPS)。ポートとプロトコルを選択すると、vServer グループが自動的に表示されます。 説明 選択したポートとプロトコルが有効であることを確認してください。そうでない場合、トラフィック損失が発生する可能性があります。 |
SLB への DNS 解決
DNS ベンダーが提供する DNS サービスの場合、ルート移行に関連するすべてのドメイン名と、クラウドネイティブ API Gateway インスタンスに関連付けられた SLB インスタンスの IP アドレス間のマッピングを追加します。構成された重み値に基づいて徐々にトラフィックを切り替えるために、DNS レコードを使用することをお勧めします。
ステップ 4:トラフィックを切り替える
元の SLB を再利用する
ステップ 1:SLB の変更をクリックする
[SLB の変更] をクリックすると、SLB インスタンスはクラスターによって管理されなくなり、リスナースケジューリングアルゴリズムは重み付きラウンドロビンに変更されます。
変更後、SLB インスタンスは NGINX Ingress Controller のポッド IP アドレスの変更を検出できません。Kubernetes サービスを SLB インスタンスに再関連付けするには、できるだけ早く次のステップを完了してください。
ステップ 2:サービスアノテーションを上書きする
ステップ 1 が完了したら、ACK コンソール にログインして、[元のクラスター SLB を再利用する] を選択したときに指定した Kubernetes サービスのすべてのアノテーションを手動で削除し、[トラフィックの切り替え] タブで自動的に生成されたアノテーションを Kubernetes サービスのアノテーションにコピーします。このステップにより、Kubernetes サービスは SLB インスタンスを再利用できます。操作が完了したら、[事前チェック] をクリックします。チェックに合格したら、次のステップに進みます。


ステップ 3:構成された重みに基づいてトラフィックを切り替える
クラウドネイティブ API Gateway インスタンスにトラフィックを切り替える重みを指定します。ビジネス要件に基づいて、重みを 1 ~ 100 の範囲の値に設定できます。初めての場合は、重みを 1 ~ 10 の範囲の値に設定することをお勧めします。
値は、クラウドネイティブ API Gateway インスタンス内のすべてのノードの重みの合計です。SLB インスタンスは、クラウドネイティブ API Gateway インスタンス内の各ノードの重みと、vServer グループ内の NGINX Ingress ゲートウェイ内の各ノードの重みに基づいてトラフィックを分散します。NGINX Ingress ゲートウェイ内のすべてのノードのデフォルトの合計重みは 100 です。クラウドネイティブ API Gateway インスタンスの重みを 100 に設定すると、トラフィックの半分がクラウドネイティブ API Gateway インスタンスにルーティングされます。同様に、クラウドネイティブ API Gateway インスタンスの重みを 50 に設定すると、トラフィックの 1/3 がクラウドネイティブ API Gateway インスタンスにルーティングされます。
移行中は、クラウドネイティブ API Gateway コンソールのダッシュボードでクラウドネイティブ API Gateway インスタンスのメトリックを表示できます。インスタンスのヘルスステータスを監視し、ビジネスメトリックが期待どおりであるかどうかを確認できます。
ビジネスメトリックが期待どおりである場合は、クラウドネイティブ API Gateway インスタンスの重みを徐々に増やすことができます。重み構成はバックグラウンドで非同期的に有効になります。したがって、3 分以上間隔をあけて重みを変更する必要があります。
ビジネスメトリックが期待どおりでない場合は、重みを 0 に設定して移行を終了します。
クラウドネイティブ API Gateway インスタンスの重みを増やすには、元のクラスター SLB を再利用する を選択したときに指定した Kubernetes サービスのアノテーション
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weightの値を減らすこともできます。アノテーションを 0 に設定すると、SLB インスタンス上のすべてのトラフィックがクラウドネイティブ API Gateway インスタンスにルーティングされます。SLB は、接続レベルの速度制限を使用するレイヤー 4 ロードバランサーとして機能します。重みは、リクエスト分散比率を正確に制御することはできません。
トラフィック切り替え後に成功率が低下した場合は、重みを 0 に設定して クイックトラフィックロールバック を実行できます。
移行状態を維持し、NGINX Ingress ゲートウェイとクラウドネイティブ API Gateway Ingress ゲートウェイの重みをいつでも調整できるようにするには、このステップに長時間留まることをお勧めします。トラフィックが期待どおりであり、トラフィックロールバックが不要であることを確認したら、[トラフィック検証の完了] をクリックして次のステップに進みます。
[トラフィック検証の完了] をクリックすると、重みを変更できなくなります。
ステップ 4:すべてのトラフィックをクラウドネイティブ API Gateway インスタンスに切り替える
ACK コンソールで、ステップ 3:トラフィック切り替え方法を選択する で指定した Kubernetes サービスのアノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight の値を 0 に設定します。Kubernetes サービスリソースを直接削除することもできます。NGINX Ingress Controller は SLB インスタンスから自動的に削除されます。SLB インスタンス上のすべてのトラフィックがクラウドネイティブ API Gateway インスタンスに切り替えられます。[移行の完了] をクリックして、移行タスクを完了します。

SLB への DNS 解決
DNS ベンダーが提供する DNS サービスの場合、ルート移行に関連するすべてのドメイン名と、クラウドネイティブ API Gateway インスタンスに関連付けられた SLB インスタンスの IP アドレス間のマッピングを追加します。構成された重み値に基づいて徐々にトラフィックを切り替えるために、DNS レコードを使用することをお勧めします。
クイックトラフィックロールバック
トラフィック分散が期待どおりでない場合は、次のいずれかの方法を使用して、トラフィックを NGINX Ingress Controller にすぐにロールバックできます。
元のクラスター SLB を再利用する:重みを 0 に設定して移行を終了します。
SLB への DNS 解決:DNS プロバイダーが提供する DNS サービスの場合、ビジネスドメイン名と、クラウドネイティブ API Gateway インスタンスに関連付けられた SLB インスタンスの IP アドレス間のマッピングを削除します。
ステップ 5:移行を完了する
元の SLB を再利用する
この方法を選択した場合は、SLB インスタンス上のすべてのトラフィックがクラウドネイティブ API Gateway インスタンスに分散されていることを確認してください。その後、ビジネス要件に基づいて Kubernetes サービスと NGINX Ingress Controller を削除できます。
SLB への DNS 解決
この方法を選択した場合は、すべてのドメイン名が、クラウドネイティブ API Gateway インスタンスに関連付けられた SLB インスタンスの IP アドレスとして解析されていることを確認してください。その後、ビジネス要件に基づいて Kubernetes サービスと NGINX Ingress Controller を削除できます。