バックエンド サービスを使用したネットワーク ロードバランサの設定

このガイドでは、リージョン バックエンド サービスを使用して基本的なネットワーク負荷分散のデプロイを作成する手順を説明します。この例では、ロードバランサを使用して、us-central1 リージョンの 2 つのゾーン マネージド インスタンス グループ内のバックエンド VM にトラフィックを分散させます。同様に有効な方法として、単一のリージョン マネージド インスタンス グループを us-central1 リージョンに使用することもできます。

ゾーン インスタンス グループを使用したネットワーク ロードバランサ
ゾーン インスタンス グループを使用したネットワーク負荷分散

このシナリオでは、正常に動作しているインスタンスに TCP トラフィックを分散します。この例をサポートするために、TCP ヘルスチェックは、正常なインスタンスにのみトラフィックが送信されるように構成されています。TCP ヘルスチェックは、バックエンド サービスベースのロードバランサでのみサポートされています。ターゲット プールベースのロードバランサは、レガシー HTTP ヘルスチェックのみを使用できます。

この例では、TCP トラフィックの負荷分散を行いますが、ネットワーク負荷分散を使用して UDP、SSL、HTTP(S) のトラフィックを負荷分散できます。始める前に、ネットワーク負荷分散の概要をご覧ください。

ネットワーク ロードバランサはリージョン ロードバランサです。すべてのロードバランサ コンポーネント(バックエンド VM、バックエンド サービス、転送ルール)は同じリージョン内に存在している必要があります。

始める前に

gcloud コマンドライン ツールをインストールします。ツールの完全な概要については、gcloud ツールガイドをご覧ください。負荷分散に関連するコマンドについては、API と gcloud のリファレンス ガイドをご覧ください。

gcloud コマンドライン ツールをまだ実行していない場合は、最初に gcloud init を実行して認証します。

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

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

この負荷分散のシナリオでは、2 つの Compute Engine ゾーン マネージド インスタンス グループを作成し、各インスタンスに echo サーバーをインストールします。

ネットワーク ロードバランサのバックエンド VM として参加するインスタンスでは、適切な Linux ゲスト環境Windows ゲスト環境、または同等の機能を提供する他のプロセスが実行されている必要があります。

インスタンスの設定

Cloud Console

  1. Cloud Console の [インスタンス グループ] ページに移動します。

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

  2. [インスタンス グループを作成] をクリックします。
  3. 左側の [新しいマネージド インスタンス グループ] を選択します。
  4. [名前] に「ig-us-1」と入力します。
  5. [ロケーション] で [シングルゾーン] を選択します。
  6. [リージョン] で [us-central1] を選択します。
  7. [ゾーン] で us-central1-b を選択します。
  8. [インスタンス テンプレート] で [新しいインスタンス テンプレートを作成] を選択します。

    1. [名前] に「ig-us-template」と入力します。
    2. [ブートディスク] が Debian GNU/Linux 9 (stretch) などの Debian イメージに設定されていることを確認します。これらの手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    3. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] の [管理] タブで、次のスクリプトを [起動スクリプト] フィールドに挿入します。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://169.254.169.254/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
    4. [ネットワーク] の [タグ] フィールドに [network-lb タグ] と入力します。

    5. [保存して次へ] をクリックします。

  9. グループ内に作成するインスタンスの数を指定します。

    この例では、[自動スケーリング モード] で次の項目を選択します。

    • 自動スケーリングしない
    • [インスタンス数] に 2 を入力します。
  10. [作成] をクリックして、新しいインスタンス グループを作成します。

  11. 上記の手順を繰り返し、次の仕様で us-central1-c ゾーンに次の 2 つのマネージド インスタンス グループを作成します。

    • 名前: ig-us-2
    • ゾーン: us-central1-c
    • インスタンス テンプレート: 前のセクションで作成したものと同じ ig-us-template テンプレートを使用します。

gcloud

このガイドの gcloud の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。

  1. gcloud compute instance-templates create コマンドを使用して、HTTP サーバーで VM インスタンス テンプレートを作成します。

    gcloud compute instance-templates create ig-us-template \
    --region=us-central1 \
    --tags=network-lb \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --metadata=startup-script='#! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

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

    gcloud compute instance-groups managed create ig-us-2 \
        --zone us-central1-c \
        --size 2 \
        --template ig-us-template
    

ファイアウォール ルールの構成

外部トラフィックがバックエンド インスタンスに到達できるようにファイアウォール ルールを作成します。

Console

  1. Google Cloud Console の [ファイアウォール] ページに移動します。
    [ファイアウォール] ページに移動
  2. [ファイアウォール ルールを作成] をクリックします。
  3. [名前] に allow-network-lb と入力します。
  4. ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
  5. [ターゲット] で [指定されたターゲットタグ] を選択します。
  6. [ターゲットタグ] フィールドに「network-lb」と入力します。
  7. [ソース IP の範囲] を 0.0.0.0/0 に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。
  8. [指定したプロトコルとポート] で、[TCP] の隣にあるチェックボックスをクリックして「80」と入力します。
  9. [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。表示されない場合は、[更新] をクリックしてルールを表示してみてください。

gcloud

gcloud compute firewall-rules create allow-network-lb \
    --target-tags network-lb \
    --allow tcp:80

ロードバランサを構成する

次に、ロードバランサを設定します。

ロードバランサを構成すると、構成した静的外部 IP アドレス宛てのパケットが仮想マシン インスタンスに送信されます。Compute Engine で提供されるイメージを使用する場合は、この IP アドレスを処理するようにインスタンスが自動的に構成されます。その他のイメージを使用する場合は、このアドレスを eth0 のエイリアスまたは各インスタンスのループバックとして構成する必要があります。

Console

  1. Google Cloud Console で [ロードバランサの作成] ページに移動します。
    [ロードバランサの作成] ページに移動
  2. [TCP 負荷分散] で [構成を開始] をクリックします。

  3. [インターネット接続または内部専用] で [From Internet to my VMs] を選択します。

  4. [マルチリージョンまたはシングル リージョン] で [Single region only] を選択します。

  5. [バックエンド タイプ] で [バックエンド サービス(ベータ版)] を選択します。

  6. [続行] をクリックします。

バックエンドの構成

  1. 新しい TCP ロードバランサの画面で、新しいロードバランサの [名前] に「tcp-network-lb」と入力します。
  2. [バックエンドの構成] をクリックします。前に入力したロードバランサの名前が表示されますが、変更できません。
  3. [バックエンドの構成] をクリックして、次の変更を行います。
    1. [リージョン] で [us-central1] を選択します。
    2. [バックエンド] で、[インスタンス グループ] プルダウンを使用して [ig-us-1] を選択します。[完了] をクリックします。[バックエンドを追加] をクリックし、この手順を繰り返して ig-us-2 を追加します。
    3. [ヘルスチェック] で、[ヘルスチェックを作成] または [別のヘルスチェックを作成] を選択して、次の情報を入力します。
      • 名前: tcp-health-check
      • プロトコル: TCP
      • ポート: 80
    4. [保存して次へ] をクリックします。
    5. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. [名前] に「network-lb-forwarding-rule」を入力します。
  3. [IP] にあるプルダウン メニューをクリックして、[IP アドレスを作成] を選択します。
    1. [新しい静的 IP アドレスの予約] 画面で、名前に「network-lb-ip」と入力します。
    2. [予約] をクリックします。
  4. [単一] を選択して、ポート番号に「80」を入力します。
  5. [完了] ボタンをクリックします。

    [フロントエンドの設定] の左側にある青い丸のチェックマークが表示されていれば、設定に成功しています。

構成を確認する

  1. [確認と確定] ボタンをクリックして、ロードバランサのすべての構成設定を確認します。
  2. 設定が正しい場合は、[作成] をクリックします。ロードバランサの作成には数分かかります。

    [負荷分散] 画面で、新しいロードバランサの [バックエンド] 列に緑色のチェックマークが表示されていれば、新しく作成したロードバランサは正常な状態です。

gcloud

  1. ロードバランサに使用する静的外部 IP アドレスを作成します。

    gcloud compute addresses create network-lb-ip \
        --region us-central1
    
  2. TCP ヘルスチェックを作成します。

    gcloud compute health-checks create tcp tcp-health-check \
        --region us-central1 \
        --port 80
    
  3. バックエンド サービスを作成します。

    gcloud compute backend-services create network-lb-backend-service \
        --protocol TCP \
        --health-checks tcp-health-check \
        --health-checks-region us-central1 \
        --region us-central1
    
  4. バックエンド サービスに、インスタンス グループを追加します。

    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
    
  5. 受信 TCP トラフィックをバックエンド サービスに転送する転送ルールを作成します。ステップ 1 で予約した IP アドレスをロードバランサの静的外部 IP アドレスとして使用します。

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

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

負荷分散サービスの構成が完了したので、ロードバランサの外部 IP アドレスにトラフィックの送信を開始できます。また、バックエンド インスタンスに分散されるトラフィックを監視できます。

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

Console

  1. 負荷分散の [詳細] ページにある [転送ルール] タブに移動します。
    [転送ルール] タブに移動
  2. ロードバランサが使用する転送ルール network-lb-forwarding-rule を探します。
  3. network-lb-forwarding-rule の [IP アドレス] 列に表示された外部 IP アドレスをメモします。

gcloud

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

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

ロードバランサにトラフィックを送信する

この手順により、ロードバランサに外部トラフィックが送信されます。

  1. curl を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。

    $ while true; do curl -m1 IP_ADDRESS; done
    
  2. curl コマンドを実行して戻された値の文字列をメモします。レスポンスを生成するバックエンド VM の名前が文字列内に表示されます(たとえば、Page served from: VM_NAME)。

    curl コマンドからのレスポンスは、バックエンド インスタンスの間でランダムに変わります。最初のレスポンスで失敗した場合は、構成が完全に読み込まれてインスタンスが正常であるとマークされるまで最大 30 秒待ってから、もう一度やり直してください。

次のステップ