すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:自己管理型NGINX IngressからALB Ingressへのワークロードの移行

最終更新日:Sep 18, 2024

このトピックでは、ワークロードを自己管理型NGINX IngressからApplication Load Balancer (ALB) Ingressに移行する方法について説明します。

背景情報

ALBは、トラフィック変動の処理に理想的なIngressを提供します。 NGINX Ingressと比較して、ALB Ingressは次の利点の点でトラフィック管理を強化します。

  • 完全マネージドおよびメンテナンスフリー: ALBは、手動メンテナンスを必要としない完全マネージド型クラウドサービスです。

  • 自動スケーリング: ALBはCyberStarフレームワークの上に開発され、サービスがトラフィックの急増を処理するのに役立つ高性能な自動スケーリングをサポートします。

  • 超高機能: 各ALBインスタンスは、1秒あたり最大100万件のクエリ (QPS) と数千万件の同時接続をサポートします。 デフォルトでは、SSLハードウェアアクセラレーションが使用されます。

  • クラウドサービスとの統合: ALBは、Web Application Firewall (WAF) 、Function Compute、PrivateLink、トランジットルーター、Enterprise Distributed Application Service (EDAS) 、Serverless App Engine (SAE) 、Service Mesh (ASM) などのさまざまなクラウドサービスと連携できます。

  • 構成のホットアップデート: 構成のホットアップデートでは、永続的な接続が影響を受けないようにするためのプロセスの再読み込みは必要ありません。

サンプルシナリオ

次のシナリオは一例です。 ある会社が、中国 (杭州) リージョンにインターネット向けのClassic Load Balancer (CLB) インスタンスを作成しました。 同社はNGINX Ingressコントローラーを使用して、リダイレクトルール、ドメインベースの転送ルール、URLベースの転送ルールなどのIngress転送ルールを設定しました。 CLBインスタンスは、ドメイン名を通じてインターネット接続サービスを提供します。 リクエストがドメイン名www.example.netに送信されると、リクエストはAレコードに基づいてCLBインスタンスにリダイレクトされます。 CLBインスタンスは、Ingressで作成された転送ルールに基づいて、サービスに関連付けられたポッドにリクエストを転送します。迁移前

事業開発のため、NGINX IngressをALB Ingressに移行する必要があります。 サービスの安定性を確保するために、サービスの提供に使用されるドメイン名やバックエンドサーバーのIPアドレスを変更する必要はありません。 この要件を満たすために、同社はALB IngressコントローラーをContainer Service for Kubernetes (ACK) またはACKサーバーレスクラスターにインストールできます。 次に、ALB IngressとNGINX Ingressが同じ転送ルールを使用することを保証するために、会社はコントローラ上でIngressルールを作成し、重み付きDNSレコードを設定できます。 これにより、会社はNGINX IngressをALB Ingressに移行できます。迁移后

使用上の注意

手順

迁移步骤

ステップ1: ALB Ingressの作成

  1. ACKコンソールにログインし、ALB Ingressコントローラーをインストールします。 詳細については、「ALB Ingressコントローラーの管理」をご参照ください。

    説明
    • 移行するNGINX IngressのACKまたはACK ServerlessクラスターにALB Ingressコントローラーをインストールする必要があります。

    • ALB IngressからACK専用クラスターへのアクセスを許可するには、サービスをデプロイする前にALB Ingressコントローラーにアクセス権限を付与します。 詳細については、「ACK専用クラスターにALB Ingressコントローラーへのアクセスを許可する」をご参照ください。

  2. kubectlクライアントを使用して、NGINX IngressがデプロイされているACKクラスターまたはACKサーバーレスクラスターにログインし、AlbConfigを作成します。

    説明

    ALB Ingressコントローラーを作成するときに、Gateway SourceNewまたはExistingに設定すると、コントローラーは自動的にalbという名前のAlbConfigとalbという名前のIngressClassを作成します。 この場合、この手順をスキップできます。

    1. albconfig.yamlという名前のファイルを作成し、次の内容をファイルにコピーします。

      apiVersion: alibabacloud.com/v1
      kind: AlbConfig
      metadata:
        name: alb-demo
      spec:
        config:
          name: alb-test
          addressType: Internet
          zoneMappings:
          - vSwitchId: vsw-wz9e2usil7e5an1xi****
          - vSwitchId: vsw-wz92lvykqj1siwvif****
        listeners:
          - port: 80
            protocol: HTTP

      zoneMappings: ALB Ingressによって使用されるvSwitchのID。 異なるゾーンに属するvSwitchを少なくとも2つ指定する必要があります。 指定するvSwitchは、クラスターと同じ仮想プライベートクラウド (VPC) に属している必要があります。

      説明

      移行するNGINX IngressがIPv6をサポートしている場合は、AlbConfigの設定でaddressIpVersionをDualStackに設定できます。詳細については、「AlbConfigsを使用したALBインスタンスの設定」をご参照ください。

    2. 次のコマンドを実行して、AlbConfigを作成します。

      kubectl apply -f albconfig.yaml
    3. 次のコマンドを実行して、ALBインスタンスが作成されているかどうかを確認します。

      kubectl get albconfig

      期待される出力:

      NAME       ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
      alb-demo   alb-a8mmh2tqbmrm11****   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com                            27s
  3. IngressClassを作成します。

    説明

    ALB Ingressコントローラーを作成するときに、Gateway SourceNewまたはExistingに設定すると、コントローラーは自動的にalbという名前のAlbConfigとalbという名前のIngressClassを作成します。 この場合、この手順をスキップできます。

    1. ingressclass.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

      apiVersion: networking.k8s.io/v1
      kind: IngressClass
      metadata:
        name: alb
      spec:
        controller: ingress.k8s.alibabacloud/alb
        parameters:
          apiGroup: alibabacloud.com
          kind: AlbConfig
          name: alb-demo

      parameters.name: 使用するAlbConfigの名前。

    2. 次のコマンドを実行してIngressClassを作成します。

      kubectl apply -f ingressclass.yaml
  4. ALB Ingressを作成します。

    重要

    NGINX Ingressで高度な転送ルールが設定されている場合、ALB Ingressの高度な機能を有効にして、異なるドメイン名またはURL宛てのリクエストを異なるバックエンドサーバーに転送し、リクエストをHTTPからHTTPSにリダイレクトし、カナリアリリースを実行できます。 詳細については、「ALB Ingressの高度な機能」をご参照ください。

    1. albingress.yamlという名前のファイルを作成し、次のコンテンツをファイルにコピーします。

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: demo-ingress-alb
        namespace: default
      spec:
        ingressClassName: alb
        rules:
          - host: www.example.net
            http:
              paths:
                - backend:
                    service:
                      name: nginx
                      port:
                        number: 80
                  path: /
                  pathType: Prefix

      • name: Ingressの名前。 同じ名前空間では、ALB Ingressの名前はNGINX Ingressの名前と異なる必要があります。

      • ingressClassName: 使用するIngressClassの名前。

    2. 次のコマンドを実行して、ALB Ingressを作成します。

      kubectl apply -f albingress.yaml
    3. 次のコマンドを実行して、ALB Ingressリソースを照会します。

      kubectl get ing

      期待される出力:

      NAME                CLASS   HOSTS              ADDRESS                                               PORTS   AGE
      demo-ingress-alb   alb     www.example.net   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com   80      10m     46s

      出力には、ALB Ingressのエンドポイントが含まれます。 例: alb-a8mmh2tqbmrm11 **** .cn-hangzhou.alb.aliyuncs.com。

    4. 次のコマンドを実行して、ALB Ingressからバックエンドサービスにアクセスし、トラフィック量をテストします。

      curl -H "Host:  www.example.net" http://alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com

      期待される出力が返された場合、ALB Ingressはバックエンドサービスにアクセスできます。

ステップ2: ネットワークトラフィックをALB Ingressに切り替える

警告
  • ネットワークトラフィックをALB Ingressに切り替える前に、NGINX Ingressによって生成された転送ルールとALB Ingressによって生成された転送ルールを比較して、転送ルールが同じであることを確認してください。 問題が発生した場合は、すべての構成をテストする必要があります。

  • オフピーク時にネットワークトラフィックを切り替えることを推奨します。

トラフィックを切り替える前に、CLBインスタンスにAレコードを設定する必要があります。 Aレコードは、サービスドメイン名をCLBインスタンスのIPアドレスにマッピングします。现状2

ALB Ingressコントローラーをインストールした後、ALB IngressのNGINX Ingressと同じ転送ルールを設定し、すべての設定をテストすると、ネットワークトラフィックをALB Ingressに切り替えることができます。 Alibaba Cloud DNSは、ネットワークトラフィックを切り替える方法を示す例として使用されます。 次の手順は、ネットワークトラフィックをALBインスタンスに切り替える方法を示しています。 Alibaba Cloud DNSの詳細については、「パブリック権限DNS解決」をご参照ください。迁移步骤2

ステップ1. CLBインスタンスの一時ドメイン名の設定

ALBインスタンスにCNAMEレコードを追加することを推奨します。 重み付きDNSレコードを設定するための条件を満たすには、一時ドメイン名にCNAMEレコードを追加し、一時ドメイン名をCLBインスタンスのIPアドレスに指定する必要があります。

説明

同じドメイン名の異なるDNSレコードに重みを設定するには、DNSレコードが同じタイプで、同じホスト名とISP回線を持つ必要があります。 サポートされるタイプは、A、CNAME、およびAAAAです。

  1. Alibaba Cloud DNSコンソール にログインします。

  2. [ドメイン名解決] ページで、ドメイン名www.example.netを見つけてクリックします。 ドメイン名はCLBインスタンスを指します。

  3. [DNS設定] ページで、[DNSレコードの追加] をクリックします。 [DNSレコードの追加] パネルで、次のパラメーターを設定し、[OK] をクリックします。

    パラメーター

    説明

    レコードタイプ

    ドロップダウンリストから [CNAME] を選択します。

    ホスト名

    ドメイン名のプレフィックスを入力します。 この例では、wwwが入力されます。

    DNSリクエストソース

    [デフォルト] を選択します。

    レコード値

    一時ドメイン名を入力します。 この例では、web0.example.netが入力されます。

    TTL

    DNSサーバーにキャッシュされているCNAMEレコードの有効期限 (TTL) 値を指定します。 この例では、TTLは5秒に設定されています。

    この例では、Alibaba Cloud DNS Enterprise Ultimate Editionが使用されています。 TTLは5秒に設定される。 ビジネス要件に基づいてTTL値を指定できます。 詳細については、「エディション」をご参照ください。

  4. DNS設定タブのIPアドレスを指すAレコードを検索します。CLBインスタンスをクリックし、変更[アクション] 列に表示されます。

  5. [DNSレコードの変更] パネルで、[ホスト名] パラメーターを変更し、[OK] をクリックします。 この例では、Hostnameパラメーターはweb0に設定されています。 他のパラメータは変更されない。

手順2: ALBインスタンスのCNAMEレコードの追加

  1. 次のコマンドを実行して、ALBインスタンスのドメイン名を照会します。

    kubectl get albconfig

    期待される出力:

    NAME       ALBID                    DNSNAME                                               PORT&PROTOCOL   CERTID   AGE
    alb-demo   alb-a8mmh2tqbmrm11****   alb-a8mmh2tqbmrm11****.cn-hangzhou.alb.aliyuncs.com                             27s
    説明

    ALBコンソールにログインして、ALBインスタンスのドメイン名を表示することもできます。 ALBコンソールは、ALBインスタンスの設定のみを提供します。 設定を変更するには、YAMLファイルを参照してください。

  2. CNAMEレコードを作成するには、次の手順を実行します。

    1. Alibaba Cloud DNSコンソール にログインします。

    2. DNSの管理ページをクリックします。ドメイン名の追加.

    3. ドメイン名の追加ダイアログボックスでドメイン名を入力し、OKをクリックします。

      警告
      • CLBインスタンスに関連付けられたドメイン名が追加されました。

      • CNAMEレコードを作成する前に、TXTレコードを使用してドメイン名の所有権を確認します。

    4. 管理するドメイン名を見つけて、をクリックします。DNS設定で、アクション列を作成します。

    5. DNS設定ページで、レコードの追加をクリックします。

    6. DNSレコードの追加パネルで、次のパラメータを設定し、OKをクリックします。

      パラメーター

      説明

      レコードタイプ

      ドロップダウンリストから [CNAME] を選択します。

      ホスト名

      ドメイン名のプレフィックスを入力します。 この例では、wwwが入力されます。

      DNSリクエストソース

      [デフォルト] を選択します。

      ALBインスタンスのドメイン名であるCNAMEを入力します。

      TTL

      DNSサーバーにキャッシュされるCNAMEレコードのTTL値を指定します。 この例では、TTLは5秒に設定されています。

      この例では、Alibaba Cloud DNS Enterprise Ultimate Editionが使用されています。 TTLは5秒に設定される。 ビジネス要件に基づいてTTL値を指定できます。 詳細については、「エディション」をご参照ください。

      説明
      • 新しく作成されたCNAMEレコードはすぐに有効になります。 変更されたCNAMEレコードが有効になるまでに必要な時間は、TTL値によって決まります。デフォルトでは10分です。

      • 作成するCNAMEレコードが既存のレコードと競合する場合は、別のドメイン名を指定します。

ステップ3: DNSレコードの重みを指定し、カナリアリリースを実行する

  1. [ドメイン名の解決] ページで、管理するドメイン名をクリックします。 [DNS設定] ページの左側のナビゲーションウィンドウで、[重み設定] をクリックします。

  2. On the重み付きラウンドロビンページをクリックします。重みの有効化で、アクション列をクリックし、セット重量をクリックします。

    同じドメイン名の異なるDNSレコードに重みを設定するには、DNSレコードが同じタイプで、同じホスト名とISP回線を持つ必要があります。 サポートされるタイプは、A、CNAME、およびAAAAです。

  3. [重みの設定] パネルで、CLBおよびALBインスタンスのDNSレコードの重みを設定します。 CLBインスタンスのDNSレコードの重みを100に設定します。 ALBインスタンスのDNSレコードの重みを0に設定します。

    域名权重设置

  4. CLBインスタンスのDNSレコードの重みを徐々に減らし、ALBインスタンスのDNSレコードの重みを徐々に増やします。 サービスが影響を受けないようにしてください。

  5. サービスのポッドがデプロイされているECSインスタンスにログインし、掘るコマンドを複数回実行してトラフィック量を確認します。

    dig www.example.net

    次の図に出力を示します。 結果は、ネットワークトラフィックがDNSレコードの重みに基づいてALBまたはCLBインスタンスに分散されていることを示しています。流量测试1流量测试2

  6. CLB DNSレコードの重みを0に徐々に減らし、ALB DNSレコードを100に徐々に増やします。

DNSサービスプロバイダーが加重CNAMEレコードをサポートしていない場合は、をクリックしてトラフィック切り替えソリューションを表示します。

临时流量切换方案

ステップ3: 冗長リソースの削除

NGINX Ingress上のすべての永続接続を閉じ、トラフィックがNGINX Ingressに転送されない場合、監視期間後に冗長リソースを解放できます。

  1. NGINX Ingressを削除します。

    1. ACKコンソールにログインします。 [クラスター] ページで、リリースするACKまたはACK ServerlessクラスターのIDをクリックします。

    2. 左側のナビゲーションウィンドウで、ネットワーク > イングレスを選択します。

    3. [Ingress] ページの上部で、名前空間を選択します。 削除するNGINX Ingressを見つけ、[操作] 列で image /> [削除] を選択します。

    4. 表示されるメッセージで、[OK] をクリックします。

  2. Nginx Ingressコントローラをアンインストールします。

    1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[操作] > [アドオン] を選択します。

    3. On theアドオンページをクリックし、ネットワーキングタブを検索し、Nginx Ingressコントローラカードをクリックし、アンインストール.

    4. 表示されるメッセージで、[OK] をクリックします。

関連ドキュメント