このページでは、複数のプロトコルのトラフィックをロードバランスする内部パススルー ネットワーク ロードバランサの作成方法について説明します。
TCP と UDP を含む複数のプロトコルのロードバランサを構成するには、プロトコルを L3_DEFAULT
に設定した転送ルールを作成します。この転送ルールは、プロトコルが UNSPECIFIED
に設定されたバックエンド サービスを参照します。
この例では、1 つの内部パススルー ネットワーク ロードバランサを使用して、us-west1
リージョンのバックエンド VM 全体にトラフィックを分散します。ロードバランサには、TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH、GRE を処理するため、プロトコルが L3_DEFAULT
の転送ルールがあります。
準備
- Google Cloud CLI をインストールします。ツールの完全な概要については、gcloud CLI の概要をご覧ください。ロード バランシングに関連するコマンドについては、API と gcloud CLI のリファレンスをご覧ください。gcloud CLI を初めて実行する場合は、最初に
gcloud init
コマンドを実行して、認証を行います。 - bash について学習します。
権限
このガイドで必要になる権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
- ロードバランサ リソースを作成する: Compute ロードバランサ管理者(
roles/compute.loadBalancerAdmin
) - Compute Engine インスタンスとインスタンス グループを作成する: Compute インスタンス管理者(
roles/compute.instanceAdmin.v1
) - ネットワーキング コンポーネントを作成する: Compute ネットワーク管理者(
roles/compute.networkAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
L3_DEFAULT トラフィックにロードバランサを設定する
このセクションの手順では、次の構成について説明します。
lb-network
という名前のカスタムモードの VPC ネットワークを使用する例。 IPv4 トラフィックのみを処理する場合は、自動モード ネットワークを使用できます。ただし、IPv6 トラフィックにはカスタムモードのサブネットが必要です。- IPv4 トラフィックに必要なシングル スタック サブネット(
stack-type
はIPv4
に設定)。カスタムモードの VPC ネットワークでシングルスタック サブネットを作成する場合は、サブネットに IPv4 サブネット範囲を選択します。IPv6 トラフィックには、デュアルスタック サブネット(stack-type
をIPv4_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 トラフィックの両方をサポートするには、次の手順を行います。
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network
」と入力します。このネットワークのサブネットで内部 IPv6 アドレス範囲を構成する場合は、次の手順を行います。
- [VPC ネットワーク ULA の内部 IPv6 範囲] で、[有効] を選択します。
- [内部 IPv6 範囲の割り当て] で、[自動] または [手動] を選択します。
[サブネット作成モード] で [カスタム] を選択します。
[新しいサブネット] セクションで、サブネットに次の構成パラメータを指定します。
- [名前] に「
lb-subnet
」と入力します。 - [リージョン] で
us-west1
を選択します。 - デュアルスタック サブネットを作成するには、[IP スタックタイプ] で [IPv4 と IPv6(デュアルスタック)] を選択します。
- [IPv4 範囲] に「
10.1.2.0/24
」と入力します。 - [IPv6 アクセスタイプ] で [内部] を選択します。
- [名前] に「
[完了] をクリックします。
[作成] をクリックします。
IPv4 トラフィックをサポートするには、次の手順を行います。
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network
」と入力します。[サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションに、次の情報を入力します。
- 名前:
lb-subnet
- リージョン:
us-west1
- IP スタックタイプ: IPv4(シングルスタック)
- IP アドレス範囲:
10.1.2.0/24
- 名前:
- [完了] をクリックします。
[作成] をクリックします。
gcloud
IPv4 トラフィックと IPv6 トラフィック両方の場合は、次のコマンドを使用します。
新しいカスタムモードの 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
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 トラフィックのみの場合は、次のコマンドを使用します。
カスタム VPC ネットワークを作成するには、
gcloud compute networks create
コマンドを使用します。gcloud compute networks create lb-network --subnet-mode=custom
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 トラフィックの両方の場合は、次のコマンドを使用します。
新しいカスタムモードの VPC ネットワークを作成します。
networks.insert
メソッドにPOST
リクエストを送信します。このネットワークのサブネットで内部 IPv6 範囲を構成するには、
enableUlaInternalIpv6
をtrue
に設定します。このオプションは、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
に設定する前に、最大伝送単位の概要を確認してください。
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 トラフィックのみの場合は、次の手順を実行します。
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 }
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/22
と35.191.0.0/16
)からのトラフィックを許可します。この例では、ターゲットタグallow-health-check
を使用して、適用するインスタンスを識別します。fw-allow-health-check-ipv6
: 負荷分散されているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(2600:2d00:1:b029::/64
)からのトラフィックを許可します。この例では、ターゲットタグallow-health-check-ipv6
を使用して、適用するインスタンスを識別します。
これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。
コンソール
Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
IPv4 TCP、UDP、ICMP トラフィックがバックエンド インスタンス グループ
ig-a
に到達できるようにするには:- [ファイアウォール ルールを作成] をクリックします。
- 名前:
fw-allow-lb-access
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: ネットワーク内のすべてのインスタンス
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
10.1.2.0/24
- [プロトコルとポート] で [指定したプロトコルとポート] を選択します。
- [TCP] を選択して「
ALL
」と入力します。 - [UDP] を選択します。
- [その他] を選択して「
ICMP
」と入力します。
- [TCP] を選択して「
[作成] をクリックします。
受信 SSH 接続を許可するには:
- [ファイアウォール ルールを作成] をクリックします。
- 名前:
fw-allow-ssh
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-ssh
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
0.0.0.0/0
- プロトコルとポート: [指定されたプロトコルとポート] を選択して、
tcp:22
を入力します。
[作成] をクリックします。
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
」と入力します。
- [TCP] を選択して「
[作成] をクリックします。
Google Cloud IPv6 ヘルスチェックを許可するには:
- [ファイアウォール ルールを作成] をクリックします。
- 名前:
fw-allow-health-check-ipv6
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-health-check-ipv6
- ソースフィルタ: IPv6 の範囲
- 送信元 IPv6 範囲:
2600:2d00:1:b029::/64
- プロトコルとポート: すべて許可
[作成] をクリックします。
Google Cloud IPv4 ヘルスチェックを許可するには:
- [ファイアウォール ルールを作成] をクリックします。
- 名前:
fw-allow-health-check
- ネットワーク:
lb-network
- 優先度:
1000
- トラフィックの方向: 上り(内向き)
- 一致したときのアクション: 許可
- ターゲット: 指定されたターゲットタグ
- ターゲットタグ:
allow-health-check
- ソースフィルタ: IPv4 の範囲
- 送信元 IPv4 範囲:
130.211.0.0/22
と35.191.0.0/16
- プロトコルとポート: すべて許可
[作成] をクリックします。
gcloud
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
ネットワーク タグ
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
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 アドレスに置き換えます。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
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
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 }
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 アドレスに置き換えます。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 }
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 }
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-type
を IPv4_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 トラフィックの両方をサポートするには、次の手順を行います。
インスタンス テンプレートを作成します。Google Cloud コンソールで [インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
- [名前] に「
vm-a1
」と入力します。 - [ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。 - [詳細オプション] セクションを開きます。
[管理] セクションを開き、次のスクリプトを [起動スクリプト] フィールドにコピーします。起動スクリプトを修正し、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
[ネットワーキング] セクションを開き、次の情報を指定します。
- [ネットワーク タグ] に
allow-ssh
とallow-health-check-ipv6
を追加します。 - [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
- ネットワーク:
lb-network
- サブネットワーク:
lb-subnet
- IP スタックタイプ: IPv4 および IPv6(デュアルスタック)
- ネットワーク:
- [ネットワーク タグ] に
[作成] をクリックします。
IPv4 トラフィックをサポートするには、次の手順を行います。
インスタンス テンプレートを作成します。Google Cloud コンソールで [インスタンス テンプレート] ページに移動します。
[インスタンス テンプレートを作成] をクリックします。
- [名前] に「
vm-a1
」と入力します。 - [ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。 - [詳細オプション] セクションを開きます。
[管理] セクションを開き、次のスクリプトを [起動スクリプト] フィールドにコピーします。起動スクリプトを修正し、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
[ネットワーキング] セクションを開き、次の情報を指定します。
- [ネットワーク タグ] に
allow-ssh
とallow-health-check
を追加します。 - [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
- ネットワーク:
lb-network
- サブネットワーク:
lb-subnet
- IP スタックタイプ: IPv4(シングルスタック)
- ネットワーク:
- [ネットワーク タグ] に
[作成] をクリックします。
- [名前] に「
マネージド インスタンス グループを作成します。Google Cloud Console の [インスタンス グループ] ページに移動します。
- [インスタンス グループを作成] をクリックします。
- [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
- [名前] に「
ig-a
」と入力します。 - [ロケーション] で [シングルゾーン] を選択します。
- [リージョン] で
us-west1
を選択します。 - [ゾーン] で
us-west1-a
を選択します。 - [インスタンス テンプレート] で [
vm-a1
] を選択します。 グループ内に作成するインスタンスの数を指定します。
この例では、[自動スケーリング] で次のオプションを指定します。
- [自動スケーリング モード] で [
Off:do not autoscale
] を選択します。 - [インスタンスの最大数] に「
2
」と入力します。
- [自動スケーリング モード] で [
[作成] をクリックします。
gcloud
このガイドの gcloud
の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。
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-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 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-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 sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf systemctl restart apache2'
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 トラフィックの両方をサポートするには、次の手順を行います。
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 トラフィックを処理する手順は次のとおりです。
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 }
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" }
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 トラフィックの場合:
コンソール
Google Cloud コンソールの [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] を
vm-client-ipv6
に設定します。[ゾーン] を
us-west1-a
に設定します。[詳細オプション] セクションを開き、次の変更を行います。
- [ネットワーキング] を開き、[ネットワーク タグ] に
allow-ssh
を追加します。 - [ネットワーク インターフェース] で、[編集] をクリックして次の変更を行い、[完了] をクリックします。
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- IP スタックタイプ: IPv4 および IPv6(デュアルスタック)
- プライマリ内部 IP: エフェメラル(自動)
- 外部 IP: エフェメラル
- ネットワーク:
- [ネットワーキング] を開き、[ネットワーク タグ] に
[作成] をクリックします。
gcloud
クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a
ゾーンにあり、バックエンド VM と同じサブネットを使用しています。
gcloud compute instances create vm-client-ipv6 \ --zone=us-west1-a \ --image-family=debian-12 \ --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 トラフィックの場合:
コンソール
Google Cloud コンソールの [VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] に「
vm-client
」と入力します。[ゾーン] に「
us-west1-a
」と入力します。[詳細オプション] セクションを開きます。
[ネットワーキング] を開いて次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-ssh
」と入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- ネットワーク:
lb-network
- サブネット:
lb-subnet
- ネットワーク:
- [ネットワーク タグ] に「
[Create(作成)] をクリックします。
gcloud
クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a
ゾーンにあり、バックエンド VM と同じサブネットを使用しています。
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --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
ポート 80 の HTTP ヘルスチェックを作成します。このヘルスチェックは、
ig-a
インスタンス グループのバックエンドの正常性を確認するために使用されます。gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
プロトコルを
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
バックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend be-ilb-l3-default \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
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
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
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 } }
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 } }
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" }
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
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
IPv6 転送ルール
fr-ilb-ipv6
について説明します。説明のIPV6_ADDRESS
をメモします。gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
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
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client --zone=us-west1-a
IPv4 転送ルール
fr-ilb
の説明を取得します。gcloud compute forwarding-rules describe fr-ilb --region=us-west1
curl
を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.html
のコンテンツによる HTML レスポンスのテキストとして表示されます。予想されるレスポンスはPage served from: vm-a1
のようになります。curl http://10.1.2.99
転送ルールは、ポート
80
、53
を処理するように構成されています。これらのポートにトラフィックを送信するには、次のように、IP アドレスの後にコロン(:
)とポート番号を追加します。curl http://10.1.2.99:80
ロードバランサの IP アドレスに ping を実行する
このテストでは、ロードバランサの IP アドレスに対して ping を実行することができます。このテストではこの想定される動作が示されます。
gcloud: IPv6
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client-ipv6 --zone=us-west1-a
ロードバランサの 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
PINGIPV6_ADDRESS
(IPV6_ADDRESS
) 56(84) bytes of data. 64 bytes fromIPV6_ADDRESS
: icmp_seq=1 ttl=64 time=1.58 ms
gcloud: IPv4
クライアント VM インスタンスに接続します。
gcloud compute ssh vm-client --zone=us-west1-a
ロードバランサの 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
のリージョンに配置する必要があります。
次の図は、この例のアーキテクチャを示しています。
次の転送ルール構成を使用することも検討できます。
複数のポートを使用した転送ルール:
- プロトコル
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
リクエストの本文には、addressType
(INTERNAL
に設定する)、アドレスの name
、IP アドレスが属する subnetwork
を含める必要があります。address
を 10.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
)を共有します。
1 つ目のロードバランサを作成する
ポート 80
の TCP トラフィックを処理するロードバランサを作成します。
gcloud
HTTP トラフィックのバックエンド サービスを作成します。
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
バックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
バックエンド サービスの転送ルールを作成します。内部 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
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 } }
Create the forwarding rule by making a
POST
request to theforwardingRules.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
プロトコルを
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
バックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend be-ilb-udp \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
バックエンド サービスの転送ルールを作成します。内部 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
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 } }
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" }
ロードバランサのテスト
ロードバランサをテストするには、前のセクションの手順に従うようにします。
次のステップ
- 重要なコンセプトについて確認する。内部パススルー ネットワーク ロードバランサの概要をご覧ください。
- フェイルオーバーの構成方法を確認する。内部パススルー ネットワーク ロードバランサのフェイルオーバーの構成をご覧ください。
- 内部パススルー ネットワーク ロードバランサの Logging と Monitoring の構成については、内部パススルー ネットワーク ロードバランサのロギングとモニタリングをご覧ください。
- トラブルシューティングの詳細を確認する。内部パススルー ネットワーク ロードバランサのトラブルシューティングをご覧ください。
- ロード バランシングの設定をクリーンアップする。