外部パススルー ネットワーク ロードバランサをターゲット プールからバックエンド サービスに移行する

このガイドでは、既存の外部パススルー ネットワーク ロードバランサをターゲット プール バックエンドからリージョン バックエンド サービスに移行する手順について説明します。

リージョン バックエンド サービスに移行すれば、非レガシー ヘルスチェック(TCP、SSL、HTTP、HTTPS、HTTP/2 向け)、マネージド インスタンス グループ、コネクション ドレインフェイルオーバー ポリシーなどの機能を利用できます。


このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


このガイドでは、次のサンプル ターゲット プールベースの外部パススルー ネットワーク ロードバランサを移行して、代わりにリージョン バックエンド サービスを使用する手順について説明します。

移行前: ターゲット プールを使用した外部パススルー ネットワーク ロードバランサ
移行前: ターゲット プールを使用した外部パススルー ネットワーク ロードバランサ

バックエンド サービスベースの外部パススルー ネットワーク ロードバランサをデプロイした結果は次のようになります。

移行後: リージョン バックエンド サービスを使用した外部パススルー ネットワーク ロードバランサ
移行後: リージョン バックエンド サービスを使用した外部パススルー ネットワーク ロードバランサ

この例では、従来のターゲット プールベースの外部パススルー ネットワーク ロードバランサを使用し、ゾーン us-central-1a とゾーン us-central-1c にそれぞれ 2 つのインスタンスがあることを前提としています。

このような移行に必要な大まかな手順は次のとおりです。

  1. ターゲット プール インスタンスをインスタンス グループにグループ化します。

    バックエンド サービスは、マネージド インスタンス グループまたは非マネージド インスタンス グループでのみ動作します。1 つのターゲット プールに配置できるインスタンスの数に上限はありませんが、インスタンス グループには最大サイズがあります。ターゲット プールのインスタンスがこの最大数を超えている場合は、複数のインスタンス グループにバックエンドを分割する必要があります。

    既存のデプロイにバックアップ ターゲット プールが含まれている場合は、それらのインスタンスに別々のインスタンス グループを作成します。このインスタンス グループは、フェイルオーバー グループとして構成されます。

  2. リージョン バックエンド サービスを作成します。

    バックアップ ターゲット プールがデプロイに含まれている場合、バックエンド サービスを作成するとともにフェイルオーバー率を指定する必要があります。これは、以前ターゲット プールのデプロイ用に構成したフェイルオーバー率と一致する必要があります。

  3. バックエンド サービスにインスタンス グループ(事前に作成したもの)を追加します。

    デプロイにバックアップ ターゲット プールが含まれている場合は、バックエンド サービスに追加する際に、対応するフェイルオーバー インスタンス グループに --failover フラグを設定します。

  4. 新しいバックエンド サービスを参照する転送ルールを構成します。

    次のいずれかの方法を選択できます。

    • バックエンド サービスを参照するように既存の転送ルールを更新します(推奨)。

    • バックエンド サービスを参照する新しい転送ルールを作成します。この場合、ロードバランサのフロントエンドに新しい IP アドレスを作成する必要があります。次に、DNS 設定を変更して、以前のターゲット プールベースのロードバランサの IP アドレスを新しい IP アドレスにシームレスに移行します。

始める前に

Google Cloud CLI をインストールします。ツールの完全な概要については、gcloud ツールガイドをご覧ください。ロード バランシングに関連するコマンドは、gcloud compute コマンド グループにあります。

これまで Google Cloud CLI を実行したことがない場合は、最初に gcloud init を実行して認証します。

このガイドは、bash の知識があることを前提としています。

移行するバックエンドと転送ルールを特定する

  1. すべてのターゲット プールを一覧表示するには、Cloud Shell で次のコマンドを実行します。

    gcloud compute target-pools list
    

    移行元のターゲット プールの名前をメモします。この名前は後で TARGET_POOL_NAME として参照されます。

  2. ターゲット プール TARGET_POOL_NAME 内のすべての VM インスタンスを一覧表示するには、Cloud Shell で次のコマンドを実行します。

    gcloud compute target-pools describe TARGET_POOL_NAME \
      --region=us-central1
    

    VM インスタンスの名前をメモします。これらの名前は、後で BACKEND_INSTANCE1BACKEND_INSTANCE2BACKEND_INSTANCE3BACKEND_INSTANCE4 として参照されます。

  3. 外部パススルー ネットワーク ロードバランサの転送ルールを一覧表示するには、Cloud Shell で次のコマンドを実行します。

    gcloud compute forwarding-rules list
      --filter="target: ( TARGET_POOL_NAME )"
    

    転送ルールの名前をメモします。この名前は後で FORWARDING_RULE として参照されます。

ゾーン非マネージド インスタンス グループの作成

バックエンドのあるゾーンごとにゾーン非マネージド インスタンス グループを作成します。設定によっては、必要に応じて複数のインスタンス グループにインスタンスを分割できます。たとえば、2 つのインスタンス グループ(ゾーンごとに 1 つ)を使用し、関連付けられたインスタンス グループの特定のゾーンにすべてのバックエンド VM を配置します。

この例では、2 つのインスタンス グループ(uc-central1-a ゾーンと us-central1-c ゾーンに 1 つずつ)を作成します。

インスタンス グループを設定する

コンソール

  1. Google Cloud コンソールで、[インスタンス グループ] ページに移動します。

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックします。
  3. 左側のペインで [新しい非マネージド インスタンス グループ] を選択します。
  4. [名前] に「ig-us-1」と入力します。
  5. [リージョン] で、us-central1 を選択します。
  6. [ゾーン] で、[us-central1-a] を選択します。
  7. インスタンスを配置する場所に応じて、ネットワークサブネットワークを選択します。この例の場合、既存のターゲット プール インスタンスは default ネットワークとサブネットワークにあります。
  8. インスタンス グループにインスタンスを追加するには、[VM インスタンス] セクションで、2 つのインスタンス BACKEND_INSTANCE1BACKEND_INSTANCE2 を選択します。
  9. [作成] をクリックします。
  10. これらの手順を繰り返して、次の仕様で 2 つ目のインスタンス グループを作成します。

    • 名前: ig-us-2
    • リージョン: us-central1
    • ゾーン: us-central1-c

    us-central1-c ゾーンの 2 つのインスタンス BACKEND_INSTANCE3BACKEND_INSTANCE4 をこのインスタンス グループに追加します。

  11. 既存のロードバランサのデプロイにバックアップ ターゲット プールもある場合は、以上の手順を繰り返して、これらのインスタンスに別々のフェイルオーバー インスタンス グループを作成します。

gcloud

  1. gcloud compute instance-groups unmanaged create コマンドを使用して、us-central1-a ゾーンに非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-us-1 \
        --zone us-central1-a
    
  2. us-central1-c ゾーンに 2 つ目の非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-us-2 \
        --zone us-central1-c
    
  3. ig-us-1 インスタンス グループにインスタンスを追加します。

    gcloud compute instance-groups unmanaged add-instances ig-us-1 \
        --instances BACKEND_INSTANCE_1,BACKEND_INSTANCE_2 \
        --zone us-central1-a
    
  4. ig-us-2 インスタンス グループにインスタンスを追加します。

    gcloud compute instance-groups unmanaged add-instances ig-us-2 \
        --instances BACKEND_INSTANCE_3,BACKEND_INSTANCE_4 \
        --zone us-central1-c
    
  5. 既存のロードバランサのデプロイにバックアップ ターゲット プールもある場合は、以上の手順を繰り返して、これらのインスタンスに別々のフェイルオーバー インスタンス グループを作成します。

ヘルスチェックの作成

インスタンス グループ内のインスタンスの状態を判断するためのヘルスチェックを作成します。既存のターゲット プールベースの外部パススルー ネットワーク ロードバランサには、従来の HTTP ヘルスチェックが関連付けられている可能性があります。

ロードバランサが配信するトラフィックのプロトコルに一致する新しいヘルスチェックを作成できます。バックエンド サービスベースの外部パススルー ネットワーク ロードバランサは、TCP、SSL、HTTP(S)、HTTP/2 ヘルスチェックを使用できます。

コンソール

  1. Google Cloud コンソールで、[ヘルスチェック] ページに移動します。

    [ヘルスチェック] に移動

  2. [ヘルスチェックを作成] をクリックします。
  3. [名前] フィールドに「network-lb-health-check」と入力します。
  4. [スコープ] を [リージョン] に設定します。
  5. [リージョン] で、us-central1 を選択します。
  6. [プロトコル] で [HTTP] を選択します。
  7. [ポート] に「80」と入力します。
  8. [作成] をクリックします。

gcloud

  1. この例では、バックエンド サービスで使用する非レガシー HTTP ヘルスチェックを作成します。

    gcloud compute health-checks create http network-lb-health-check \
    --region us-central1 \
    --port 80
    

バックエンド サービスの構成

次のいずれかのセクションを使用して、バックエンド サービスを作成します。既存の外部パススルー ネットワーク ロードバランサにバックアップ ターゲット プールがある場合は、バックエンド サービスを作成するとともにフェイルオーバー率を構成する必要があります。

また、バックエンド サービスにバックエンドを追加する場合、フェイルオーバー インスタンス グループに --failover フラグを指定する必要があります。

バックアップ ターゲット プールのないデプロイ

gcloud

  1. us-central1 リージョンにリージョン バックエンド サービスを作成します。

    gcloud compute backend-services create network-lb-backend-service \
       --region us-central1 \
       --health-checks network-lb-health-check \
       --health-checks-region us-central1 \
       --protocol TCP
    
  2. バックエンド サービスに、2 つのインスタンス グループ(ig-us-1ig-us-2)をバックエンドとして追加します。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-1 \
       --instance-group-zone us-central1-a \
       --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-2 \
       --instance-group-zone us-central1-c \
       --region us-central1
    

バックアップ ターゲット プールのあるデプロイ

gcloud

  1. us-central1 リージョンにリージョン バックエンド サービスを作成します。バックエンド サービスのフェイルオーバー率を、ターゲット プールに構成したフェイルオーバー率に合わせて構成します。

    gcloud compute backend-services create network-lb-backend-service \
       --region us-central1 \
       --health-check network-lb-health-check \
       --failover-ratio 0.5
    
  2. バックエンド サービスに、2 つのインスタンス グループ(ig-us-1ig-us-2)をバックエンドとして追加します。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-1 \
       --instance-group-zone us-central1-a \
       --region us-central1
    
    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group ig-us-2 \
       --instance-group-zone us-central1-c \
       --region us-central1
    
  3. フェイルオーバー インスタンス グループを作成した場合は、それをバックエンド サービスに追加します。バックエンド サービスに追加するときに、このバックエンドを --failover フラグに指定します。

    gcloud compute backend-services add-backend network-lb-backend-service \
       --instance-group FAILOVER_INSTANCE_GROUP \
       --instance-group-zone ZONE \
       --region us-central1 \
       --failover
    

転送ルールの構成

トラフィックを新しいバックエンド サービスに送信するように転送ルールを構成する方法は 2 つあります。既存の転送ルールを更新する方法か、新しい IP アドレスで新しい転送ルールを作成する方法です。

set-target フラグを使用して、新しいバックエンド サービスを参照するように既存の転送ルールを更新します。

gcloud compute forwarding-rules set-target FORWARDING_RULE  \
    --backend-service network-lb-backend-service \
    --region us-central1

FORWARDING_RULE は、既存の転送ルールの名前に置き換えます。

新しい転送ルールを作成する

既存の転送ルールを更新しない場合は、新しい IP アドレスで新しい転送ルールを作成できます。特定の IP アドレスは一度に複数の転送ルールに関連付けることはできません。このため、受信トラフィックが古い IP アドレスではなく、新しい IP アドレスに送信されるように、DNS 設定を手動で変更する必要があります。

次のコマンドを使用して、新しい IP アドレスを持つ新しい転送ルールを作成します。us-central1 リージョンですでに予約されている IP アドレスを指定する場合は、--address フラグを使用します。

gcloud compute forwarding-rules create network-lb-forwarding-rule \
    --load-balancing-scheme external \
    --region us-central1 \
    --ports 80 \
    --backend-service network-lb-backend-service

ロードバランサをテストする

ロードバランサをテストして、転送ルールが期待どおりの受信トラフィックを配信していることを確認します。

ロードバランサの外部 IP アドレスを調べる

gcloud

次のコマンドを入力して、ロードバランサが使用する network-lb-forwarding-rule 転送ルールの外部 IP アドレスを表示します。

gcloud compute forwarding-rules describe network-lb-forwarding-rule
    --region us-central1

nc コマンドを使用して外部 IP アドレスにアクセスする

この例では、セッション アフィニティにデフォルトのハッシュ処理を使用しているため、nc コマンドからのリクエストは、オペレーティング システムによって割り当てられた送信元ポートに基づいてバックエンド VM にランダムに分散されます。

  1. 接続をテストするには、まず次のコマンドを実行して Linux に Netcat をインストールします。

    $ sudo apt install netcat
    
  2. すべてのバックエンド VM が応答するまで、次のコマンドを数回繰り返します。

    $ nc IP_ADDRESS 80
    

古いロードバランサに関連付けられたリソースを削除する

新しい外部パススルー ネットワーク ロードバランサが想定どおりに動作していることを確認したら、古いターゲット プール リソースを削除できます。

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. ターゲット プールに関連付けられた古いロードバランサを選択し、[削除] をクリックします。
  3. 作成したヘルスチェックを選択し、[ロードバランサと選択したリソースを削除] をクリックします。

次のステップ