NGINX Ingress のサポート終了に伴い、ユーザーは新しいゲートウェイソリューションへの移行が必要です。Cloud-native API Gateway は、トラフィック管理、マイクロサービス、セキュリティ機能を統合した統一ゲートウェイプロダクトであり、NGINX Ingress ユーザー向けにスムーズな移行パスと強化された機能を提供します。本トピックでは、UI ベースの移行ツールを使用して、セルフマネージド NGINX Ingress から Cloud-native API Gateway へ移行する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) クラスターに NGINX Ingress Controller をデプロイ済みです。
Cloud-native API Gateway インスタンスを作成済みである必要があります。まだ作成していない場合は、「ゲートウェイインスタンスの作成」をご参照ください。
注意事項
この移行プロセスでは、Ingress 構成をコピーしません。代わりに、Cloud-native API Gateway は既存の Ingress リソースをリアルタイムで変更を解析し、再利用します。
移行中、Ingress 構成に対するすべての変更は、NGINX Ingress Controller と Cloud-native API Gateway の両方に反映されます。
移行完了後も、本番環境の Ingress 構成を削除しないでください。移行により、Cloud-native API Gateway が既存および今後の Ingress 構成を解析できるようになるだけです。
移行後も、既存および今後の Ingress 構成は、Cloud-native API Gateway が監視対象として設定している IngressClass に関連付けられたままにしておく必要があります。たとえば、Ingress 仕様の ingressClassName が nginx/higress/apig であった場合、移行後も既存および新規の Ingress 構成で nginx/higress/apig のままにしておく必要があります。
移行手順
Cloud-native API Gateway の「Migrate to Cloud」ツールを使用すると、ルート構成の移行および最終的なトラフィックスイッチングをガイド付きで実施できます。
開発者が移行プロセスを迅速化できるように、NGINX Ingress から Cloud-native API Gateway への移行専用の公式 AI スキル「alibabacloud-nginx-ingress-to-api-gateway」を提供しています。このスキルを使用すると、Ingress の互換性に関するバッチ事前チェックを実行できます。互換性のない NGINX Ingress アノテーションについては、自動的に代替となる Wasm プラグインおよび同等のルーティング効果を実現する新しい Ingress ルート構成を生成し、完全なランブックを作成します。
ステップ 1:ルーティングルールの移行
API Gateway コンソール にログインします。
左側のナビゲーションウィンドウで、Cloud Migration を選択します。
Cloud Migration ページで、タスクの作成 をクリックします。
Create Migration Configuration パネルで、パラメーターを設定します。
Cloud-native API Gateway は、選択したコンテナクラスター内で指定されたソース IngressClass に関連付けられたすべての Ingress リソースを自動的に監視し、これらの Ingress リソースからドメイン名およびルート構成を適用します。
重要対象の Cloud-native API Gateway がすでにこのコンテナクラスターに関連付けられているものの、そのクラスターで設定されている IngressClass がここで指定するものと異なる場合、移行は失敗します。ここで設定する IngressClass が、関連付け済みクラスターで既に設定されているものと一致することを確認してください。
パラメーター
説明
Instance
移行先のゲートウェイインスタンスを指定します。
Source Cluster
移行対象の NGINX Ingress をホストするコンテナクラスターを選択します。Cloud-native API Gateway とコンテナクラスターが同一の Virtual Private Cloud (VPC) 内にあることを確認してください。
API Name
インポートされた NGINX Ingress ルートを受信する Cloud-native API Gateway 内の HTTP API の名前です。
resource
移行先のリソースグループを選択します。
Namespace
移行対象の Ingress リソースの名前空間を指定します。
IngressClass
移行対象の Ingress リソースに関連付けられた IngressClass を指定します。
説明IngressClass は 1 つのみ指定可能です。
このパラメーターを空欄にした場合、ゲートウェイは IngressClass を無視し、クラスター内のすべての Ingress リソースを監視します。
次へ をクリックします。
この時点で、Cloud-native API Gateway は選択したコンテナクラスター内でソース IngressClass に関連付けられたすべての Ingress リソースの自動監視を開始し、これらの Ingress リソースから取得したドメイン名およびルート構成を新しく作成された API に適用します。
たとえば、ソースコンテナクラスター内に nginx-route という名前の Ingress リソースがあると仮定します。
Cloud-native API Gateway コンソール上では、ゲートウェイがソースクラスターから Ingress を自動同期し、対応するドメイン名およびルート構成を作成したことが確認できます。
ステップ 2:ルートの検証
検出された Ingress リソースの互換性を検証します。
互換性のない Ingress アノテーションが見つからない場合は、次のステップに進んでください。
互換性のない Ingress アノテーションが存在する場合は、まず HiClaw、CoPaw、または QoderWork などの AI ツールと公式移行スキル「alibabacloud-nginx-ingress-to-api-gateway」をご利用ください。このスキルは Ingress 構成を分析し、互換性のないアノテーションを置き換えるための Wasm プラグインを自動生成し、完全なランブックを作成します。引き続きご不明点がある場合は、チケットを送信してソリューションをご依頼ください。
重要アノテーション
nginx.ingress.kubernetes.io/service-weightの値が空文字列 ("") の場合は、無視しても問題ありません。このアノテーションは旧バージョンの ACK コンソールでデフォルトで追加されており、機能上の効果はありません。移行中は、稼働中の Ingress 構成から互換性のないアノテーションを削除しないでください。これらのアノテーションは依然として NGINX Ingress Controller によって解析され、本番トラフィックに影響を与えています。
ステップ 3:トラフィックスイッチング方法の選択
トラフィックスイッチング前のテスト
本番トラフィックを切り替える前に、ローカルでのテストを実施することを推奨します。ローカルの hosts ファイルを編集して、サービスのドメイン名を Cloud-native API Gateway の Server Load Balancer (SLB) の IP アドレスに解決するように設定します。curl や Postman などのツールを使用して、すべてのトラフィックが正しくルーティングされることを確認してください。
トラフィックスイッチング方法の選択
元の SLB の再利用
この方法では、元の Server Load Balancer (SLB) インスタンスのバックエンド vServer グループに Cloud-native API Gateway ノードを追加します。移行中、SLB は設定された重みに基づいて Cloud-native API Gateway にトラフィックを分散します。移行完了後、SLB はすべてのトラフィックを Cloud-native API Gateway に転送します。
以下の表にパラメーターを示します。
パラメーター | 説明 |
ACK Cluster Namespace | NGINX Ingress SLB に関連付けられた Kubernetes サービスが配置されている名前空間を選択します。 |
ACK Cluster SLB Service | NGINX Ingress SLB に関連付けられた Kubernetes サービスの名前を選択します。 |
SLB ID | 照会された SLB をクリックして、移行対象の SLB であることを確認します。 |
Ports and Backend Servers | 元のクラスターの SLB インスタンスのリスナーポートおよびゲートウェイプロトコル (HTTP/HTTPS) を選択します。対象の vServer グループは自動的に表示されます。 説明 トラフィック損失を回避するため、正しいポートとプロトコルを選択してください。 |
DNS によるトラフィックスイッチング
DNS プロバイダーのコンソールにアクセスし、移行対象のすべてのドメイン名に対して Cloud-native API Gateway の SLB アドレスへのマッピングを追加します。トラフィックを徐々に切り替えるために、重み付き DNS レコードの使用を推奨します。
ステップ 4:トラフィックの切り替え
元の SLB の再利用
ステップ 1:SLB の変更をクリック
[SLB の変更] をクリックすると、システムが自動的に SLB をコンテナサービス管理からデタッチし、リスナーのスケジューリングアルゴリズムを重み付きラウンドロビンに変更します。
このステップにより、SLB がコンテナサービス管理からデタッチされます。デタッチ後、SLB は NGINX Ingress Controller 内の Pod IP の変更を検出できなくなります。次のステップに直ちに進み、アノテーションを変更して Kubernetes サービスを再度 SLB に関連付ける必要があります。
ステップ 2:サービスアノテーションの上書き
ステップ 1 完了後、ACK コンソール にアクセスします。元の SLB の再利用 ステップで選択した Kubernetes サービスから、現在のすべてのアノテーションを手動で削除します。その後、トラフィックスイッチング ページで自動生成されたアノテーションをコピーし、対象の Kubernetes サービスに追加します。この操作により、元の Kubernetes サービスが SLB を再利用するように再構成されます。変更後、事前チェック をクリックします。チェックが成功すれば、次のステップに進むことができます。
ステップ 3:重みによるトラフィックの切り替え
Cloud-native API Gateway インスタンスのトラフィック重みを設定します。ビジネス要件に基づき、1 ~ 100 の範囲で値を設定してください。初期重みは 1 ~ 10 の範囲を推奨します。
この値は、すべての Cloud-native API Gateway ノードの合計重みを表します。SLB は、vServer グループ内の Cloud-native API Gateway ノードと NGINX Ingress ノードの重み比率に基づいてトラフィックを分散します。NGINX Ingress ノードのデフォルト合計重みは 100 です。したがって、Cloud-native API Gateway の重みを 100 に設定すると、トラフィックの半分 (1/2) を受信します。同様に、重みを 50 に設定すると、トラフィックの 1/3 を受信します。
移行中は、Cloud-native API Gateway が提供するモニタリングダッシュボードを使用して、さまざまなゲートウェイメトリックを監視します。ゲートウェイの健全性を継続的に確認し、ビジネスメトリックが期待どおりであることを保証してください。
メトリックが期待どおりであれば、徐々に重みを増加させることができます。構成は非同期で適用されるため、重み変更の間には少なくとも 3 分の間隔を空けてください。
メトリックが期待どおりでない場合は、重みを 0 に設定して移行を終了してください。
ACK コンソール上でも、元の SLB の再利用 ステップで選択した Kubernetes サービスのアノテーション
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weightの値を下げることで、間接的に Cloud-native API Gateway の重みを増加させることができます。具体的には、このアノテーションの値を 0 に設定すると、すべてのトラフィックが Cloud-native API Gateway に転送されます。SLB はレイヤー 4 のロードバランサーであり、接続レベルでトラフィックを制御します。したがって、重み値ではリクエストレベルでの正確なディストリビューション比率を制御できません。
トラフィック切り替え後に成功率が低下した場合は、重みを 0 に設定してクイックロールバックを実行できます。
NGINX Ingress と Cloud-native API Gateway 間のトラフィック重みをいつでも調整可能な移行状態を維持したい場合は、このステップに留まることを推奨します。トラフィックが期待どおりに流れており、NGINX Ingress への全トラフィックロールバック機能が不要になったと確認できた場合は、トラフィック検証の完了 をクリックして先に進んでください。
[トラフィック検証の完了] をクリックすると、重みを変更できなくなります。
ステップ 4:すべてのトラフィックを切り替え
ACK コンソール上で、ステップ 3:トラフィックスイッチング方法の選択 で選択した Kubernetes サービスのアノテーション service.beta.kubernetes.io/alibaba-cloud-loadbalancer-weight を 0 に設定するか、単に Service リソースを削除します。これにより、システムが自動的に NGINX Ingress Controller ノードを SLB から削除し、すべての SLB トラフィックを Cloud-native API Gateway に切り替えます。Complete Migration をクリックして、移行タスクを終了します。
DNS によるトラフィックスイッチング
DNS プロバイダーのコンソールにアクセスし、移行対象のすべてのドメイン名に対して Cloud-native API Gateway の SLB アドレスへのマッピングを追加します。トラフィックを徐々に切り替えるために、重み付き DNS レコードの使用を推奨します。
クイックロールバック
移行中にルーティングの問題が発生した場合は、以下のいずれかの方法でトラフィックを NGINX Ingress Controller にクイックロールバックできます。
「元の SLB の再利用」方式を使用している場合は、重みを 0 に設定します。これにより、移行が停止します。
DNS 解決によるトラフィックスイッチングを行っている場合は、DNS プロバイダーのコンソールで、ビジネスドメイン名を Cloud-native API Gateway の SLB アドレスにポイントする DNS レコードを削除します。
ステップ 5:移行の完了
元の SLB の再利用
SLB トラフィックスイッチング方式の場合、完全に切り替えていない他の SLB がある場合は、それらのトラフィックスイッチングを完了させてください。すべての SLB のトラフィックスイッチングが完了したら、不要な場合は Kubernetes サービスおよび NGINX Ingress Controller を削除できます。
DNS によるトラフィックスイッチング
DNS トラフィックスイッチング方式の場合、すべてのビジネスドメイン名が Cloud-native API Gateway の SLB の IP アドレスに解決されることを確認したら、不要な場合は Kubernetes サービスおよび NGINX Ingress Controller を削除できます。