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

このガイドでは、リージョン バックエンド サービスを使用して基本的なネットワーク負荷分散のデプロイを作成する手順を説明します。この例では、TCP トラフィックのみをサポートするネットワーク ロードバランサを作成します。TCP や UDP だけでなく、TCP、UDP、ESP、ICMP のトラフィックを負荷分散するネットワーク ロードバランサを作成する場合は、複数の IP プロトコルを使用するネットワーク ロードバランサの設定をご覧ください。

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

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

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

この例では、TCP トラフィックの負荷分散を行いますが、ネットワーク負荷分散を使用して UDP、SSL、HTTP(S) のトラフィックを負荷分散できます。

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

始める前に

このガイドは、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. [マルチリージョンまたはシングル リージョン] で [シングル リージョンのみ] を選択します。

  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 秒待ってから、もう一度やり直してください。

追加の構成オプション

このセクションでは、ネットワーク ロードバランサをさらにカスタマイズする方法について説明します。これらのタスクは省略可能です。これらは任意の順序で実行できます。

セッション アフィニティを構成する

この構成例では、セッション アフィニティが無効(値を NONE に設定)のバックエンド サービスが作成されます。このセクションでは、バックエンド サービスを更新してロードバランサのセッション アフィニティの設定を変更する方法について説明します。

サポートされているセッション アフィニティのタイプについては、セッション アフィニティのオプションをご覧ください。

Console

  1. Google Cloud Console で、[負荷分散] ページに移動します。

    [負荷分散] に移動

  2. バックエンド サービスの名前をクリックしてから、[編集] をクリックします。

  3. [TCP ロードバランサの編集] ページで、[バックエンドの構成] をクリックします。

  4. [セッション アフィニティ] プルダウンでオプションを選択します。

  5. [更新] をクリックします。

gcloud

次の gcloud コマンドを使用して、バックエンド サービスのセッション アフィニティを更新します。

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --session-affinity=SESSION_AFFINITY_OPTION

プレースホルダを有効な値に置き換えます。

  • BACKEND_SERVICE: 更新するバックエンド サービス
  • SESSION_AFFINITY_OPTION: 設定するセッション アフィニティ オプション

    ネットワーク ロードバランサでサポートされている値の一覧については、セッション アフィニティのオプションをご覧ください。

接続トラッキング ポリシーを構成する

この構成例では、接続トラッキング ポリシーのデフォルト設定を使用してバックエンド サービスを作成しています。このセクションでは、バックエンド サービスを更新してロードバランサのデフォルトの接続トラッキング ポリシーを変更する方法について説明します。

接続トラッキング ポリシーには次の設定が含まれます。

gcloud

次の gcloud beta compute backend-services コマンドを使用して、バックエンド サービスの接続トラッキング ポリシーを更新します。

gcloud beta compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --tracking-mode=TRACKING_MODE \
    --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR

プレースホルダを有効な値に置き換えます。

  • BACKEND_SERVICE: 更新するバックエンド サービス
  • TRACKING_MODE: 受信パケットに使用される接続トラッキング モード。サポートされている値のリストについては、トラッキング モードをご覧ください。
  • CONNECTION_PERSISTENCE_BEHAVIOR: バックエンドが異常な場合の接続の永続性の動作。サポートされている値の一覧については、異常なバックエンドでの接続の永続性をご覧ください。

次のステップ