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

このドキュメントでは、Compute Engine VM で実行するサービス用にリージョン外部アプリケーション ロードバランサを構成する手順について説明します。

リージョン外部アプリケーション ロードバランサを使用すると、特定のリージョンにロードバランサを作成できるため、これらのロードバランサは法令遵守要件のあるワークロードで頻繁に使用されます。リージョン外部アプリケーション ロードバランサは、プレミアムとスタンダードの両方のネットワーク サービス ティアをサポートしているため、スタンダード ネットワーク ティアの下り(外向き)にアクセスする必要があるワークロードでも、リージョン外部アプリケーション ロードバランサが一般的に使用されています。

このガイドに進む前に、次の内容を理解しておいてください。

権限

このガイドに従うには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM のロールをすべて持っている必要があります。

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

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

設定の概要

リージョン外部アプリケーション ロードバランサは、次の概要を示した構成フローで説明されているように構成できます。図の中で番号の付いている項目については、図の後で簡単に説明します。

番号の付いたリージョン外部アプリケーション ロードバランサのコンポーネント
番号の付いたリージョン外部アプリケーション ロードバランサのコンポーネント(クリックして拡大)

図に示すようにこの例では、1 つのバックエンド サービスと 2 つのバックエンド インスタンス グループがある us-west1 リージョンの VPC ネットワークに、リージョン外部アプリケーション ロードバランサを作成します。

この図は次のことを示しています。

  1. 2 つのサブネットがある VPC ネットワーク:

    1. 1 つのサブネットがバックエンド(インスタンス グループ)に使用されます。プライマリ IP アドレスの範囲は 10.1.2.0/24 です。

    2. もう一つのサブネットは、us-west1 リージョンのプロキシ専用サブネットです。リージョン外部アプリケーション ロードバランサを使用する VPC ネットワークのリージョンごとにプロキシ専用サブネットを 1 つ作成する必要があります。リージョンのプロキシ専用サブネットは、リージョン内のすべてのリージョン ロードバランサで共有されます。ロードバランサからサービスのバックエンドに送信されるパケットのソースアドレスは、プロキシ専用サブネットから割り振られます。この例では、リージョンのプロキシ専用サブネットのプライマリ IP アドレスの範囲は 10.129.0.0/23 であり、これが推奨サブネット サイズです。詳細については、プロキシ専用サブネットをご覧ください。

  2. ネットワーク内のプロキシ専用サブネット トラフィック フローを許可するファイアウォール ルール。10.129.0.0/23(この例ではプロキシ専用サブネットの範囲)からの TCP ポート 804438080 トラフィックを許可する 1 つのルールが追加されることになります。ヘルスチェック プローブ用の別のファイアウォール ルール。

  3. バックエンド インスタンス。

  4. インスタンス グループ:

    1. Compute Engine VM デプロイのマネージド インスタンス グループまたは非マネージド インスタンス グループ
    2. GKE デプロイの NEG

    各ゾーンで、デプロイ要件に基づいてバックエンド グループタイプを組み合わせることができます。

  5. バックエンドの準備状況を報告するリージョン ヘルスチェック。

  6. バックエンドの使用状況と健全性をモニタリングするリージョン バックエンド サービス。

  7. リージョン URL マップはリクエストの URL を解析し、リクエスト URL のホストとパスに基づいて特定のバックエンド サービスにリクエストを転送します。

  8. リージョン ターゲット HTTP または HTTPS プロキシ。ユーザーからリクエストを受け取り、URL マップに転送します。HTTPS の場合、リージョン SSL 証明書リソースを構成します。HTTPS ロード バランシングを構成する場合、ターゲット プロキシは SSL 証明書または Certificate Manager 証明書を使用して SSL トラフィックを復号できます。ターゲット プロキシは、HTTP または HTTPS を使用してトラフィックをインスタンスに転送できます。

  9. ロードバランサの外部 IP アドレスを含む転送ルール。受信リクエストをターゲット プロキシに転送します。

    ロードバランサの IP アドレスを予約で説明されているように、転送ルールに関連付けられている外部 IP アドレスは、gcloud compute addresses create コマンドを使用して予約されます。

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

ロードバランサのバックエンド用とロードバランサのプロキシ用の 2 つのサブネットが存在する VPC ネットワークが必要です。リージョン外部アプリケーション ロードバランサはリージョナルです。VPC ネットワーク内のトラフィックは、送信元がロードバランサと同じリージョンのサブネット内にある場合、ロードバランサに転送されます。

この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。

  • ネットワーク。ネットワークは、lb-network という名前のカスタムモードの VPC ネットワークです。

  • バックエンドのサブネット。us-west1 リージョンの backend-subnet という名前のサブネット。プライマリ IP 範囲として 10.1.2.0/24 を使用します。

  • プロキシのサブネット。us-west1 リージョンの proxy-only-subnet という名前のサブネット。プライマリ IP 範囲として 10.129.0.0/23 を使用します。

バックエンドのネットワークとサブネットを構成する

コンソール

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

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

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

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

  4. [サブネット] セクションで次の設定を行います。

    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: backend-subnet
      • リージョン: us-west1
      • IP アドレス範囲: 10.1.2.0/24
    • [完了] をクリックします。
  5. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用してカスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. gcloud compute networks subnets create コマンドを使用して、us-west1 リージョンの lb-network ネットワークにサブネットを作成します。

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

Terraform

VPC ネットワークを作成するには、google_compute_network リソースを使用します。

resource "google_compute_network" "default" {
  name                    = "lb-network"
  auto_create_subnetworks = false
  routing_mode            = "REGIONAL"
}

lb-network ネットワークに VPC サブネットを作成するには、google_compute_subnetwork リソースを使用します。

resource "google_compute_subnetwork" "default" {
  name                       = "backend-subnet"
  ip_cidr_range              = "10.1.2.0/24"
  network                    = google_compute_network.default.id
  private_ipv6_google_access = "DISABLE_GOOGLE_ACCESS"
  purpose                    = "PRIVATE"
  region                     = "us-west1"
  stack_type                 = "IPV4_ONLY"
}

API

  1. networks.insert メソッドに POST リクエストを送ります。PROJECT_ID は実際のプロジェクト ID に置き換えます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
     "routingConfig": {
       "routingMode": "REGIONAL"
     },
     "name": "lb-network",
     "autoCreateSubnetworks": false
    }
    
  2. subnetworks.insert メソッドに POST リクエストを送ります。PROJECT_ID は実際のプロジェクト ID に置き換えます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
    {
     "name": "backend-subnet",
     "network": "projects/PROJECT_ID/global/networks/lb-network",
     "ipCidrRange": "10.1.2.0/24",
     "region": "projects/PROJECT_ID/regions/us-west1",
    }
    

プロキシ専用サブネットを構成する

プロキシ専用サブネットには、Google がユーザーに代わって Envoy プロキシを実行する際に使用する一連の IP アドレスが用意されています。このプロキシは、クライアントからの接続を終了し、バックエンドへの新しい接続を作成します。

このプロキシ専用サブネットは、lb-network VPC ネットワークの同じリージョン内のすべての Envoy ベースのロードバランサで使用されます。リージョンごと、ネットワークごとにアクティブなプロキシ専用サブネットは 1 つだけです。

コンソール

Google Cloud コンソールを使用している場合は、しばらく待ってから、[ロード バランシング] ページでプロキシ専用サブネットを作成できます。

プロキシ専用サブネットを今すぐ作成する場合は、次の操作を行います。

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

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

  2. VPC ネットワークの名前 lb-network をクリックします。

  3. [サブネットを追加] をクリックします。

  4. [名前] に「proxy-only-subnet」と入力します。

  5. [リージョン] で us-west1 を選択します。

  6. [目的] を [リージョン マネージド プロキシ] に設定します。

  7. [IP アドレス範囲] に「10.129.0.0/23」と入力します。

  8. [追加] をクリックします。

gcloud

gcloud compute networks subnets create コマンドを使用して、プロキシ専用サブネットを作成します。

gcloud compute networks subnets create proxy-only-subnet \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/23

Terraform

lb-network ネットワークに VPC プロキシ専用サブネットを作成するには、google_compute_subnetwork リソースを使用します。

resource "google_compute_subnetwork" "proxy_only" {
  name          = "proxy-only-subnet"
  ip_cidr_range = "10.129.0.0/23"
  network       = google_compute_network.default.id
  purpose       = "REGIONAL_MANAGED_PROXY"
  region        = "us-west1"
  role          = "ACTIVE"
}

API

subnetworks.insert メソッドを使用してプロキシ専用サブネットを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks
{
  "name": "proxy-only-subnet",
  "ipCidrRange": "10.129.0.0/23",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "region": "projects/PROJECT_ID/regions/us-west1",
  "purpose": "REGIONAL_MANAGED_PROXY",
  "role": "ACTIVE"
}

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

この例では、次のファイアウォール ルールを使用します。

  • fw-allow-health-check ロードバランスされたインスタンスに適用される上り(内向き)ルール。これによって、Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのすべての TCP トラフィックが許可されます。この例では、ターゲットタグ load-balanced-backend を使用して、ファイアウォール ルールが適用される VM を識別しています。

  • fw-allow-proxies。ロードバランスされているインスタンスに適用される上り(内向き)ルール。リージョン外部アプリケーション ロードバランサが管理するプロキシからポート 804438080 への TCP トラフィックを許可します。この例では、ターゲットタグ load-balanced-backend を使用して、ファイアウォール ルールが適用される VM を識別します。

これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

ターゲットタグは、バックエンド インスタンスを定義します。ターゲットタグがない場合、ファイアウォール ルールは VPC ネットワーク内のすべてのバックエンド インスタンスに適用されます。バックエンド VM を作成する場合は、マネージド インスタンス グループの作成の説明に沿って、指定したターゲットタグを忘れずに含めてください。

コンソール

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

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

  2. [ファイアウォール ルールを作成] をクリックして、Google Cloud ヘルスチェックを許可するルールを作成します。

    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] チェックボックスをオンにして、ポート番号に「80」と入力します。
        このルールは、ヘルスチェックに使用されているプロトコルとポートのみに制限することをおすすめします。プロトコルとポートに tcp:80 を使用すると、Google Cloud はポート 80 で HTTP を使用して VM に接続できますが、ポート 443 では HTTPS を使用して VM に接続することはできません。
  3. [作成] をクリックします。

  4. [ファイアウォール ルールを作成] をクリックして、ロードバランサのプロキシ サーバーがバックエンドに接続できるようにするルールを作成します。

    • 名前: fw-allow-proxies
    • ネットワーク: lb-network
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.129.0.0/23
    • プロトコルとポート:
      • 指定されたプロトコルとポートを選択します。
      • [TCP] チェックボックスをオンにして、ポート番号に「80, 443, 8080」と入力します。
  5. [作成] をクリックします。

gcloud

  1. Google Cloud ヘルスチェックを許可する fw-allow-health-check ルールを作成します。この例では、ヘルスチェック プローブからのすべての TCP トラフィックを許可します。ただし、必要に応じてポートの範囲を狭く構成することもできます。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  2. リージョン外部アプリケーション ロードバランサのプロキシにバックエンドへの接続を許可する fw-allow-proxies ルールを作成します。source-ranges をプロキシ専用サブネットの割り振り範囲に設定します(例: 10.129.0.0/23)。

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=source-range \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8080
    

Terraform

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

resource "google_compute_firewall" "default" {
  name = "fw-allow-health-check"
  allow {
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.default.id
  priority      = 1000
  source_ranges = ["130.211.0.0/22", "35.191.0.0/16"]
  target_tags   = ["load-balanced-backend"]
}
resource "google_compute_firewall" "allow_proxy" {
  name = "fw-allow-proxies"
  allow {
    ports    = ["443"]
    protocol = "tcp"
  }
  allow {
    ports    = ["80"]
    protocol = "tcp"
  }
  allow {
    ports    = ["8080"]
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.default.id
  priority      = 1000
  source_ranges = ["10.129.0.0/23"]
  target_tags   = ["load-balanced-backend"]
}

API

firewalls.insert メソッドに POST リクエストを送り、fw-allow-health-check ファイアウォール ルールを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
  "name": "fw-allow-health-check",
  "network": "projects/PROJECT-ID/global/networks/lb-network",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "direction": "INGRESS"
}

firewalls.insert メソッドのプロキシ サブネット内で TCP トラフィックを許可する fw-allow-proxies ファイアウォール ルールを作成します。PROJECT_ID は、実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
  "name": "fw-allow-proxies",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "sourceRanges": [
    "10.129.0.0/23"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "443"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "8080"
      ]
    }
  ],
  "direction": "INGRESS"
}

VM ベースのサービスでリージョン外部アプリケーション ロードバランサを構成する

このセクションでは、Compute Engine VM 上で実行されるサービスに必要な構成について説明します。クライアント VM は、転送ルールで構成した IP アドレスとポートに接続されます。クライアント アプリケーションがこの IP アドレスとポートにトラフィックを送信すると、リージョン外部アプリケーション ロードバランサの URL マップに従ってバックエンド仮想マシン(VM)にリクエストが転送されます。

本ページのこの例では、エフェメラル外部 IP アドレスの割り振りを許可せずに、リージョン外部アプリケーション ロードバランサの転送ルールに予約済み外部 IP アドレスを明示的に作成しています。転送ルールの IP アドレスは予約しておくことをおすすめします。

マネージド インスタンス グループのバックエンドを作成する

このセクションでは、テンプレートとマネージド インスタンス グループの作成方法を説明します。このマネージド インスタンス グループには、サンプルのリージョン外部アプリケーション ロードバランサのバックエンド サーバーを実行する VM インスタンスが用意されています。クライアントからのトラフィックは、これらのバックエンド サーバーにロードバランスされます。わかりやすく説明するために、バックエンド サーバーはそれぞれ独自のホスト名を提供します。

コンソール

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

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

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「l7-xlb-backend-template」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    4. [詳細オプション] をクリックします。
    5. [ネットワーキング] をクリックして次のフィールドを構成します。
      1. [ネットワーク タグ] に「load-balanced-backend」と入力します。
      2. [ネットワーク インターフェース] で、次のように選択します。
        • ネットワーク: lb-network
        • サブネット: backend-subnet
    6. [管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。

      #! /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
      
    7. [作成] をクリックします。

  2. マネージド インスタンス グループを作成します。Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] に「l7-xlb-backend-example」と入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で us-west1 を選択します。
    6. [ゾーン] で、[us-west1-a] を選択します。
    7. [インスタンス テンプレート] で [l7-xlb-backend-template] を選択します。
    8. [自動スケーリング モード] で [オン: グループに対してインスタンスを追加および削除します] を選択します。

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

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

gcloud

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

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

    gcloud compute instance-templates create l7-xlb-backend-template \
    --region=us-west1 \
    --network=lb-network \
    --subnet=backend-subnet \
    --tags=load-balanced-backend \
    --image-family=debian-12 \
    --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'
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create l7-xlb-backend-example \
        --zone=us-west1-a \
        --size=2 \
        --template=l7-xlb-backend-template
    

Terraform

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

resource "google_compute_instance_template" "default" {
  name = "l7-xlb-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-12"
    type         = "PERSISTENT"
  }
  labels = {
    managed-by-cnrm = "true"
  }
  machine_type = "n1-standard-1"
  metadata = {
    startup-script = <<EOF
    #! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    vm_hostname="$(curl -H "Metadata-Flavor:Google" \
    http://169.254.169.254/computeMetadata/v1/instance/name)"
    sudo echo "Page served from: $vm_hostname" | \
    tee /var/www/html/index.html
    sudo systemctl restart apache2
    EOF
  }
  network_interface {
    access_config {
      network_tier = "PREMIUM"
    }
    network    = google_compute_network.default.id
    subnetwork = google_compute_subnetwork.default.id
  }
  region = "us-west1"
  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 = ["load-balanced-backend"]
}

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

resource "google_compute_instance_group_manager" "default" {
  name = "l7-xlb-backend-example"
  zone = "us-west1-a"
  named_port {
    name = "http"
    port = 80
  }
  version {
    instance_template = google_compute_instance_template.default.id
    name              = "primary"
  }
  base_instance_name = "vm"
  target_size        = 2
}

API

  1. instanceTemplates.insert メソッドを使用してインスタンス テンプレートを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
    {
     "name":"l7-xlb-backend-template",
     "properties": {
       "machineType":"e2-standard-2",
       "tags": {
         "items":[
           "load-balanced-backend"
         ]
       },
       "metadata": {
         "kind":"compute#metadata",
         "items":[
           {
             "key":"startup-script",
             "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2"
           }
         ]
       },
       "networkInterfaces":[
         {
           "network":"projects/PROJECT_ID/global/networks/lb-network",
           "subnetwork":"regions/us-west1/subnetworks/backend-subnet",
           "accessConfigs":[
             {
               "type":"ONE_TO_ONE_NAT"
             }
           ]
         }
       ],
       "disks": [
         {
           "index":0,
           "boot":true,
           "initializeParams": {
             "sourceImage":"projects/debian-cloud/global/images/family/debian-12"
           },
           "autoDelete":true
         }
       ]
     }
    }
    
  2. instanceGroupManagers.insert メソッドを使用して、各ゾーンにマネージド インスタンス グループを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers
    {
     "name": "l7-xlb-backend-example",
     "zone": "projects/PROJECT_ID/zones/us-west1-a",
     "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-xlb-backend-template",
     "baseInstanceName": "l7-xlb-backend-example",
     "targetSize": 2
    }
    

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

インスタンス グループに HTTP サービスを定義し、ポート名を該当するポートにマッピングします。ロードバランサのバックエンド サービスは、名前付きポートにトラフィックを転送します。

コンソール

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

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

  2. インスタンス グループの名前をクリックします(この例では l7-xlb-backend-example)。

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

  4. [ポート名のマッピングを指定する] をクリックします。

  5. [項目を追加] をクリックします。

  6. ポート名に「http」と入力します。ポート番号に「80」と入力します。

  7. [保存] をクリックします。

gcloud

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

gcloud compute instance-groups set-named-ports l7-xlb-backend-example \
    --named-ports http:80 \
    --zone us-west1-a

Terraform

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

ロードバランサの IP アドレスを予約する

ロードバランサに静的 IP アドレスを予約します。

コンソール

  1. Google Cloud コンソールで [静的アドレスの予約] ページに移動します。

    [静的アドレスの予約] に移動

  2. 新しいアドレスの名前を指定します。

  3. [ネットワーク サービス ティア] で [スタンダード] を選択します。

  4. [IP バージョン] で [IPv4] を選択します。IPv6 アドレスはグローバルのみで、グローバル ロードバランサでのみ使用できます。

  5. [タイプ] で [リージョン] を選択します。

  6. [リージョン] で [us-west1] を選択します。

  7. [接続先] オプションは [なし] のままにします。ロードバランサを作成すると、この IP アドレスがロードバランサの転送ルールに関連付けられます。

  8. [予約] をクリックして IP アドレスを予約します。

gcloud

  1. gcloud compute を使用して静的外部 IP アドレスを予約するには、compute addresses create コマンドを使用します。

    gcloud compute addresses create ADDRESS_NAME  \
       --region=us-west1 \
       --network-tier=STANDARD
    

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

    • ADDRESS_NAME: このアドレスに付ける名前。
    • REGION: このアドレスを予約するリージョン。このリージョンは、ロードバランサと同じリージョンにする必要があります。すべてのリージョン IP アドレスは IPv4 です。
  2. 結果を表示するには、compute addresses describe コマンドを使用します。

    gcloud compute addresses describe ADDRESS_NAME
    

Terraform

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

resource "google_compute_address" "default" {
  name         = "address-name"
  address_type = "EXTERNAL"
  network_tier = "STANDARD"
  region       = "us-west1"
}

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

API

リージョン IPv4 アドレスを作成するには、リージョン addresses.insert メソッドを呼び出します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses

リクエスト本文は次のようにします。

{
  "name": "ADDRESS_NAME"
  "networkTier": "STANDARD"
  "region": "us-west1"
}

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

  • ADDRESS_NAME: アドレスの名前
  • REGION: このリクエストのリージョン名
  • PROJECT_ID: このリクエストのプロジェクト ID

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

この例では、次のリージョン外部アプリケーション ロードバランサ リソースの作成方法を示します。

  • HTTP ヘルスチェック
  • マネージド インスタンス グループをバックエンドとして使用するバックエンド サービス
  • URL マップ
    • リージョンがターゲット HTTP(S) プロキシに定義されている場合は、必ずリージョン URL マップを参照してください。リージョン URL マップは、受信 URL のホストとパスに定義したルールに基づいて、リクエストをリージョン バックエンド サービスにルーティングします。リージョン URL マップを参照できるのは、同じリージョン内のリージョン ターゲット プロキシのルールのみです。
  • SSL 証明書(HTTPS の場合)
  • ターゲット プロキシ
  • 転送ルール

プロキシの可用性

Google Cloud リージョンによっては、新しいロードバランサに対応するのに十分なプロキシ容量がない場合があります。その場合、ロードバランサの作成時に Google Cloud コンソールでプロキシの可用性に関する警告メッセージが表示されます。この問題を解決するには、次のいずれかを行います。

  • ロードバランサに別のリージョンを選択します。これは、別のリージョンにバックエンドがある場合には現実的な選択肢となります。
  • プロキシ専用サブネットがすでに割り当てられている VPC ネットワークを選択します。
  • 容量の問題が解決するまで待ちます。

コンソール

構成を開始する

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

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

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

基本構成

  1. ロードバランサの名前に「regional-l7-xlb」と入力します。
  2. [リージョン] で、us-west1 を選択します。
  3. [ネットワーク] で lb-network を選択します。

プロキシ専用サブネットを予約する

リージョン外部アプリケーション ロードバランサの場合は、プロキシ専用サブネットを予約します。

  1. [サブネットを予約] をクリックします。
  2. [名前] に「proxy-only-subnet」と入力します。
  3. [IP アドレス範囲] に「10.129.0.0/23」と入力します。
  4. [追加] をクリックします。

フロントエンドを構成する

HTTP の場合:

  1. [フロントエンドの構成] をクリックします。
  2. [名前] を l7-xlb-forwarding-rule に設定します。
  3. [プロトコル] を HTTP に設定します。
  4. [ネットワーク サービス ティア] を [スタンダード] に設定します。
  5. [ポート] を 80 に設定します。
  6. ロードバランサの IP アドレスの予約で作成した IP アドレスを選択します。
  7. [完了] をクリックします。

HTTPS の場合:

  1. [フロントエンドの構成] をクリックします。
  2. [名前] フィールドに「l7-xlb-forwarding-rule」と入力します。
  3. [プロトコル] フィールドで HTTPS (includes HTTP/2) を選択します。
  4. [ネットワーク サービス ティア] を [スタンダード] に設定します。
  5. [ポート] が 443 に設定されていることを確認します。
  6. ロードバランサの IP アドレスの予約で作成した IP アドレスを選択します。
  7. 証明書リストで、次の操作を行います。
    1. Compute Engine のセルフマネージド SSL 証明書リソースがすでにある場合は、プライマリ SSL 証明書を選択します。
    2. [新しい証明書の作成] をクリックします。
      1. [名前] フィールドに「l7-xlb-cert」と入力します。
      2. 該当するフィールドで PEM 形式のファイルをアップロードします。
        • 証明書
        • 秘密鍵
      3. [作成] をクリックします。
  8. 省略可: プライマリ SSL 証明書に加えて証明書を追加するには:
    1. [証明書を追加] をクリックします。
    2. すでに証明書がある場合は、[証明書] リストから証明書を選択します。
    3. (省略可)[新しい証明書を作成] をクリックし、上述の操作を行います。
  9. [SSL ポリシー] リストから SSL ポリシーを選択します。必要に応じて、SSL ポリシーを作成します。手順は次のとおりです。

    1. [SSL ポリシー] リストで、[ポリシーを作成] を選択します。
    2. SSL ポリシーの名前を入力します。
    3. TLS の最小バージョンを選択します。デフォルト値は TLS 1.0 です。
    4. 事前構成された Google マネージド プロファイルのいずれかを選択するか、SSL 機能を個別に選択できるカスタム プロファイルを選択します。[有効な機能] と [無効な機能] が表示されます。
    5. [保存] をクリックします。

    SSL ポリシーを作成していない場合は、デフォルトの Google Cloud SSL ポリシーが適用されます。

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

バックエンド サービスを構成する

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド サービスの作成または選択] メニューから [バックエンド サービスを作成] を選択します。
  3. バックエンド サービスの名前を l7-xlb-backend-service に設定します。
  4. [プロトコル] で [HTTP] を選択します。
  5. [名前付きポート] に「http」と入力します。
  6. [バックエンド タイプ] をインスタンス グループに設定します。
  7. [新しいバックエンド] セクションで、次の操作を行います。
    1. [インスタンス グループ] を l7-xlb-backend-example に設定します。
    2. [ポート番号] を 80 に設定します。
    3. [分散モード] を [使用率] に設定します。
    4. [完了] をクリックします。
  8. [ヘルスチェック] リストで [ヘルスチェックを作成] をクリックします。
    1. [名前] を l7-xlb-basic-check に設定します。
    2. [プロトコル] を HTTP に設定します。
    3. [ポート] を 80 に設定します。
    4. [保存] をクリックします。
  9. [作成] をクリックします。

ルーティング ルールを構成する

  1. [ルーティング ルール] をクリックします。
  2. [モード] で、[単純なホストとパスのルール] を選択します。
  3. l7-xlb-backend-service が、ホストとパスが一致しなかった場合に使用される唯一のバックエンド サービスであることを確認します。

構成を確認する

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

gcloud

  1. gcloud compute health-checks create http コマンドを使用して HTTP ヘルスチェックを定義します。

    gcloud compute health-checks create http l7-xlb-basic-check \
       --region=us-west1 \
       --request-path='/' \
       --use-serving-port
    
  2. gcloud compute backend-services create コマンドを使用してバックエンド サービスを定義します。

    gcloud compute backend-services create l7-xlb-backend-service \
      --load-balancing-scheme=EXTERNAL_MANAGED \
      --protocol=HTTP \
      --port-name=http \
      --health-checks=l7-xlb-basic-check \
      --health-checks-region=us-west1 \
      --region=us-west1
    
  3. gcloud compute backend-services add-backend コマンドを使用して、バックエンド サービスにバックエンドを追加します。

    gcloud compute backend-services add-backend l7-xlb-backend-service \
      --balancing-mode=UTILIZATION \
      --instance-group=l7-xlb-backend-example \
      --instance-group-zone=us-west1-a \
      --region=us-west1
    
  4. gcloud compute url-maps create コマンドを使用して、URL マップを作成します。

    gcloud compute url-maps create regional-l7-xlb-map \
      --default-service=l7-xlb-backend-service \
      --region=us-west1
    
  5. ターゲット プロキシを作成します。

    HTTP の場合:

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

    gcloud compute target-http-proxies create l7-xlb-proxy \
      --url-map=regional-l7-xlb-map \
      --url-map-region=us-west1 \
      --region=us-west1
    

    HTTPS の場合:

    Compute Engine または Certificate Manager の証明書を作成できます。Certificate Manager を使用して証明書を作成するには、次のいずれかの方法を使用します。

    • リージョン セルフマネージド証明書。リージョン セルフマネージド証明書の作成と使用については、リージョン セルフマネージド証明書をデプロイするをご覧ください。証明書マップはサポートされていません。

    • リージョンの Google マネージド証明書。証明書マップはサポートされていません。

      Certificate Manager では、次のタイプのリージョン Google マネージド証明書がサポートされています。

    • 証明書を作成したら、証明書をターゲット プロキシに直接関連付けます。

      1. ファイルパスを変数名に割り当てます。

        export LB_CERT=path to PEM-formatted file
        
        export LB_PRIVATE_KEY=path to PEM-formatted file
        
      2. gcloud compute ssl-certificates create コマンドを使用してリージョン SSL 証明書を作成します。

        gcloud compute ssl-certificates create l7-xlb-cert \
         --certificate=$LB_CERT \
         --private-key=$LB_PRIVATE_KEY \
         --region=us-west1
        
      3. リージョン SSL 証明書を使用して、gcloud compute target-https-proxies create コマンドでターゲット プロキシを作成します。

        gcloud compute target-https-proxies create l7-xlb-proxy \
         --url-map=regional-l7-xlb-map \
         --region=us-west1 \
         --ssl-certificates=l7-xlb-cert
        
    • 転送ルールを作成します。

      HTTP の場合:

      適切なフラグを設定して gcloud compute forwarding-rules create コマンドを実行します。

      gcloud compute forwarding-rules create l7-xlb-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=STANDARD \
        --network=lb-network \
        --address=ADDRESS_NAME \
        --ports=80 \
        --region=us-west1 \
        --target-http-proxy=l7-xlb-proxy \
        --target-http-proxy-region=us-west1
      

      HTTPS の場合:

      適切なフラグを設定して gcloud compute forwarding-rules create コマンドを実行し、転送ルールを作成します。

      gcloud compute forwarding-rules create l7-xlb-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --network-tier=STANDARD \
        --network=lb-network \
        --address=ADDRESS_NAME \
        --ports=443 \
        --region=us-west1 \
        --target-https-proxy=l7-xlb-proxy \
        --target-https-proxy-region=us-west1
      

Terraform

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

resource "google_compute_region_health_check" "default" {
  name               = "l7-xlb-basic-check"
  check_interval_sec = 5
  healthy_threshold  = 2
  http_health_check {
    port_specification = "USE_SERVING_PORT"
    proxy_header       = "NONE"
    request_path       = "/"
  }
  region              = "us-west1"
  timeout_sec         = 5
  unhealthy_threshold = 2
}

バックエンド サービスを作成するには、google_compute_region_backend_service リソースを使用します。

resource "google_compute_region_backend_service" "default" {
  name                  = "l7-xlb-backend-service"
  region                = "us-west1"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  health_checks         = [google_compute_region_health_check.default.id]
  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
  }
}

URL マップを作成するには、google_compute_region_url_map リソースを使用します。

resource "google_compute_region_url_map" "default" {
  name            = "regional-l7-xlb-map"
  region          = "us-west1"
  default_service = google_compute_region_backend_service.default.id
}

ターゲット HTTP プロキシを作成するには、google_compute_region_target_http_proxy リソースを使用します。

resource "google_compute_region_target_http_proxy" "default" {
  name    = "l7-xlb-proxy"
  region  = "us-west1"
  url_map = google_compute_region_url_map.default.id
}

転送ルールを作成するには、google_compute_forwarding_rule リソースを使用します。

resource "google_compute_forwarding_rule" "default" {
  name       = "l7-xlb-forwarding-rule"
  provider   = google-beta
  depends_on = [google_compute_subnetwork.proxy_only]
  region     = "us-west1"

  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_region_target_http_proxy.default.id
  network               = google_compute_network.default.id
  ip_address            = google_compute_address.default.id
  network_tier          = "STANDARD"
}

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

API

regionHealthChecks.insert メソッドに POST リクエストを送り、ヘルスチェックを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/{region}/healthChecks
{
  "name": "l7-xlb-basic-check",
  "type": "HTTP",
  "httpHealthCheck": {
    "portSpecification": "USE_SERVING_PORT"
  }
}

regionBackendServices.insert メソッドに POST リクエストを送り、リージョン バックエンド サービスを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices
{
  "name": "l7-xlb-backend-service",
  "backends": [
    {
      "group": "projects/<var>PROJECT_ID</var>/zones/us-west1-a/instanceGroups/l7-xlb-backend-example",
      "balancingMode": "UTILIZATION"
    }
  ],
  "healthChecks": [
    "projects/<var>PROJECT_ID</var>/regions/us-west1/healthChecks/l7-xlb-basic-check"
  ],
  "loadBalancingScheme": "EXTERNAL_MANAGED"
}

regionUrlMaps.insert メソッドに POST リクエストを送り、URL マップを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/urlMaps
{
  "name": "regional-l7-xlb-map",
  "defaultService": "projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices/l7-xlb-backend-service"
}

regionTargetHttpProxies.insert メソッドに POST リクエストを送り、ターゲット HTTP プロキシを作成します。PROJECT_ID は、実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy
{
  "name": "l7-xlb-proxy",
  "urlMap": "projects/PROJECT_ID/global/urlMaps/regional-l7-xlb-map",
  "region": "us-west1"
}

forwardingRules.insert メソッドに POST リクエストを送り、転送ルールを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
  "name": "l7-xlb-forwarding-rule",
  "IPAddress": "10.1.2.99",
  "IPProtocol": "TCP",
  "portRange": "80-80",
  "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-xlb-proxy",
  "loadBalancingScheme": "EXTERNAL_MANAGED",
  "network": "projects/PROJECT_ID/global/networks/lb-network",
  "networkTier": "STANDARD",
}

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

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

gcloud

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

gcloud beta compute addresses describe ADDRESS_NAME \
    --format="get(address)" \
    --region="us-west1"

ウェブブラウザで https://IP_ADDRESS(または http://IP_ADDRESS)に移動して、ロードバランサをテストできます。IP_ADDRESS は、ロードバランサの IP アドレスに置き換えます。

HTTPS のテストに自己署名証明書を使用した場合は、ブラウザに警告が表示されます。自己署名証明書を受け付けるためには、ブラウザで明示的に設定する必要があります。

バックエンド インスタンスに関する最小限の情報を含むページがブラウザで表示されます。お使いのブラウザでこのページが表示されない場合は、このガイドの構成設定を確認してください。

追加の構成オプション

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

セッション アフィニティを有効にする

これらの手順は、バックエンド サービスが生成された Cookie アフィニティ、ヘッダー フィールド アフィニティ、HTTP Cookie アフィニティを使用するように、サンプルのリージョン外部アプリケーション ロードバランサのバックエンド サービスを更新する方法を示しています。

生成された Cookie アフィニティが有効な場合、ロードバランサは最初のリクエストで Cookie を発行します。同じ Cookie を持つ後続のリクエストは、ロードバランサによって同じバックエンド VM またはエンドポイントに送信されます。リージョン外部アプリケーション ロードバランサの場合、Cookie の名前は GCILB になります。

ヘッダー フィールド アフィニティが有効になっている場合、ロードバランサは、--custom-request-header フラグで指定された HTTP ヘッダーの値に基づいて、NEG のバックエンド VM またはエンドポイントにリクエストをルーティングします。ヘッダー フィールド アフィニティは、ロード バランシングの局所性ポリシーが RING_HASH または MAGLEV であり、バックエンド サービスのコンシステント ハッシュが HTTP ヘッダーの名前を指定している場合にのみ有効です。

HTTP Cookie アフィニティが有効になっている場合、ロードバランサは、HTTP_COOKIE フラグ(およびオプションの --affinity-cookie-ttl フラグ)で指定された HTTP Cookie に基づいて、NEG のバックエンド VM またはエンドポイントにリクエストをルーティングします。クライアントが HTTP リクエストで Cookie を提供しない場合、プロキシは Cookie を生成し、それを Set-Cookie ヘッダーでクライアントに返します。HTTP Cookie アフィニティは、ロード バランシングの局所性ポリシーが RING_HASH または MAGLEV であり、バックエンド サービスのコンシステント ハッシュが HTTP Cookie を指定している場合にのみ有効です。

コンソール

バックエンド サービスのためのセッション アフィニティを有効化または変更するには、次に示す手順を行ってください。

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

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

  2. 作成したロードバランサをクリックします。

  3. [バックエンド] をクリックします。

  4. l7-ilb-backend-service(この例で作成したバックエンド サービスの名前)をクリックし、[編集] をクリックします。

  5. [バックエンド サービスの詳細] ページで、[詳細構成] をクリックします。

  6. [セッション アフィニティ] で、必要なセッション アフィニティのタイプをメニューから選択します。

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

gcloud

次のコマンドを使用して、l7-xlb-backend-service バックエンド サービスをさまざまなタイプのセッション アフィニティに更新します。

gcloud compute backend-services update l7-xlb-backend-service \
    --session-affinity=GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP
    --region=us-west1

API

セッション アフィニティを設定するには、regionBackendServices/patch メソッドPATCH リクエストを行います。

PATCH https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/regionBackendServices/l7-xlb-backend-service
{
  "sessionAffinity": <var>"GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP"</var>
}

クライアント 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 \
         --region=REGION
      

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

      gcloud compute target-https-proxies update TARGET_HTTP_PROXY_NAME \
         --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
         --region REGION
      

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

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

外部アプリケーション ロードバランサで IAP を有効にする

IAP を有効または無効にするように構成できます(デフォルトは無効です)。有効にした場合、oauth2-client-idoauth2-client-secret の値を指定する必要があります。

IAP を有効にするには、バックエンド サービスを更新して、--iap=enabled フラグに oauth2-client-idoauth2-client-secret を追加します。

必要に応じて、Google Cloud コンソール、gcloud CLI、または API を使用して、Compute Engine リソースに対して IAP を有効にできます。

次のステップ