VM インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを設定する

この設定ガイドでは、Compute Engine マネージド インスタンス グループのバックエンドを使用してグローバル外部アプリケーション ロードバランサを作成する方法を説明します。

一般的なコンセプトについては、外部アプリケーション ロードバランサの概要をご覧ください。

従来のアプリケーション ロードバランサの既存のユーザーで、グローバル外部アプリケーション ロードバランサで新しいデプロイを計画する場合は、移行の概要をご覧ください。


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

ガイドを表示


ロードバランサのトポロジ

HTTPS ロードバランサの場合は、次の図に示す構成を作成します。

マネージド インスタンス グループ(MIG)バックエンドを使用した外部アプリケーション ロードバランサ。
図 1. マネージド インスタンス グループ(MIG)バックエンドを使用した外部アプリケーション ロードバランサ(クリックして拡大)。

HTTP ロードバランサの場合は、次の図に示す構成を作成します。

マネージド インスタンス グループ(MIG)バックエンドを使用した外部アプリケーション ロードバランサ。
図 2. マネージド インスタンス グループ(MIG)バックエンドを使用した外部アプリケーション ロードバランサ(クリックして拡大)。

図中のイベントの順序は、次のとおりです。

  1. クライアントが転送ルールで定義された外部 IPv4 アドレスにコンテンツのリクエストを送信します。
  2. HTTPS ロードバランサの場合、リクエストは、転送ルールによってターゲット HTTPS プロキシに転送されます。

    HTTP ロードバランサの場合、リクエストは、転送ルールによってターゲット HTTP プロキシに転送されます。

  3. ターゲット プロキシは、URL マップのルールを使用して、単一のバックエンド サービスがすべてのリクエストを受信していることを確認します。

  4. ロードバランサは、このバックエンド サービスにはインスタンス グループが 1 つのみ存在していることを確認し、このグループに属する仮想マシン(VM)インスタンスの 1 つにリクエストを振り向けます。

  5. その結果、その VM によって、ユーザーがリクエストしたコンテンツが配信されます。

始める前に

ロードバランサを作成する前に次の手順を完了します。

SSL 証明書リソースを設定する

HTTPS ロードバランサの場合、SSL 証明書リソースは、次のように作成します。

Google マネージド証明書を使用することをおすすめします。

この例では、SSL 証明書リソース www-ssl-cert をすでに利用していることを前提としています。

権限を設定する

このガイドの手順を完了するには、プロジェクト内に Compute Engine インスタンス、ファイアウォール ルール、予約済み IP アドレスを作成する権限が必要になります。プロジェクトのオーナーまたは編集者ロール、あるいは次に示す Compute Engine IAM ロールが必要です。

タスク 必要なロール
インスタンスの作成 インスタンス管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
ロードバランサのコンポーネントの作成 ネットワーク管理者
プロジェクトの作成(省略可) プロジェクト作成者

詳細については、次のガイドをご覧ください。

ネットワークとサブネットを構成する

サンプルのネットワークとサブネットを作成する手順は次のとおりです。

Console

IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには、次の手順を行います。

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. ネットワークの名前を入力します。

  4. 省略可: このネットワークのサブネットで内部 IPv6 アドレス範囲を構成する場合は、次の手順を完了します。

    1. [VPC ネットワーク ULA の内部 IPv6 範囲] で、[有効] を選択します。
    2. [内部 IPv6 範囲の割り当て] で、[自動] または [手動] を選択します。

      [手動] を選択した場合は、fd20::/20 の範囲内の /48 の範囲を入力します。範囲が使用されている場合は、別の範囲を指定するように求めるプロンプトが表示されます。

  5. [サブネット作成モード] で [カスタム] をクリックします。

  6. [新しいサブネット] セクションで、次のフィールドを構成します。

    1. [名前] フィールドに、サブネットの名前を入力します。
    2. [リージョン] フィールドでリージョンを選択します。
    3. [IP スタックタイプ] には、[IPv4 と IPv6(デュアルスタック)] を選択します。
    4. [IP アドレス範囲] フィールドに IP アドレス範囲を入力します。これはサブネットのプライマリ IPv4 範囲です。

      サブネットの IPv4 アドレス範囲は構成できますが、サブネットの IPv6 アドレスの範囲は選択できません。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。

    5. [IPv6 アクセスタイプ] で [外部] を選択します。

  7. [完了] をクリックします。

  8. [作成] をクリックします。

IPv4 トラフィックのみをサポートするには、次の操作を行います。

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] フィールドに、新しいネットワークの名前を入力します。

  4. [サブネット作成モード] で [カスタム] をクリックします。

  5. [新しいサブネット] セクションで、次のように構成します。

    1. [名前] フィールドに、サブネットの名前を入力します。
    2. [リージョン] フィールドでリージョンを選択します。
    3. [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
    4. [IP アドレス範囲] フィールドに、サブネットのプライマリ IPv4 範囲を入力します。
  6. [完了] をクリックします。

  7. [作成] をクリックします。

gcloud

  1. カスタムモードの VPC ネットワークを作成します。

    gcloud compute networks create NETWORK \
        [ --enable-ula-internal-ipv6 [ --internal-ipv6-range=ULA_IPV6_RANGE ]] \
        --switch-to-custom-subnet-mode
    
  2. ネットワーク内に、バックエンドのサブネットを作成します。

    IPv4 トラフィックと IPv6 トラフィックの場合は、次のコマンドを使用してサブネットを更新します。

    gcloud compute networks subnets create SUBNET \
       --stack-type=IPV4_IPv6 \
       --ipv6-access-type=EXTERNAL \
       --network=NETWORK \
       --region=REGION_A
    

    IPv4 トラフィックのみの場合は、次のコマンドを使用します。

    gcloud compute networks subnets create SUBNET \
       --network=NETWORK \
       --stack-type=IPV4_ONLY \
       --range=10.1.2.0/24 \
       --region=REGION_A
    

次のように置き換えます。

  • NETWORK: VPC ネットワークの名前

  • ULA_IPV6_RANGE: Google が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 プレフィックス。--internal-ipv6-range フラグを使用しない場合は、Google によってネットワークの /48 プレフィックスが選択されます。

  • SUBNET: サブネットの名前

  • REGION_A: リージョンの名前

マネージド インスタンス グループを作成する

Compute Engine バックエンドでロードバランサを設定するには、VM がインスタンス グループに属している必要があります。このガイドでは、Apache が稼働している Linux VM からなるマネージド インスタンス グループを作成し、ロード バランシングを設定する方法について説明します。マネージド インスタンス グループは、指定したインスタンス テンプレートに基づいて各マネージド インスタンスを作成します。

このマネージド インスタンス グループの VM では、外部 HTTP(S) ロードバランサのバックエンド サーバーが実行されます。わかりやすく説明するために、バックエンド サーバーはそれぞれ独自のホスト名を提供します。

マネージド インスタンス グループを作成する前に、インスタンス テンプレートを作成します。

コンソール

IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには、次の操作を行います。

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

    [インスタンス テンプレート] に移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] に「lb-backend-template」と入力します。

  4. [リージョン] リストでリージョンを選択します。

  5. [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。

  6. [詳細オプション] を開きます。

  7. [ネットワーキング] を開いて次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-health-check,allow-health-check-ipv6」と入力します。
    2. [ネットワーク インターフェース] セクションで、[編集] をクリックし、次のフィールドを構成します。
      • ネットワーク: NETWORK
      • サブネット: SUBNET
      • IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
    3. [完了] をクリックします
  8. [管理] を開きます。[起動スクリプト] フィールドに、次のスクリプトを入力します。

    #! /bin/bash
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2
    
  9. [作成] をクリックします。

gcloud

IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには、次のコマンドを実行します。

gcloud compute instance-templates create TEMPLATE_NAME \
  --region=REGION \
  --network=NETWORK \
  --subnet=SUBNET \
  --stack-type=IPv4_IPv6 \
  --tags=allow-health-check,allow-health-check-ipv6 \
  --image-family=debian-10 \
  --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://metadata.google.internal/computeMetadata/v1/instance/name)"
    echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    systemctl restart apache2'

Terraform

インスタンス テンプレートを作成するには、google_compute_instance_template リソースを使用します。

resource "google_compute_instance_template" "default" {
  name = "lb-backend-template"
  disk {
    auto_delete  = true
    boot         = true
    device_name  = "persistent-disk-0"
    mode         = "READ_WRITE"
    source_image = "projects/debian-cloud/global/images/family/debian-11"
    type         = "PERSISTENT"
  }
  labels = {
    managed-by-cnrm = "true"
  }
  machine_type = "n1-standard-1"
  metadata = {
    startup-script = "#! /bin/bash\n     sudo apt-get update\n     sudo apt-get install apache2 -y\n     sudo a2ensite default-ssl\n     sudo a2enmod ssl\n     vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\"\n   sudo echo \"Page served from: $vm_hostname\" | \\\n   tee /var/www/html/index.html\n   sudo systemctl restart apache2"
  }
  network_interface {
    access_config {
      network_tier = "PREMIUM"
    }
    network    = "global/networks/default"
    subnetwork = "regions/us-east1/subnetworks/default"
  }
  region = "us-east1"
  scheduling {
    automatic_restart   = true
    on_host_maintenance = "MIGRATE"
    provisioning_model  = "STANDARD"
  }
  service_account {
    email  = "default"
    scopes = ["https://www.googleapis.com/auth/devstorage.read_only", "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring.write", "https://www.googleapis.com/auth/pubsub", "https://www.googleapis.com/auth/service.management.readonly", "https://www.googleapis.com/auth/servicecontrol", "https://www.googleapis.com/auth/trace.append"]
  }
  tags = ["allow-health-check"]
}

マネージド インスタンス グループを作成して、インスタンス テンプレートを選択します。

コンソール

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

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

  2. [インスタンス グループを作成] をクリックします。

  3. 左側で [新しいマネージド インスタンス グループ(ステートレス)] を選択します。

  4. [名前] に「lb-backend-example」と入力します。

  5. [ロケーション] で [シングルゾーン] を選択します。

  6. [リージョン] で、使用するリージョンを選択します。

  7. [ゾーン] でゾーンを選択します。

  8. [インスタンス テンプレート] で、インスタンス テンプレート lb-backend-template を選択します。

  9. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。

    [インスタンスの最小数] を 2、[インスタンスの最大数] を 2 以上にそれぞれ設定します。

  10. 新しいインスタンス グループを作成するには、[作成] をクリックします。

gcloud

  1. そのテンプレートに基づいてマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create lb-backend-example \
       --template=TEMPLATE_NAME --size=2 --zone=ZONE_A
    

Terraform

マネージド インスタンス グループを作成するには、google_compute_instance_group_manager リソースを使用します。

resource "google_compute_instance_group_manager" "default" {
  name = "lb-backend-example"
  zone = "us-east1-b"
  named_port {
    name = "http"
    port = 80
  }
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  base_instance_name = "vm"
  target_size        = 2
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

インスタンス グループに名前付きポートを追加する

インスタンス グループに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。ロード バランシング サービスは、名前付きポートにトラフィックを転送します。詳細については、名前付きポートをご覧ください。

コンソール

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

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

  2. [lb-backend-example] をクリックします。

  3. インスタンス グループの [概要] ページで、[EDIT] をクリックします。

  4. [ポート マッピング] セクションで、[ポートを追加] をクリックします。

    1. ポート名に「http」と入力します。ポート番号に「80」と入力します。
  5. [保存] をクリックします。

gcloud

gcloud compute instance-groups set-named-ports コマンドを使用します。

gcloud compute instance-groups set-named-ports lb-backend-example \
    --named-ports http:80 \
    --zone ZONE_A

Terraform

named_port 属性は、マネージド インスタンス グループ サンプルに含まれています。

ファイアウォール ルールを構成する

この例では、ファイアウォール ルール fw-allow-health-check を作成します。これは Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可する上り(内向き)ルールです。この例では、ターゲットタグ allow-health-check を使用して VM が識別されます。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして、ファイアウォール ルールを作成します。

  3. [名前] に「fw-allow-health-check」と入力します。

  4. ネットワークを選択します。

  5. [ターゲット] で [指定されたターゲットタグ] を選択します。

  6. [ターゲットタグ] フィールドに「allow-health-check」を入力します。

  7. [ソースフィルタ] を [IPv4 範囲] に設定します。

  8. [送信元 IPv4 範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。

  9. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。

  10. [TCP] チェックボックスをオンにし、ポート番号に「80」と入力します。

  11. [作成] をクリックします。

gcloud

gcloud compute firewall-rules create fw-allow-health-check \
    --network=NETWORK \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

Terraform

ファイアウォール ルールを作成するには、google_compute_firewall リソースを使用します。

resource "google_compute_firewall" "default" {
  name          = "fw-allow-health-check"
  direction     = "INGRESS"
  network       = "global/networks/default"
  priority      = 1000
  source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
  target_tags   = ["allow-health-check"]
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

IPv6 ヘルスチェックのファイアウォール ルールを作成する

ロードバランスされているインスタンスに適用され、Google Cloud ヘルスチェック システム(2600:2d00:1:b029::/64)からのトラフィックを許可する上り(内向き)ルールがあることを確認します。この例では、ターゲットタグ allow-health-check-ipv6 を使用して、ルールが適用される VM インスタンスを識別します。

このファイアウォール ルールがない場合は、暗黙の拒否上り(内向き)ルールがバックエンド インスタンスへの受信 IPv6 トラフィックをブロックします。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. IPv6 サブネット トラフィックを許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-lb-access-ipv6
    • ネットワーク: NETWORK
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • ターゲット: 指定されたターゲットタグ
    • [ターゲットタグ] フィールドに「allow-health-check-ipv6」と入力します。
    • ソースフィルタ: IPv6 範囲
    • 送信元 IPv6 範囲: 2600:2d00:1:b029::/64,2600:2d00:1:1::/64
    • プロトコルとポート: すべて許可
  3. [作成] をクリックします。

gcloud

サブネットとの通信を許可するには、fw-allow-lb-access-ipv6 ファイアウォール ルールを作成します。

gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
  --network=NETWORK \
  --action=allow \
  --direction=ingress \
  --target-tags=allow-health-check-ipv6 \
  --source-ranges=2600:2d00:1:b029::/64,2600:2d00:1:1::/64 \
  --rules=all

外部 IP アドレスを予約する

インスタンスが稼働し始めたので、次にロードバランサにユーザーが接続する際に使用するグローバル静的外部 IP アドレスを設定します。

コンソール

  1. Google Cloud コンソールで、[外部 IP アドレス] ページに移動します。

    [外部 IP アドレス] に移動

  2. IPv4 アドレスを予約するには、[外部静的 IP アドレスを予約] をクリックします。

  3. [名前] に「lb-ipv4-1」と入力します。

  4. [ネットワーク サービス階層] に [プレミアム] を設定します。

  5. [IP バージョン] を IPv4 に設定します。

  6. [タイプ] を [グローバル] に設定します。

  7. [予約] をクリックします。

gcloud

gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global

予約された IPv4 アドレスをメモします。

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Terraform

IP アドレスを予約するには、google_compute_global_address リソースを使用します。

resource "google_compute_global_address" "default" {
  name       = "lb-ipv4-1"
  ip_version = "IPV4"
}

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

ロードバランサを設定する

この例では、クライアントとロードバランサの間に HTTPS(フロントエンド)を使用します。HTTPS では、プロキシを構成するために SSL 証明書リソースが 1 つ以上必要になります。Google マネージド証明書を使用することをおすすめします。

フロントエンドで HTTPS を使用している場合でも、バックエンドでは HTTP を使用できます。Google では、Google Cloud VPC ネットワーク内にある Google Front End(GFE)とバックエンド間のトラフィックを自動的に暗号化します。

コンソール

構成を開始する

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [アプリケーション ロードバランサ(HTTP / HTTPS)] を選択し、[次へ] をクリックします。
  4. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  5. [グローバルまたはシングル リージョンのデプロイ] で [グローバル ワークロードに最適] を選択し、[次へ] をクリックします。
  6. [ロードバランサの世代] で [グローバル外部アプリケーション ロードバランサ] を選択し、[次へ] をクリックします。
  7. [構成] をクリックします。

基本構成

ロードバランサの [名前] には、「web-map-https」や「web-map-http」などを入力します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. [プロトコル] を HTTPS に設定します。
  3. IPv4 トラフィックの場合は [IPv4] を選択します。[IP アドレス] を前の手順で作成した lb-ipv4-1 に設定します。
  4. [ポート] を 443 に設定します。
  5. [証明書] をクリックし、プライマリ SSL 証明書を選択します。
  6. 省略可: SSL ポリシーを作成します。
    1. [SSL ポリシー] リストで、[ポリシーを作成] を選択します。
    2. SSL ポリシーの名前を my-ssl-policy に設定します。
    3. [TLS の最小バージョン] で [TLS 1.0] を選択します。
    4. [プロファイル] で [モダン] を選択します。[有効な機能] と [無効な機能] が表示されます。
    5. [保存] をクリックします。
    SSL ポリシーを作成していない場合は、デフォルトの SSL ポリシーが適用されます。
  7. 省略可: [HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスをオンにして、リダイレクトを有効にします。

    このチェックボックスをオンにすると、HTTPS ロードバランサと同じ IP アドレスを使用し、受信 HTTP リクエストをロードバランサの HTTPS フロントエンドにリダイレクトする、追加の部分的な HTTP ロードバランサが作成されます。

    このチェックボックスは、HTTPS プロトコルが選択されていて、予約済みの IP アドレスが使用されている場合にのみ選択できます。

  8. [完了] をクリックします。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスとバックエンド バケットの作成または選択] で [バックエンド サービス] > [バックエンド サービスを作成] の順に選択します。
  3. バックエンド サービスの名前(web-backend-service など)を追加します。
  4. [IP アドレス選択ポリシー] リストで、[IPv6 優先] を選択します。
  5. [プロトコル] で、HTTP を選択します。
  6. [名前付きポート] に「http」と入力します。
  7. [バックエンド] > [新しいバックエンド] > [インスタンス グループ] で、インスタンス グループ lb-backend-example を選択します。
  8. [ポート番号] に「80」と入力します。
  9. 他のデフォルト設定はそのままにします。
  10. [ヘルスチェック] で [ヘルスチェックを作成] を選択し、ヘルスチェックの名前(http-basic-check など)を追加します。
  11. プロトコルを HTTP に設定し、[保存] をクリックします。
  12. 省略可: デフォルトのバックエンド セキュリティ ポリシーを構成します。デフォルトのセキュリティ ポリシーでは、ユーザーが構成したしきい値を超えるトラフィックをスロットリングします。デフォルトのセキュリティ ポリシーの詳細については、レート制限の概要をご覧ください。

    1. Google Cloud Armor のデフォルトのセキュリティ ポリシーを無効にするには、バックエンド セキュリティ ポリシーのリストメニューで None を選択します。
    2. [セキュリティ] セクションで [デフォルトのセキュリティ ポリシー] を選択します。
    3. [ポリシー名] フィールドで、自動生成された名前を受け入れるか、セキュリティ ポリシーの名前を入力します。
    4. [リクエスト数] フィールドで、デフォルトのリクエスト数を受け入れるか、110,000 の整数を入力します。
    5. [間隔] フィールドで、間隔を選択します。
    6. [キーへの適用] フィールドで、[すべて]、[IP アドレス]、[X-Forwarded-For IP アドレス] のいずれかの値を選択します。これらのオプションの詳細については、レート制限対象のクライアントを特定するをご覧ください。
  13. 他のデフォルト設定はそのままにします。
  14. [作成] をクリックします。

ルーティング ルール

[ルーティング ルール] はデフォルトの設定のままにします。

確認と完了

  1. [確認と完了] をクリックします。
  2. ロードバランサの構成を確認します。
  3. 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
  4. [作成] をクリックします。

ロードバランサの作成が完了するまで待ちます。

HTTPS ロードバランサを作成し、[HTTP から HTTPS へのリダイレクトを有効にする] チェックボックスをクリックすると、-redirect サフィックスを付けて作成した HTTP ロードバランサも表示されます。

  1. ロードバランサの名前をクリックします。
  2. [ロードバランサの詳細] 画面で、ロードバランサの IP: ポートをメモします。

gcloud

  1. ヘルスチェックを作成する。
     gcloud compute health-checks create http http-basic-check \
         --port 80
     
  2. バックエンド サービスを作成します。
    gcloud beta compute backend-services create web-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --ip-address-selection-policy=PREFER_IPV6 \
        --health-checks=http-basic-check \
        --global
    
  3. インスタンス グループをバックエンドとしてバックエンド サービスに追加します。
    gcloud beta compute backend-services add-backend web-backend-service \
      --instance-group=lb-backend-example \
      --instance-group-zone=ZONE_A \
      --global
    
  4. HTTP 用に、受信リクエストをデフォルトのバックエンド サービスに転送する URL マップを作成します。
    gcloud beta compute url-maps create web-map-http \
      --default-service web-backend-service
    
  5. HTTPS 用に、受信リクエストをデフォルトのバックエンド サービスに転送する URL マップを作成します。
    gcloud beta compute url-maps create web-map-https \
      --default-service web-backend-service
    

HTTPS フロントエンドを設定する

HTTP ロードバランサの場合、このセクションはスキップしてください。

  1. HTTPS 用に、グローバル SSL 証明書リソースをまだ作成していない場合は、次のセクションの説明に従って作成します。
  2. HTTPS 用に、リクエストを URL マップに転送するターゲット HTTPS プロキシを作成します。プロキシはロードバランサの一部であり、HTTPS ロードバランサ用の SSL 証明書を保持するため、この手順で証明書も読み込みます。

    gcloud beta compute target-https-proxies create http-lb-proxy \
      --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
      --url-map=web-map-https \
      --ssl-certificates=www-ssl-cert
    

    HTTP_KEEP_ALIVE_TIMEOUT_SEC は、クライアント HTTP キープアライブ タイムアウトの値(5~1,200 秒)に置き換えます。デフォルト値は 610 秒です。このフィールドは省略可能です。

  3. HTTPS 用に、受信リクエストをプロキシに転送するグローバル転送ルールを作成します。
    gcloud beta compute forwarding-rules create https-content-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --network-tier=PREMIUM \
      --address=lb-ipv4-1 \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    
  4. 省略可: HTTPS の場合は、グローバル SSL ポリシーを作成して HTTPS プロキシに接続します。
    グローバル SSL ポリシーを作成するには:
    gcloud compute ssl-policies create my-ssl-policy \
      --profile MODERN \
      --min-tls-version 1.0
    
    SSL ポリシーをグローバル ターゲット HTTPS プロキシに接続するには:
    gcloud compute target-https-proxies update https-lb-proxy \
      --ssl-policy my-ssl-policy
    

HTTP フロントエンドを設定する

HTTPS ロードバランサの場合、このセクションはスキップしてください。

  1. HTTP 用に、リクエストを URL マップに転送するターゲット HTTP プロキシを作成します。
    gcloud beta compute target-http-proxies create http-lb-proxy \
      --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
      --url-map=web-map-http
    

    HTTP_KEEP_ALIVE_TIMEOUT_SEC は、クライアント HTTP キープアライブ タイムアウトの値(5~1,200 秒)に置き換えます。デフォルト値は 610 秒です。このフィールドは省略可能です。

  2. HTTP 用に、受信リクエストをプロキシに転送するグローバル転送ルールを作成します。
    gcloud beta compute forwarding-rules create http-content-rule \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --address=lb-ipv4-1 \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    

Terraform

  1. ヘルスチェックを作成するには、google_compute_health_check リソースを使用します。

    resource "google_compute_health_check" "default" {
      name               = "http-basic-check"
      check_interval_sec = 5
      healthy_threshold  = 2
      http_health_check {
        port               = 80
        port_specification = "USE_FIXED_PORT"
        proxy_header       = "NONE"
        request_path       = "/"
      }
      timeout_sec         = 5
      unhealthy_threshold = 2
    }
  2. バックエンド サービスを作成するには、google_compute_backend_service リソースを使用します。

    resource "google_compute_backend_service" "default" {
      name                            = "web-backend-service"
      connection_draining_timeout_sec = 0
      health_checks                   = [google_compute_health_check.default.id]
      load_balancing_scheme           = "EXTERNAL_MANAGED"
      port_name                       = "http"
      protocol                        = "HTTP"
      session_affinity                = "NONE"
      timeout_sec                     = 30
      backend {
        group           = google_compute_instance_group_manager.default.instance_group
        balancing_mode  = "UTILIZATION"
        capacity_scaler = 1.0
      }
    }
  3. URL マップを作成するには、google_compute_url_map リソースを使用します。

    resource "google_compute_url_map" "default" {
      name            = "web-map-http"
      default_service = google_compute_backend_service.default.id
    }
  4. ターゲット HTTP プロキシを作成するには、google_compute_target_http_proxy リソースを使用します。

    resource "google_compute_target_http_proxy" "default" {
      name    = "http-lb-proxy"
      url_map = google_compute_url_map.default.id
    }
  5. 転送ルールを作成するには、google_compute_global_forwarding_rule リソースを使用します。

    resource "google_compute_global_forwarding_rule" "default" {
      name                  = "http-content-rule"
      ip_protocol           = "TCP"
      load_balancing_scheme = "EXTERNAL_MANAGED"
      port_range            = "80-80"
      target                = google_compute_target_http_proxy.default.id
      ip_address            = google_compute_global_address.default.id
    }

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

ドメインをロードバランサに接続する

ロードバランサが作成されたら、ロードバランサに関連付けられた IP アドレスをメモします(例: 30.90.80.100)。ドメイン登録サービスを使用して A レコードを作成し、ドメインがロードバランサを参照するようにします。SSL 証明書に複数のドメインを追加する場合は、それぞれについて A レコードを追加して、すべてがロードバランサの IP アドレスを指すようにする必要があります。たとえば、www.example.comexample.comA レコードを作成するには、次のようにします。

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

DNS プロバイダとして Cloud DNS を使用する場合は、レコードの追加、変更、削除をご覧ください。

インスタンスに送信されるトラフィックをテストする

ロード バランシング サービスが稼働中になったので、転送ルールへトラフィックを送信できます。また、各インスタンスに分散されるトラフィックを監視できます。

コンソール

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

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

  2. 作成したロードバランサをクリックします。
  3. [バックエンド] セクションで、VM が正常であることを確認します。[正常] 列には、両方の VM が正常であること(2/2)が示されます。それ以外の場合は、最初にページを再読み込みしてみてください。VM が正常な状態であることが Google Cloud コンソールに表示されるまでに時間がかかる場合があります。数分経ってもバックエンドが正常に動作しない場合は、ファイアウォールの構成と、バックエンド VM に割り当てられているネットワーク タグを確認します。

  4. HTTPS 用に Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳細については、Google マネージド SSL 証明書リソースのステータスをご覧ください。
  5. Google Cloud コンソールでバックエンド インスタンスが正常であることを確認したら、ウェブブラウザ(https://IP_ADDRESS または http://IP_ADDRESS)でロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。
  6. HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。
  7. ページを提供したインスタンスの名前とそのゾーン(Page served from: lb-backend-example-xxxx など)を示すコンテンツを含むページがブラウザで表示されます。お使いのブラウザでこのページがレンダリングされない場合は、このガイドの構成設定を確認してください。

gcloud

gcloud compute addresses describe lb-ipv4-1 \
   --format="get(address)" \
   --global

数分経過したら、次の curl コマンドを実行して設定をテストします。

curl http://IP_ADDRESS

または

curl https://HOSTNAME

追加構成

このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。また、任意の順序で行うことができます。

クライアント HTTP キープアライブ タイムアウトを更新する

前の手順で作成したロードバランサは、クライアント HTTP キープアライブ タイムアウトのデフォルト値で構成されています。

クライアントの HTTP キープアライブ タイムアウトを更新するには、次の操作を行います。

コンソール

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

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

  2. 変更するロードバランサの名前をクリックします。
  3. [編集] をクリックします。
  4. [フロントエンドの構成] をクリックします。
  5. [高度な機能] を開きます。[HTTP キープアライブ タイムアウト] にタイムアウト値を入力します。
  6. [更新] をクリックします。
  7. 変更を確認するには、[確認と完了] をクリックして、[更新] をクリックします。

gcloud

HTTP ロードバランサの場合は、gcloud compute target-http-proxies update コマンドを使用してターゲット HTTP プロキシを更新します。

    gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

HTTPS ロードバランサの場合は、gcloud compute target-https-proxies update コマンドを使用してターゲット HTTPS プロキシを更新します。

    gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
        --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
        --global
    

次のように置き換えます。

  • TARGET_HTTP_PROXY_NAME: ターゲット HTTP プロキシの名前。
  • TARGET_HTTPS_PROXY_NAME: ターゲット HTTPS プロキシの名前。
  • HTTP_KEEP_ALIVE_TIMEOUT_SEC: HTTP キープアライブ タイムアウト値(5~600 秒)。

次のステップ

関連ドキュメント:

関連動画: