VM インスタンス グループのバックエンドを使用して複数のプロトコルに内部パススルー ネットワーク ロードバランサを設定する

このページでは、複数のプロトコルのトラフィックをロードバランスする内部パススルー ネットワーク ロードバランサの作成方法について説明します。

TCP と UDP を含む複数のプロトコルのロードバランサを構成するには、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。この転送ルールは、プロトコルが UNSPECIFIED に設定されたバックエンド サービスを参照します。

この例では、1 つの内部パススルー ネットワーク ロードバランサを使用して、us-west1 リージョンのバックエンド VM 全体にトラフィックを分散します。ロードバランサには、TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH、GRE を処理するため、プロトコルが L3_DEFAULT の転送ルールがあります。

プロトコルに基づく IPv4 トラフィックと IPv6 トラフィックのロード バランシング。単一のゾーン インスタンス グループへの接続分散を管理するために、バックエンド サービスが使用されています。
複数のプロトコルに対する内部パススルー ネットワーク ロードバランサ(クリックして拡大)

始める前に

権限

このガイドで必要になる権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセスの管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

L3_DEFAULT トラフィックにロードバランサを設定する

このセクションの手順では、次の構成について説明します。

  • lb-network という名前のカスタムモードの VPC ネットワークを使用する例。IPv4 トラフィックのみを処理する場合は、自動モード ネットワークを使用できます。ただし、IPv6 トラフィックにはカスタムモードのサブネットが必要です。
  • IPv4 トラフィックに必要なシングル スタック サブネット(stack-typeIPv4 に設定)。カスタムモードの VPC ネットワークでシングルスタック サブネットを作成する場合は、サブネットに IPv4 サブネット範囲を選択します。IPv6 トラフィックには、デュアルスタック サブネット(stack-typeIPv4_IPv6 に設定)も必要です。カスタムモードの VPC ネットワークにデュアルスタック サブネットを作成する場合は、サブネットに IPv6 アクセスタイプを選択します。この例では、サブネットの ipv6-access-type パラメータを INTERNAL に設定します。このサブネット上の新しい VM には、内部 IPv4 アドレスと内部 IPv6 アドレスの両方を割り当てることができます。
  • バックエンド VM への受信接続を許可するファイアウォール ルール。
  • この例で使用されているバックエンド インスタンス グループとロードバランサのコンポーネントは、次のリージョンとサブネットに存在します。
    • リージョン: us-west1
    • サブネット: lb-subnet(プライマリ IPv4 アドレス範囲は 10.1.2.0/24)。サブネットに構成する IPv4 アドレス範囲を選択します。IPv6 アドレス範囲は自動的に割り当てられます。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。
  • ゾーン us-west1-a のマネージド インスタンス グループのバックエンド VM。
  • バックエンドへの接続をテストするクライアント VM。
  • 次のコンポーネントを含む内部パススルー ネットワーク ロードバランサ。
    • バックエンド サービスのヘルスチェック。
    • ゾーン インスタンス グループへの接続を管理するために、プロトコルが UNSPECIFIED に設定された us-west1 リージョンのバックエンド サービス。
    • プロトコルが L3_DEFAULT に設定され、ポートが ALL に設定された転送ルール。

ネットワーク、リージョン、サブネットを構成する

内部 IPv6 範囲を持つサブネットを構成するには、Virtual Private Cloud(VPC)ネットワーク ULA の内部 IPv6 範囲を有効にします。内部 IPv6 サブネット範囲は、この範囲から割り振られます。サンプルのネットワークとサブネットを作成する方法は次のとおりです。

コンソール

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

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

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

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

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

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

    1. [VPC ネットワーク ULA の内部 IPv6 範囲] で、[有効] を選択します。
    2. [ULA の内部 IPv6 範囲を割り当てる] で、[自動] または [手動] を選択します。
  5. [サブネット作成モード] で [カスタム] を選択します。

  6. [新しいサブネット] セクションで、サブネットに次の構成パラメータを指定します。

    1. [名前] に「lb-subnet」と入力します。
    2. [リージョン] で us-west1 を選択します。
    3. デュアルスタック サブネットを作成するには、[IP スタックタイプ] で [IPv4 と IPv6(デュアルスタック)] を選択します。
    4. [IPv4 範囲] に「10.1.2.0/24」と入力します。
    5. [IPv6 アクセスタイプ] で [内部] を選択します。
  7. [完了] をクリックします。

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

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

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

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

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

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

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

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

gcloud

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

  1. 新しいカスタムモードの VPC ネットワークを作成するには、gcloud compute networks create コマンドを実行します。

    このネットワークのサブネットで内部 IPv6 範囲を構成するには、--enable-ula-internal-ipv6 フラグを使用します。このオプションでは、Google Cloud が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 ULA 接頭辞を割り当てます。

    gcloud compute networks create lb-network \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6
    
  2. lb-network 内に us-west1 リージョンのバックエンドのサブネットを作成します。

    サブネットを作成するには、gcloud compute networks subnets create コマンドを実行します。

    gcloud compute networks subnets create lb-subnet \
     --network=lb-network \
     --range=10.1.2.0/24 \
     --region=us-west1 \
     --stack-type=IPV4_IPV6 --ipv6-access-type=INTERNAL
    

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

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

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

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

API

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

  1. 新しいカスタムモードの VPC ネットワークを作成します。networks.insert メソッドPOST リクエストを送信します。

    このネットワークのサブネットで内部 IPv6 範囲を構成するには、enableUlaInternalIpv6true に設定します。このオプションは、Google が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内から /48 範囲を割り当てます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
      "autoCreateSubnetworks": false,
      "name": "lb-network",
      "mtu": MTU,
      "enableUlaInternalIpv6": true,
    }
    

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

    • PROJECT_ID: VPC ネットワークが作成されているプロジェクトの ID。
    • MTU: ネットワークの最大伝送単位。MTU は、1460(デフォルト)または 1500 のいずれかです。MTU を 1500 に設定する前に、最大伝送単位の概要を確認してください。
  2. subnetworks.insert メソッドPOST リクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
    {
    "ipCidrRange": "10.1.2.0/24",
    "network": "lb-network",
    "name": "lb-subnet"
    "stackType": IPV4_IPV6,
    "ipv6AccessType": Internal
    }
    

IPv4 トラフィックのみの場合は、次の操作を行います。

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

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
    {
    "name": "lb-network",
    "autoCreateSubnetworks": false
    }
    
  2. subnetworks.insert メソッドに 2 つの POST リクエストを送信します。

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

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

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

  • fw-allow-lb-access: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールで、10.1.2.0/24 の範囲にある送信元からのトラフィックを許可します。このルールは、サブネットにあるクライアントからの受信トラフィックを許可します。

  • fw-allow-lb-access-ipv6: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールであり、IPv6 の範囲の送信元からのトラフィックを許可するもの。このルールは、サブネットにあるすべてのクライアントからの IPv6 受信トラフィックを許可します。

  • fw-allow-ssh: ロードバランスされたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート 22 への SSH 接続が許可されます。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを許可するように指定できます。この例では、ターゲットタグ allow-ssh を使用して、適用する VM を識別させています。

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

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

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

コンソール

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

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

  2. IPv4 TCP、UDP、ICMP トラフィックがバックエンド インスタンス グループ ig-a に到達できるようにするには:

    • [ファイアウォール ルールを作成] をクリックします。
    • 名前: fw-allow-lb-access
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: ネットワーク内のすべてのインスタンス
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.1.2.0/24
    • [プロトコルとポート] で [指定したプロトコルとポート] を選択します。
      • [TCP] を選択して「ALL」と入力します。
      • [UDP] を選択します。
      • [その他] を選択して「ICMP」と入力します。
  3. [作成] をクリックします。

  4. 受信 SSH 接続を許可するには:

    • [ファイアウォール ルールを作成] をクリックします。
    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート: [指定されたプロトコルとポート] を選択して、「tcp:22」を入力します。
  5. [作成] をクリックします。

  6. IPv6 TCP、UDP、ICMP トラフィックがバックエンド インスタンス グループ ig-a に到達できるようにするには:

    • [ファイアウォール ルールを作成] をクリックします。
    • 名前: fw-allow-lb-access-ipv6
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: ネットワーク内のすべてのインスタンス
    • ソースフィルタ: IPv6 範囲
    • 送信元 IPv6 範囲: lb-subnet に割り当てられた IPV6_ADDRESS
    • [プロトコルとポート] で [指定したプロトコルとポート] を選択します。
      • [TCP] を選択して「0-65535」と入力します。
      • [UDP] を選択します。
      • [その他] を選択し、ICMPv6 プロトコルに「58」と入力します。
  7. [作成] をクリックします。

  8. Google Cloud IPv6 ヘルスチェックを許可するには:

    • [ファイアウォール ルールを作成] をクリックします。
    • 名前: fw-allow-health-check-ipv6
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check-ipv6
    • ソースフィルタ: IPv6 範囲
    • 送信元 IPv6 範囲: 2600:2d00:1:b029::/64
    • プロトコルとポート: すべて許可
  9. [作成] をクリックします。

  10. Google Cloud IPv4 ヘルスチェックを許可するには:

    • [ファイアウォール ルールを作成] をクリックします。
    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート: すべて許可
  11. [作成] をクリックします。

gcloud

  1. IPv4 TCP トラフィックがバックエンド インスタンス グループ ig-a に到達できるようにするには、次のルールを作成します。

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. ネットワーク タグ allow-ssh を使用して VM への SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. IPv6 トラフィックがバックエンド インスタンス グループ ig-a に到達できるようにするには、次のルールを作成します。

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    IPV6_ADDRESS は、lb-subnet に割り当てられた IPv6 アドレスに置き換えます。

  4. Google Cloud ヘルスチェックを許可する fw-allow-health-check ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    
  5. Google Cloud IPv6 ヘルスチェックを許可する fw-allow-health-check-ipv6 ルールを作成します。

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

API

  1. fw-allow-lb-access ファイアウォール ルールを作成するには、firewalls.insert メソッドPOST リクエストを送信します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24"
    ],
    "allPorts": true,
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-lb-access-ipv6 ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allPorts": true,
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "58"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    IPV6_ADDRESS は、lb-subnet に割り当てられた IPv6 アドレスに置き換えます。

  3. fw-allow-ssh ファイアウォール ルールを作成するには、firewalls.insert メソッドPOST リクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. fw-allow-health-check ファイアウォール ルールを作成するには、firewalls.insert メソッドPOST リクエストを送信します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-health-check-ipv6 ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

バックエンド VM とインスタンス グループを作成する

このロード バランシングのシナリオでは、Compute Engine ゾーン マネージド インスタンス グループを作成し、Apache ウェブサーバーをインストールします。

IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、バックエンド VM をデュアルスタックとして構成します。VM の stack-typeIPv4_IPv6 に設定します。VM は、サブネットから ipv6-access-type 設定(この例では INTERNAL)も継承します。IPv6 の要件の詳細については、内部パススルー ネットワーク ロードバランサの概要: 転送ルールをご覧ください。

既存の VM をバックエンドとして使用する場合は、gcloud compute instances network-interfaces update コマンドを使用して VM をデュアルスタックに更新します。

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

説明を簡単にするため、バックエンド VM では Debian GNU/Linux 10 を実行します。

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

コンソール

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

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

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

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「vm-a1」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    4. [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] をクリックします。
    5. [管理] をクリックし、次のスクリプトを [起動スクリプト] フィールドにコピーします。起動スクリプトを修正し、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするように構成します。

      #! /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
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. [ネットワーキング] をクリックします。

      1. [ネットワーク タグ] に allow-sshallow-health-check-ipv6 を追加します。
      2. [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
        • ネットワーク: lb-network
        • サブネットワーク: lb-subnet
        • IP スタックタイプ: IPv4 および IPv6(デュアルスタック)
    7. [作成] をクリックします。

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

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

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

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「vm-a1」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    4. [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] をクリックします。
    5. [管理] をクリックし、次のスクリプトを [起動スクリプト] フィールドにコピーします。起動スクリプトを修正し、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするように構成します。

      #! /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
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. [ネットワーキング] をクリックします。

      1. [ネットワーク タグ] に allow-sshallow-health-check を追加します。
      2. [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
        • ネットワーク: lb-network
        • サブネットワーク: lb-subnet
        • IP スタックタイプ: IPv4(シングルスタック)
    7. [作成] をクリックします。

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

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

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] に「ig-a」と入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で us-west1 を選択します。
    6. [ゾーン] で us-west1-a を選択します。
    7. [インスタンス テンプレート] で [vm-a1] を選択します。
    8. グループ内に作成するインスタンスの数を指定します。

      この例では、[自動スケーリング] で次のオプションを指定します。

      • [自動スケーリング モード] で [Off:do not autoscale] を選択します。
      • [インスタンスの最大数] に「2」と入力します。
    9. [作成] をクリックします。

gcloud

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

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

    起動スクリプトを修正し、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするように構成します。

    IPv4 トラフィックと IPv6 トラフィックの両方を処理する場合は、次のコマンドを使用します。

    gcloud compute instance-templates create vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --ipv6-network-tier=PREMIUM \
        --stack-type=IPv4_IPv6 \
        --tags=allow-ssh \
        --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    

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

    gcloud compute instance-templates create vm-a1 \
        --region=us-west1 \
        --network=lb-network \
        --subnet=lb-subnet \
        --tags=allow-ssh \
        --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

    gcloud compute instance-groups managed create ig-a \
        --zone us-west1-a \
        --size 2 \
        --template vm-a1
    

API

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

  1. instances.insert メソッドPOST リクエストを送信して VM を作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check-ipv6",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4_IPV6",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "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\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    

IPv4 トラフィックを処理する手順は次のとおりです。

  1. instances.insert メソッドPOST リクエストを送信して VM を作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "vm-a1",
    "tags": {
     "items": [
       "allow-health-check",
       "allow-ssh"
     ]
    },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
     {
       "stackType": "IPV4",
       "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
       "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
       "accessConfigs": [
         {
           "type": "ONE_TO_ONE_NAT",
           "name": "external-nat",
           "networkTier": "PREMIUM"
         }
       ]
     }
    ],
    "disks": [
     {
       "type": "PERSISTENT",
       "boot": true,
       "mode": "READ_WRITE",
       "autoDelete": true,
       "deviceName": "vm-a1",
       "initializeParams": {
         "sourceImage": "projects/debian-cloud/global/images/DEBIAN_IMAGE_NAME",
         "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/pd-standard",
         "diskSizeGb": "10"
       }
     }
    ],
    "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\nsed -ire "s/^Listen 80$/Listen 8080/g" /etc/\\napache2/ports.conf\nsystemctl restart apache2"
       }
     ]
    },
    "scheduling": {
     "preemptible": false
    },
    "deletionProtection": false
    }
    
  2. instanceGroups.insert メソッドPOST リクエストを送信してインスタンス グループを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups
    
    {
    "name": "ig-a",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
    }
    
  3. instanceGroups.addInstances メソッドPOST リクエストを送信して、各インスタンス グループにインスタンスを追加します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances
    
    {
    "instances": [
    {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1"
    }
    ]
    }
    

クライアント VM を作成する

この例では、クライアント VM をバックエンド(サーバー)VM と同じリージョンに作成します。クライアントを使用するのは、ロードバランサの構成を検証し、テスト セクションで説明されている想定される動作を示すためです。

IPv4 トラフィックと IPv6 トラフィックの場合:

コンソール

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

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

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

  3. [名前] を vm-client-ipv6 に設定します。

  4. [ゾーン] を us-west1-a に設定します。

  5. [管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] をクリックして、次のように変更します。

    • [ネットワーキング] をクリックして allow-sshネットワーク タグに追加します。
    • [ネットワーク インターフェース] で、[編集] をクリックして次の変更を行い、[完了] をクリックします。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
      • IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
      • プライマリ内部 IP: エフェメラル(自動)
      • 外部 IP: エフェメラル
  6. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a ゾーンにあり、バックエンド VM と同じサブネットを使用しています。

gcloud compute instances create vm-client-ipv6 \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client-ipv6",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

IPv4 トラフィックの場合:

コンソール

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

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

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

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

  4. [ゾーン] に「us-west1-a」と入力します。

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

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

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
  7. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a ゾーンにあり、バックエンド VM と同じサブネットを使用しています。

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert メソッドPOST リクエストを送信します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances
 {
    "name": "vm-client",
    "tags": {
      "items": [
        "allow-ssh"
      ]
  },
    "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
    "canIpForward": false,
    "networkInterfaces": [
      {
        "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
        "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
        "accessConfigs": [
          {
            "type": "ONE_TO_ONE_NAT",
            "name": "external-nat",
            "networkTier": "PREMIUM"
          }
        ]
      }
    ],
    "disks": [
      {
        "type": "PERSISTENT",
        "boot": true,
        "mode": "READ_WRITE",
        "autoDelete": true,
        "deviceName": "vm-client",
        "initializeParams": {
          "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
          "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
          "diskSizeGb": "10"
        }
      }
    ],
    "scheduling": {
      "preemptible": false
     },
    "deletionProtection": false
  }
  

ロードバランサ コンポーネントを構成する

複数のプロトコルに対して 1 つのロードバランサを作成します。

gcloud

  1. ポート 80 の HTTP ヘルスチェックを作成します。このヘルスチェックは、ig-a インスタンス グループのバックエンドの正常性を確認するために使用されます。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. プロトコルを UNSPECIFIED に設定してバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb-l3-default \
        --load-balancing-scheme=internal \
        --protocol=UNSPECIFIED \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. バックエンド サービスにインスタンス グループを追加します。

    gcloud compute backend-services add-backend be-ilb-l3-default \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  4. IPv6 トラフィックの場合: サポートされているすべての IPv6 プロトコル トラフィックを処理するように、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。すべてのポートに L3_DEFAULT 転送ルールを構成する必要があります。

    gcloud compute forwarding-rules create fr-ilb-ipv6 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --subnet=lb-subnet \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1 \
       --ip-version=IPV6
    
  5. IPv4 トラフィックの場合: サポートされているすべての IPv4 プロトコル トラフィックを処理するように、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。すべてのポートに L3_DEFAULT 転送ルールを構成する必要があります。10.1.2.99 を内部 IP アドレスとして使用します。

    gcloud compute forwarding-rules create fr-ilb-l3-default \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=lb-subnet \
       --address=10.1.2.99 \
       --ip-protocol=L3_DEFAULT \
       --ports=ALL \
       --backend-service=be-ilb-l3-default \
       --backend-service-region=us-west1
    

API

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

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks
    
    {
    "name": "hc-http-80",
    "type": "HTTP",
    "httpHealthCheck": {
     "port": 80
    }
    }
    
  2. regionBackendServices.insert メソッドPOST リクエストを送信してリージョン バックエンド サービスを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    
    {
    "name": "be-ilb-l3-default",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UNSPECIFIED",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  3. IPv6 トラフィックの場合: forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-ipv6",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "ipVersion": "IPV6",
    "networkTier": "PREMIUM"
    }
    
  4. IPv4 トラフィックの場合: forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-l3-default",
    "IPAddress": "10.1.2.99",
    "IPProtocol": "L3_DEFAULT",
    "allPorts": true,
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
    "networkTier": "PREMIUM"
    }
    

ロードバランサのテスト

次のテストでは、ロードバランサの構成を検証し、想定される動作を確認します。

クライアント VM からの接続をテストする

このテストでは、ロードバランサのバックエンド VM からではなく、個別のクライアント VM からロードバランサに接続します。

gcloud:IPv6

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. IPv6 転送ルール fr-ilb-ipv6 の説明を取得します。説明の IPV6_ADDRESS をメモします。

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. IPv6 接続のクライアントから、次のコマンドを実行します。IPV6_ADDRESS は、fr-ilb-ipv6 転送ルールのエフェメラル IPv6 アドレスに置き換えます。

    curl -m 10 -s http://IPV6_ADDRESS:80
    

    たとえば、割り当てられた IPv6 アドレスが [fd20:1db0:b882:802:0:46:0:0/96]:80 の場合、コマンドは次のようになります。

    curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    

gcloud:IPv4

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. IPv4 転送ルール fr-ilb の説明を取得します。

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  3. curl を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.html のコンテンツによる HTML レスポンスのテキストとして表示されます。予想されるレスポンスは Page served from: vm-a1 のようになります。

    curl http://10.1.2.99
    

    転送ルールは、ポート 8053 を処理するように構成されています。これらのポートにトラフィックを送信するには、次のように、IP アドレスの後にコロン(:)とポート番号を追加します。

    curl http://10.1.2.99:80
    

ロードバランサの IP アドレスに ping を実行する

このテストでは、ロードバランサの IP アドレスに対して ping を実行できます。このテストではこの想定される動作が示されます。

gcloud:IPv6

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
    
  2. ロードバランサの IPv6 アドレスに対して ping を試行します。IPV6_ADDRESS は、fr-ilb-ipv6 転送ルールのエフェメラル IPv6 アドレスに置き換えます。

    レスポンスが返されます。この例では、ping コマンドが機能します。

    ping6 IPV6_ADDRESS
    

    たとえば、割り当てられた IPv6 アドレスが [2001:db8:1:1:1:1:1:1/96] の場合、コマンドは次のようになります。

    ping6 2001:db8:1:1:1:1:1:1
    

    出力は次のようになります。

    @vm-client: ping IPV6_ADDRESS
    PING IPV6_ADDRESS (IPV6_ADDRESS) 56(84) bytes of data.
    64 bytes from IPV6_ADDRESS: icmp_seq=1 ttl=64 time=1.58 ms
    

gcloud:IPv4

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. ロードバランサの IPv4 アドレスに対して ping を試行します。レスポンスが返されます。この例では、ping コマンドが機能します。

    ping 10.1.2.99
    

    次のような出力が表示されます。

    @vm-client: ping 10.1.2.99
    PING 10.1.2.99 (10.1.2.99) 56(84) bytes of data.
    64 bytes from 10.1.2.99: icmp_seq=1 ttl=64 time=1.58 ms
    64 bytes from 10.1.2.99: icmp_seq=2 ttl=64 time=0.242 ms
    64 bytes from 10.1.2.99: icmp_seq=3 ttl=64 time=0.295 ms
    

追加の構成オプション

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

この例では静的内部 IP アドレスを予約できます。この構成により、複数の内部転送ルールが、異なるプロトコルおよび異なるポートで同じ IP アドレスを使用できるようになります。サンプルのロードバランサのバックエンドは、引き続きリージョン us-west1 に配置する必要があります。

次の図は、この例のアーキテクチャを示しています。

プロトコルに基づくトラフィックのロード バランシング。単一のゾーン インスタンス グループへの接続分散を管理するために、バックエンド サービスが使用されています。
静的内部 IP アドレスを使用する複数のプロトコルに対する内部パススルー ネットワーク ロードバランサ(クリックして拡大)。

次の転送ルール構成を使用することも検討できます。

  • 複数のポートを使用した転送ルール:

    • プロトコル TCP のポート 80,8080
    • プロトコル L3_DEFAULT のポート ALL
  • すべてのポートを含む転送ルール:

    • プロトコル TCP のポート ALL
    • プロトコル L3_DEFAULT のポート ALL

静的内部 IPv4 アドレスを予約する

10.1.2.99 に静的内部 IP アドレスを予約し、その --purpose フラグを SHARED_LOADBALANCER_VIP に設定します。多くの転送ルールで同じ内部 IP アドレスを使用できるようにするには、--purpose フラグを指定する必要があります。

gcloud

gcloud compute addresses create コマンドを使用します。

gcloud compute addresses create internal-lb-ipv4 \
    --region us-west1 \
    --subnet lb-subnet \
    --purpose SHARED_LOADBALANCER_VIP \
    --addresses 10.1.2.99

API

addresses.insert メソッドを呼び出します。PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

リクエストの本文には、addressTypeINTERNAL に設定)、アドレスの name、IP アドレスが属する subnetwork を含める必要があります。address10.1.2.99 として指定する必要があります。

{
  "addressType": "INTERNAL",
  "name": "internal-lb-ipv4",
  "subnetwork": "regions/us-west1/subnetworks/lb-subnet",
  "purpose": "SHARED_LOADBALANCER_VIP",
  "address": "10.1.2.99"
}

ロードバランサ コンポーネントを構成する

次のコンポーネントを使用して 3 つのロードバランサを構成します。

  • 最初のロードバランサには、プロトコル TCP とポート 80 の転送ルールがあります。ポート 80 で内部 IP アドレスに到達する TCP トラフィックは、TCP 転送ルールによって処理されます。
  • 2 番目のロードバランサには、プロトコル UDP とポート 53 の転送ルールがあります。ポート 53 の内部 IP アドレスに到達する UDP トラフィックは、UDP 転送ルールによって処理されます。
  • 3 番目のロードバランサには、プロトコル L3_DEFAULT とポート ALL の転送ルールがあります。TCP または UDP 転送ルールと一致しないトラフィックはすべて、L3_DEFAULT 転送ルールによって処理されます。
  • 3 つのロードバランサはすべて、転送ルールで同じ静的内部 IP アドレス(internal-lb-ipv4)を共有します。

最初のロードバランサを作成する

ポート 80 の TCP トラフィックを処理するロードバランサを作成します。

gcloud

  1. TCP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. バックエンド サービスにインスタンス グループを追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. バックエンド サービスの転送ルールを作成します。内部 IP アドレスには、予約済みの静的内部 IP アドレス(internal-lb-ipv4)を使用します。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

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

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb",
    "backends": [
     {
       "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
       "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "TCP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    

  2. Create the forwarding rule by making a POST request to the forwardingRules.insert method:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "TCP",
    "ports": [
     "80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
    "networkTier": "PREMIUM"
    }
    

2 つ目のロードバランサを作成する

ポート 53 の UDP トラフィックを処理する 2 つ目のロードバランサを作成します。

gcloud

  1. プロトコルを UDP に設定してバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb-udp \
        --load-balancing-scheme=internal \
        --protocol=UDP \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  2. バックエンド サービスにインスタンス グループを追加します。

    gcloud compute backend-services add-backend be-ilb-udp \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    
  3. バックエンド サービスの転送ルールを作成します。内部 IP アドレスには、予約済みの静的内部 IP アドレス(internal-lb-ipv4)を使用します。

    gcloud compute forwarding-rules create fr-ilb-udp \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=internal-lb-ipv4 \
        --ip-protocol=UDP \
        --ports=53 \
        --backend-service=be-ilb-udp \
        --backend-service-region=us-west1
    

API

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

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
    {
    "name": "be-ilb-udp",
    "backends": [
     {
      "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
      "balancingMode": "CONNECTION"
     }
    ],
    "healthChecks": [
     "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
    ],
    "loadBalancingScheme": "INTERNAL",
    "protocol": "UDP",
    "connectionDraining": {
     "drainingTimeoutSec": 0
    }
    }
    
  2. forwardingRules.insert メソッドPOST リクエストを送信して、転送ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
    
    {
    "name": "fr-ilb-udp",
    "IPAddress": "internal-lb-ipv4",
    "IPProtocol": "UDP",
    "ports": [
     "53"
    ],
    "loadBalancingScheme": "INTERNAL",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-udp",
    "networkTier": "PREMIUM"
    }
    

3 つ目のロードバランサを作成する

3 つ目のロードバランサを作成し、予約された静的内部 IP アドレスを使用する転送ルールを設定します。

gcloud

サポートされている他のすべての IPv4 プロトコル トラフィックを処理するように、プロトコルを L3_DEFAULT に設定して転送ルールを作成します。内部 IP アドレスには、予約済みの静的内部 IP アドレス(internal-lb-ipv4)を使用します。

gcloud compute forwarding-rules create fr-ilb-l3-default \
    --region=us-west1 \
    --load-balancing-scheme=internal \
    --network=lb-network \
    --subnet=lb-subnet \
    --address=internal-lb-ipv4 \
    --ip-protocol=L3_DEFAULT \
    --ports=ALL \
    --backend-service=be-ilb-l3-default \
    --backend-service-region=us-west1

API

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

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-l3-default",
"IPAddress": "internal-lb-ipv4",
"IPProtocol": "L3_DEFAULT",
"ports": [
  "ALL"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb-l3-default",
"networkTier": "PREMIUM"
}

ロードバランサのテスト

ロードバランサをテストするには、前のセクションの手順に沿って操作します。

次のステップ