VM インスタンス グループのバックエンドを使用してグローバル外部プロキシ ネットワーク ロードバランサ(SSL プロキシ)を設定する

このドキュメントでは、ターゲット SSL プロキシと VM インスタンス グループのバックエンドを使用してグローバル外部プロキシ ネットワーク ロードバランサを設定する方法について説明します。始める前に、外部プロキシ ネットワーク ロードバランサの概要でこれらのロードバランサの仕組みを確認してください。

設定の概要

この例では、2 つのリージョン(REGION_AREGION_B)に存在するサービスの外部プロキシ ネットワーク ロードバランサを設定する方法を示しています。次のものを構成します。

  1. 2 つのリージョンに分散している 4 つのインスタンス
  2. インスタンスを保持するインスタンス グループ
  3. バックエンド コンポーネント。次のものが含まれます。
    • ヘルスチェック - インスタンスの正常性をモニタリングします。
    • バックエンド サービス - インスタンス グループをモニタリングし、構成された使用量を超過するのを防止します。
    • バックエンド - インスタンス グループを保持します。
  4. フロントエンド コンポーネント。次のものが含まれます。
    • SSL 証明書のリソース独自の SSL 証明書を指定するセルフマネージド証明書、またはすべてのドメインに有効な Google が発行する Google マネージド証明書を使用できます。詳しくは、SSL 証明書のタイプをご覧ください。
    • SSL 証明書を使用する SSL プロキシ自体
    • ユーザーのトラフィックをプロキシに送信する外部静的 IPv4 アドレスと転送ルール
    • ユーザーのトラフィックをプロキシに送信する外部静的 IPv6 アドレスと転送ルール
  5. ロードバランサおよびヘルス チェッカーからインスタンスへのトラフィックを許可するファイアウォール ルール
  6. SSL ポリシー(省略可)。SSL プロキシのロードバランサとクライアント間でネゴシエートされる SSL の機能を制御します。

構成が完了したら、その構成をテストします。

権限

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

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

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

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

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

コンソール

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. 別のリージョンにサブネットを追加するには、[サブネットを追加] をクリックして、前の手順を繰り返します。

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

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

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

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

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

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

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

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

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

  7. 別のリージョンにサブネットを追加するには、[サブネットを追加] をクリックして、前の手順を繰り返します。

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

gcloud

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

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

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

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

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

    gcloud compute networks subnets update SUBNET \
       --network=NETWORK \
       --stack-type=IPV4_ONLY \
       --range=10.1.2.0/24 \
       --region=REGION_A
    
    gcloud compute networks subnets update SUBNET_B \
       --stack-type=IPV4_ONLY \
       --ipv6-access-type=EXTERNAL \
       --network=NETWORK \
       --region=REGION_B
    

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

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

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

  • SUBNET: サブネットの名前

  • REGION_A または REGION_B: リージョンの名前

インスタンスとインスタンス グループを構成する

このセクションでは、インスタンスおよびインスタンス グループを作成し、インスタンス グループにインスタンスを追加する方法を説明します。本番環境システムであれば、通常はインスタンス テンプレートに基づくマネージド インスタンス グループが使用されますが、初期テストを行う場合にはこの設定を使用した方が迅速に行えます。

インスタンスを作成する

これらのインスタンスを作成する際にタグ ssl-lb を指定してください。タグは、後でファイアウォール ルールを定義するときに使用します。

Console

インスタンスの作成

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

    [VM インスタンス] に移動

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

  3. [名前] フィールドを ig-a に設定します。

  4. [リージョン] フィールドを REGION_A に設定します。

  5. [ゾーン] フィールドを ZONE_A に設定します。

  6. [詳細オプション] をクリックします。

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

    • [ネットワーク タグ] フィールドに「ssl-lb」と「allow-health-check-ipv6」を入力します。
  8. [ネットワーク インターフェース] セクションで、[編集] をクリックして、次の変更を行います。

    • ネットワークを選択します。
    • サブネットを選択します。

    • [IP スタックタイプ] フィールドで、[IPv4 と IPv6(デュアル スタック)] を選択します。

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

  9. [管理] をクリックします。[起動スクリプト] フィールドに次のスクリプトを入力します。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-a</h1></body></html>' | sudo tee /var/www/html/index.html
  10. 残りのフィールドはデフォルト値のままにします。

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

  12. 同じ設定で ig-b を作成します。ただし、次の点が異なります。

    1. [起動スクリプト] フィールドを次のように設定します。

      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>ig-b</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 同じ設定で ig-c を作成します。ただし、次の点が異なります。

    1. [リージョン] フィールドを REGION_B に設定します。
    2. [ゾーン] フィールドを ZONE_B に設定します。
    3. [起動スクリプト] を次のように設定します。

      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>ig-c</h1></body></html>' | sudo tee /var/www/html/index.html
  14. 同じ設定で ig-d を作成します。ただし、次の点が異なります。

    1. [リージョン] フィールドを REGION_B に設定します。
    2. [ゾーン] フィールドを ZONE_B に設定します。
    3. [起動スクリプト] を次のように設定します。

      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo a2ensite default-ssl
      sudo a2enmod ssl
      sudo service apache2 restart
      echo '<!doctype html><html><body><h1>ig-d</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud

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

  1. ゾーン ZONE_Aig-a を作成します。

    gcloud compute instances create ig-a \
       --image-family debian-10 \
       --image-project debian-cloud \
       --tags ssl-lb,allow-health-check-ipv6 \
       --subnet SUBNET \
       --zone ZONE_A \
       --stack-type=IPv4_IPv6 \
       --metadata startup-script="#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo service apache2 restart
         echo '<!doctype html><html><body><h1>ig-a</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  2. ゾーン ZONE_Aig-b を作成します。

    gcloud compute instances create ig-b \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb,allow-health-check-ipv6 \
      --subnet SUBNET \
      --zone=ZONE_A \
      --stack-type=IPv4_IPv6 \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-b</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  3. ゾーン ZONE_Big-c を作成します。

    gcloud compute instances create ig-c \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb,allow-health-check-ipv6 \
      --subnet SUBNET \
      --region=REGION_B \
      --zone=ZONE_B \
      --stack-type=IPv4_IPv6 \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-c</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    
  4. ゾーン ZONE_Big-d を作成します。

    gcloud compute instances create ig-d \
      --image-family=debian-10 \
      --image-project=debian-cloud \
      --tags=ssl-lb,allow-health-check-ipv6 \
      --subnet SUBNET \
      --region=REGION_B \
      --zone=ZONE_B \
      --stack-type=IPv4_IPv6 \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>ig-d</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    

各ゾーンでのインスタンス グループの作成とインスタンスの追加

コンソール

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

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

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

  3. [新しい非マネージド インスタンス グループ] をクリックします。

  4. [名前] フィールドを us-ig1 に設定します。

  5. [REGION_A] を選択します。

  6. [ゾーン] フィールドを ZONE_A に設定します。

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

  8. サブネットを選択します。

  9. [ポート マッピング] で、[ポートを追加] をクリックします。ロードバランサは、名前付きポートを介してインスタンス グループにトラフィックを送信します。名前付きポートを作成し、受信トラフィックを特定のポート番号にマッピングします。

    1. [ポート名] に「ssl-lb」を入力し、[ポート番号] に「443」を入力します。
  10. [VM インスタンス] リストで、ig-aig-b を選択します。

  11. その他の設定はそのまま使用します。

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

  13. 上記のステップを繰り返します(次のように設定します)。

    • 名前: us-ig2
    • リージョン: REGION_B
    • ゾーン: ZONE_B
    • ポート名: ssl-lb
    • ポート番号: 443
    • インスタンス: ig-cig-d
  14. 2 つのインスタンス グループが作成され、各インスタンス グループに 2 つのインスタンスが含まれることを確認します。

gcloud

  1. us-ig1 インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-ig1 --zone ZONE_A
    
  2. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_A
    
  3. ig-aig-bus-ig1 に追加します。

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances=ig-a,ig-b \
        --zone=ZONE_A
    
  4. us-ig2 インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone ZONE_B
    
  5. インスタンス グループの名前付きポートを設定します。

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_B
    
  6. ig-cig-dus-ig2 に追加します。

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances=ig-c,ig-d \
        --zone=ZONE_B
    

これで、それぞれが 2 つのインスタンスを持つ 2 つのリージョンに 1 つのインスタンス グループができました。

SSL ロードバランサのファイアウォール ルールの作成

ロードバランサとヘルス チェッカーからインスタンスへのトラフィックを許可するファイアウォール ルールを構成します。

コンソール

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

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

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

  3. [名前] フィールドに「allow-ssl-lb-and-health」と入力します。

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

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

  6. [ターゲットタグ] を ssl-lb に設定します。

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

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

  9. [プロトコルとポート] で、[指定したプロトコルとポート] を tcp:443 に設定します。

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

gcloud

gcloud compute firewall-rules create allow-ssl-lb-and-health \
  --source-ranges=130.211.0.0/22,35.191.0.0/16 \
  --target-tags=ssl-lb \
  --allow=tcp:443

Google マネージド証明書を使用している場合は、証明書リソースのステータスが ACTIVE であることを確認します。詳しくは、Google マネージド SSL 証明書リソースのステータスをご覧ください。

gcloud compute ssl-certificates list

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

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

コンソール

構成を開始する

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

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

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

基本構成

[名前] を my-ssl-lb に設定します。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド タイプ] で [インスタンス グループ] を選択します。
  3. [プロトコル] を [SSL] に設定します。
  4. [IP アドレス選択ポリシー] リストで、[IPv6 優先] を選択します。
  5. [名前付きポート] に「ssl-lb」と入力します。
  6. [タイムアウト] のデフォルト値を受け入れます。
  7. [バックエンド タイプ] を [インスタンス グループ] に設定したままにします。
  8. 最初のバックエンドを構成します。

      IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには:

      • [IP スタックタイプ] で IPv4 and IPv6 (dual-stack) を選択します。
    1. [新しいバックエンド] で、インスタンス グループ us-ig1 を選択します。
    2. [ポート番号] を 443 に設定します。
    3. 残りの値はデフォルト値を使用します。
  9. 2 番目のバックエンドを構成します。
    1. [バックエンドを追加] をクリックします。
    2. IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには:

      • [IP スタックタイプ] で IPv4 and IPv6 (dual-stack) を選択します。
    3. インスタンス グループ us-ig2 を選択します。
    4. [ポート番号] を 443 に設定します。
    5. [完了] をクリックします。
  10. ヘルスチェックを構成します。
    1. [ヘルスチェック] で [ヘルスチェックを作成] を選択します。
    2. ヘルスチェックの名前my-ssl-health-check に設定します。
    3. [プロトコル] で [SSL] を選択します。
    4. 残りの値はデフォルト値を使用します。
    5. [保存して次へ] をクリックします。
  11. Google Cloud コンソールで、[バックエンドの構成] の横にチェックマークが表示されていることを確認します。チェックマークがない場合は、すべての手順を完了したことを再度確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
    1. 最初の転送ルールを追加します。
    2. [名前] に「my-ssl-lb-forwarding-rule」と入力します。
    3. [プロトコル] で [SSL] を選択します。
    4. [IP アドレス] で [IP アドレスを作成] を選択します。
      1. [名前] に「ssl-lb-static-ipv4」と入力します。
      2. [予約] をクリックします。
    5. [証明書] の下で、[新しい証明書の作成] を選択します。
    6. [名前] に「my-ssl-cert」と入力します。
    7. [証明書をアップロードする] を選択した場合は、次の操作を行います。
      1. 証明書を貼り付けるか、[アップロード] をクリックして証明書ファイルに移動します。
      2. 秘密鍵を貼り付けるか、[アップロード] をクリックして秘密鍵ファイルに移動します。
    8. [Google マネージドの証明書を作成する] を選択した場合は、ドメインを入力します。
      1. 追加のドメインを入力するには、[ドメインの追加] をクリックします。
      2. [作成] をクリックします。
    9. プライマリ SSL 証明書リソースに加えて証明書リソースを追加するには、[その他の証明書] をクリックします。次に、[証明書] メニューから別の証明書を選択するか、[新しい証明書の作成] をクリックし、前述のステップの操作を行います。
      1. 省略可: SSL ポリシーを作成するには:
      2. [SSL ポリシー] で、[ポリシーを作成] を選択します。
      3. [名前] に「my-ssl-policy」と入力します。
      4. [TLS の最小バージョン] で [TLS 1.0] を選択します。
      5. [プロファイル] で [モダン] を選択します。[有効な機能] と [無効な機能] が表示されます。
      6. [保存] をクリックします。
    10. 省略可: [プロキシのプロトコル] をオンにします。
    11. [完了] をクリックします。
  2. Google Cloud コンソールで、[フロントエンドの構成] の横に緑色のチェックマークが表示されていることを確認します。チェックマークがない場合には、前のすべてのステップが完了していることを再度確認してください。
  3. [完了] をクリックします。

確認と完了

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

gcloud

  1. ヘルスチェックを作成します。
       gcloud compute health-checks create ssl my-ssl-health-check --port=443
       
  2. バックエンド サービスを作成します。
       gcloud beta compute backend-services create my-ssl-lb \
           --load-balancing-scheme EXTERNAL_MANAGED \
           --global-health-checks \
           --protocol=SSL \
           --port-name=ssl-lb \
           --ip-address-selection-policy=PREFER_IPV6 \
           --health-checks=my-ssl-health-check \
           --timeout=5m \
           --global
       

    あるいは、--protocol=TCP を使用して、ロードバランサからインスタンスへの通信の暗号化を構成することもできます。

  3. バックエンド サービスにインスタンス グループを追加します。

       gcloud beta compute backend-services add-backend my-ssl-lb \
           --instance-group=us-ig1 \
           --instance-group-zone=ZONE_A \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
       gcloud beta compute backend-services add-backend my-ssl-lb \
           --instance-group=us-ig2 \
           --instance-group-zone=ZONE_B \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
  4. SSL 証明書リソースを構成します。

    セルフマネージド証明書を使用する場合は、少なくともアップロードする SSL 証明書が 1 つ存在している必要があります。存在しない場合は、SSL 証明書の概要をご覧ください。複数の SSL 証明書を使用する場合は、一度に 1 つずつ作成する必要があります。

    セルフマネージド SSL 証明書を使用していて、秘密鍵と署名済み証明書がない場合は、テスト用に自己署名証明書を作成して使用できます。

    セルフマネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。

       gcloud compute ssl-certificates create my-ssl-cert \
           --certificate=CRT_FILE_PATH \
           --private-key=KEY_FILE_PATH
       

    Google マネージド SSL 証明書リソースを作成するには、次のコマンドを実行します。

       gcloud compute ssl-certificates create www-ssl-cert \
           --domains=DOMAIN_1,DOMAIN_2
       
  5. ターゲット SSL プロキシを構成します。

    外部プロキシ ネットワーク ロードバランサは、1~15 件の SSL 証明書を持つターゲット SSL プロキシの作成をサポートしています。次のコマンドを実行する前に、SSL 証明書ごとにそのリソースを作成する必要があります。

    プロキシ ヘッダーをオンにする場合は、none ではなく PROXY_V1 に設定します。オプションで、ターゲット プロキシに SSL ポリシーを関連付けることができます。その場合、先にポリシーを作成します。

       gcloud compute ssl-policies create my-ssl-policy \
           --profile=MODERN \
           --min-tls-version=1.0
       

    次に、ポリシーをターゲット プロキシに接続します。

       gcloud beta compute target-ssl-proxies create my-ssl-lb-target-proxy \
           --backend-service=my-ssl-lb \
           --ssl-certificates=[SSL_CERT_1][,[SSL_CERT_2],...] \
           --ssl-policy=my-ssl-policy \
           --proxy-header=NONE
       
  6. グローバル静的 IP アドレスを予約します。

    お客様がロード バランシングされたサービスにアクセスする際には、これらの IP アドレスを使用します。

       gcloud compute addresses create ssl-lb-static-ipv4 \
           --ip-version=IPV4 \
           --global
       
       gcloud compute addresses create ssl-lb-static-ipv6 \
           --ip-version=IPV6 \
           --global
       
  7. グローバル転送ルールを構成します。

    ターゲット プロキシに関連付けるグローバル転送ルールを作成します。LB_STATIC_IPLB_STATIC_IPV6 は、グローバル静的 IP アドレスの予約で生成した IP アドレスに置き換えます。

       gcloud beta compute forwarding-rules create my-ssl-lb-forwarding-rule \
           --load-balancing-scheme EXTERNAL_MANAGED \
           --global \
           --target-ssl-proxy=my-ssl-lb-target-proxy \
           --address=LB_STATIC_IP \
           --ports=443
       

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

ロードバランサが作成されたら、ロードバランサに関連付けられた 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 を使用する場合は、レコードの追加、変更、削除をご覧ください。

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

ウェブブラウザで、HTTPS を使用して静的 IP アドレスに接続します。このテスト設定では、インスタンスは自己署名証明書を使用しています。このため、ページに初めてアクセスしたときに、ブラウザに警告が表示されます。警告は無視してクリックし、実際のページを表示してください。IP_ADDRESS は、作成した IPv4 または IPv6 アドレスに置き換えます。

https://IP_ADDRESS

ユーザーに最も近いリージョンからいずれかのホストが表示されます。そのリージョンの他のインスタンスが表示されるまでページをリロードします。他のリージョンからインスタンスを表示するには、最も近いリージョンでインスタンスを停止します。

また、ローカルマシンのコマンドラインから curl を実行できます。SSL プロキシで自己署名証明書を使用する場合は、-k も指定する必要があります。curl -k オプションを使用すれば、自己署名証明書を使用する場合や証明書がまったくない場合でも curl が機能します。通常の証明書がある場合はこのパラメータを削除してもかまいません。独自のサイトをテストする場合にのみ、-k パラメータを使用してください。通常の状況下では有効な証明書が重要なセキュリティ手段です。証明書の警告は無視しないでください。

IP_ADDRESS は、作成した IPv4 または IPv6 アドレスに置き換えます。

curl -k https://IP_ADDRESS

ロードバランサにアクセスできない場合は、設定のトラブルシューティングに記載されている手順をお試しください。

追加の構成オプション

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

クライアント接続情報を保持するための PROXY プロトコル

プロキシ ネットワーク ロードバランサは、クライアントからの TCP 接続を終了して、インスタンスへの新しい接続を作成します。デフォルトでは、元のクライアント IP とポート情報は保持されません。

元の接続情報を保持してインスタンスに送信するには、PROXY プロトコル バージョン 1 を有効にします。このプロトコルは、送信元 IP アドレス、宛先 IP アドレス、ポート番号を含む追加ヘッダーをインスタンスへリクエストの構成部分として送信します。

プロキシ ネットワーク ロードバランサのバックエンド インスタンスが PROXY プロトコル ヘッダーをサポートするサーバーを実行していることを確認します。サーバーが PROXY プロトコル ヘッダーをサポートするように構成されていない場合、バックエンド インスタンスは空のレスポンスを返します。

ユーザー トラフィックに PROXY プロトコルを設定する場合は、ヘルスチェックにも設定します。同じポートでヘルスチェックとコンテンツの処理を行う場合は、ヘルスチェックの --proxy-header がロードバランサの設定と一致するように設定します。

通常、PROXY プロトコルのヘッダーは、ユーザーが読み取り可能な次の形式の 1 行のテキストです。

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

次の例は、PROXY プロトコルを示しています。

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

上の例では、クライアント IP は 192.0.2.1、ロード バランシング IP は 198.51.100.1、クライアント ポートは 15221、宛先ポートは 110 です。

クライアント IP が不明の場合、ロードバランサは PROXY プロトコルのヘッダーを次の形式で生成します。

PROXY UNKNOWN\r\n

ターゲット プロキシの PROXY プロトコル ヘッダーを更新する

このページのロードバランサの設定例では、プロキシ ネットワーク ロードバランサの作成中に PROXY プロトコル ヘッダーを有効にする方法について説明します。既存のターゲット プロキシの PROXY プロトコル ヘッダーを変更するには、次の操作を行います。

コンソール

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

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

  2. ロードバランサの [編集] をクリックします。
  3. [フロントエンドの構成] をクリックします。
  4. [プロキシのプロトコル] フィールドの値を [オン] に変更します。
  5. [更新] をクリックして、変更を保存します。

gcloud

次のコマンドで、--proxy-header フィールドを編集し、必要に応じて NONE または PROXY_V1 に設定します。

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --proxy-header=[NONE | PROXY_V1]

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

以下の手順は、サンプルの SSL プロキシ ロードバランサのバックエンド サービスを更新して、バックエンド サービスがクライアント IP アフィニティを使用できるようにする方法を示しています。

クライアント IP アフィニティが有効になっている場合、ロードバランサは、クライアントの IP アドレスとロードバランサの IP アドレス(外部転送ルールの外部 IP アドレス)から作成されたハッシュに基づいて、特定のクライアントのリクエストを同じバックエンド VM に送信します。

Console

クライアント IP セッション アフィニティを有効にするには:

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

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

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

  3. [my-ssl-lb](この例で作成したバックエンド サービスの名前)をクリックし、[編集] をクリックします。

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

  5. [セッション アフィニティ] で、メニューから [クライアント IP] を選択します。

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

gcloud

クライアント IP セッション アフィニティを指定して、my-ssl-lb バックエンド サービスを更新するには、次のコマンドを使用します。

gcloud compute backend-services update my-ssl-lb \
    --global \
    --session-affinity=CLIENT_IP

API

クライアント IP セッション アフィニティを設定するには、backendServices/patch メソッドに PATCH リクエストを送信します。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-ssl-lb
{
  "sessionAffinity": "CLIENT_IP"
}

コネクション ドレインを有効にする

バックエンド サービスでコネクション ドレインを有効にすると、トラフィックを処理しているインスタンスの停止、手動削除、オートスケーラーによる削除が発生した場合に、ユーザーに対する中断を最小限に抑えることができます。コネクション ドレインについて詳しくは、コネクション ドレインの有効化のドキュメントをご覧ください。

次のステップ