本頁面提供建立內部直通式網路負載平衡器的操作說明,以便為多個通訊協定平衡負載流量。
如要為多個通訊協定 (包括 TCP 和 UDP) 設定負載平衡器,請建立轉送規則,並將通訊協定設為 L3_DEFAULT
。此轉送規則會指向通訊協定設為 UNSPECIFIED
的後端服務。
在這個範例中,我們使用一個內部直通式網路負載平衡器,將流量分配到 us-west1
地區的後端 VM。負載平衡器含有使用通訊協定 L3_DEFAULT
的轉送規則,可處理 TCP、UDP、ICMP、ICMPv6、SCTP、ESP、AH 和 GRE。
事前準備
- 安裝 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
的自訂模式虛擬私有雲網路的範例。如果您只想處理 IPv4 流量,可以使用自動模式網路。不過,IPv6 流量需要自訂模式子網路。 - 單一堆疊子網路 (
stack-type
設為IPv4
),這是 IPv4 流量所需的子網路。在自訂模式虛擬私有雲網路中建立單一堆疊子網路時,您需要為子網路選擇 IPv4 子網路範圍。針對 IPv6 流量,我們需要雙重堆疊子網路 (stack-type
設為IPv4_IPv6
)。在自訂模式虛擬私有雲網路上建立雙重堆疊子網路時,您可以為子網路選擇 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,用於測試與後端的連線。
- 內部直通式網路負載平衡器,包含下列元件:
- 後端服務的健康狀態檢查。
- 位於
us-west1
地區的後端服務,通訊協定設為UNSPECIFIED
,用於管理區域執行個體群組的連線分配。 - 轉送規則,其中通訊協定設為
L3_DEFAULT
,通訊埠設為ALL
。
設定網路、地區和子網路
如要設定內部 IPv6 範圍的子網路,請啟用虛擬私有雲 (VPC) 網路 ULA 內部 IPv6 範圍。內部 IPv6 子網路範圍會從這個範圍分配。如要建立範例網路與子網路,請依照下列步驟操作:
主控台
如要同時支援 IPv4 和 IPv6 流量,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network
。如要在這個網路的子網路上設定內部 IPv6 位址範圍,請完成下列步驟:
- 在「虛擬私有雲網路 ULA 內部 IPv6 範圍」部分,選取「已啟用」。
- 在「Allocate internal IPv6 range」(分配內部 IPv6 範圍) 部分,選取「自動」或「手動」。
在「子網路建立模式」中,選取「自訂」。
在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:
- 在「Name」(名稱) 中輸入
lb-subnet
。 - 在「Region」(區域) 中選取
us-west1
。 - 如要建立雙重堆疊子網路,請選取「IP 堆疊類型」的「IPv4 和 IPv6 (雙重堆疊)」。
- 在「IPv4 範圍」中,輸入
10.1.2.0/24
。 - 在「IPv6 存取權類型」部分,選取「內部」。
- 在「Name」(名稱) 中輸入
按一下 [完成]。
按一下 [建立]。
如要支援 IPv4 流量,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network
。在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
lb-subnet
- Region (區域):
us-west1
- IP stack type (IP 堆疊類型):IPv4 (單一堆疊)
- IP address range (IP 位址範圍):
10.1.2.0/24
- Name (名稱):
- 按一下 [完成]。
按一下 [建立]。
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 流量,請使用下列指令:
如要建立自訂虛擬私有雲網路,請使用
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
方法發出兩個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
:輸入規則,適用於虛擬私人雲端網路中的所有目標,允許來源在10.1.2.0/24
範圍內的流量。這項規則會允許所有來自子網路用戶端的連入流量。fw-allow-lb-access-ipv6
:輸入規則,適用於虛擬私人雲端網路中的所有目標,允許來源在子網路中設定的 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 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
如要允許 IPv4 TCP、UDP 和 ICMP 流量連線至後端執行個體群組
ig-a
:- 點按「建立防火牆規則」。
- Name (名稱):
fw-allow-lb-access
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
- Source filter (來源篩選器):IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.1.2.0/24
- Protocols and ports:選取「Specified protocols and ports」。
- 選取「TCP」TCP,然後輸入
ALL
。 - 選取「UDP」UDP。
- 選取「其他」,然後輸入
ICMP
。
- 選取「TCP」TCP,然後輸入
按一下 [建立]。
如要允許傳入的 SSH 連線,請按照下列步驟操作:
- 點按「建立防火牆規則」。
- Name (名稱):
fw-allow-ssh
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-ssh
- Source filter (來源篩選器):IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
0.0.0.0/0
- 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入
tcp:22
。
按一下 [建立]。
如要允許 IPv6 TCP、UDP 和 ICMP 流量傳送至後端執行個體群組
ig-a
:- 點按「建立防火牆規則」。
- Name (名稱):
fw-allow-lb-access-ipv6
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
- Source filter (來源篩選器):IPv6 範圍
- 來源 IPv6 範圍:
lb-subnet
中指派的 IPV6_ADDRESS - Protocols and ports:選取「Specified protocols and ports」。
- 選取「TCP」TCP,然後輸入
0-65535
。 - 選取「UDP」UDP。
- 選取「其他」,然後輸入 ICMPv6 通訊協定
58
。
- 選取「TCP」TCP,然後輸入
按一下 [建立]。
如要允許 Google Cloud IPv6 健康狀態檢查,請按照下列步驟操作:
- 點按「建立防火牆規則」。
- Name (名稱):
fw-allow-health-check-ipv6
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-health-check-ipv6
- Source filter (來源篩選器):IPv6 範圍
- 來源 IPv6 範圍:
2600:2d00:1:b029::/64
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
按一下 [建立]。
如要允許 Google Cloud IPv4 健康狀態檢查:
- 按一下「建立防火牆規則」
- Name (名稱):
fw-allow-health-check
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-health-check
- Source filter (來源篩選器):IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22
和35.191.0.0/16
- 「Protocols and ports」(通訊協定和通訊埠):[Allow all] (全部允許)
按一下 [建立]。
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
建立
fw-allow-ssh
防火牆規則,使用網路標記allow-ssh
允許與 VM 建立 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 位址。建立
fw-allow-health-check
防火牆規則,允許 Google Cloud健康狀態檢查。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
建立
fw-allow-health-check-ipv6
規則,允許 Google CloudIPv6 健康狀態檢查。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 12。
建立執行個體群組
主控台
如要同時支援 IPv4 和 IPv6 流量,請按照下列步驟操作:
建立執行個體範本。前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。
前往「Instance templates」(執行個體範本) 頁面
- 點選「建立執行個體範本」。
- 在「Name」 中輸入
vm-a1
。 - 確認將開機磁碟設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如
apt-get
。 - 展開「Advanced options」(進階選項) 區段。
展開「Management」(管理) 區段,然後將下列指令碼複製到「Startup script」(開機指令碼) 欄位。開機指令碼也會將 Apache 伺服器設定為監聽通訊埠
8080
,而非通訊埠80
。#! /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
展開「Networking」 專區,然後指定下列項目:
- 在「Network tags」(網路標記) 中新增
allow-ssh
和allow-health-check-ipv6
。 - 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
- Network (網路):
lb-network
- Subnetwork (子網路):
lb-subnet
- IP 堆疊類型:IPv4 和 IPv6 (雙重堆疊)
- Network (網路):
- 在「Network tags」(網路標記) 中新增
按一下 [建立]。
如要支援 IPv4 流量,請按照下列步驟操作:
建立執行個體範本。前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。
點選「建立執行個體範本」。
- 在「Name」 中輸入
vm-a1
。 - 確認將開機磁碟設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如
apt-get
。 - 展開「Advanced options」(進階選項) 區段。
展開「Management」(管理) 區段,然後將下列指令碼複製到「Startup script」(開機指令碼) 欄位。開機指令碼也會將 Apache 伺服器設定為監聽通訊埠
8080
,而非通訊埠80
。#! /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
展開「Networking」 專區,然後指定下列項目:
- 在「Network tags」(網路標記) 中新增
allow-ssh
和allow-health-check
。 - 在「網路介面」部分,按一下「預設」介面,然後設定下列欄位:
- Network (網路):
lb-network
- Subnetwork (子網路):
lb-subnet
- IP stack type (IP 堆疊類型):IPv4 (單一堆疊)
- Network (網路):
- 在「Network tags」(網路標記) 中新增
按一下 [建立]。
- 在「Name」 中輸入
建立代管執行個體群組。前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 選擇「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
- 在「Name」 中輸入
ig-a
。 - 在「Location」(位置) 中,選取「Single zone」(單一可用區)。
- 在「區域」部分,選取
us-west1
。 - 在「可用區」部分,選取
us-west1-a
。 - 在「Instance template」(執行個體範本) 中選取
vm-a1
。 指定要在群組中建立的執行個體數量。
在本例中,請在「Autoscaling」(自動調度資源) 下指定下列選項:
- 針對「Autoscaling mode」(自動調度資源模式),選取
Off:do not autoscale
。 - 在「Maximum number of instances」(執行個體數量上限) 中輸入
2
。
- 針對「Autoscaling mode」(自動調度資源模式),選取
按一下 [建立]。
gcloud
本指南的 gcloud
操作說明假設您使用 Cloud Shell 或已安裝 bash 的其他環境。
使用
gcloud compute instance-templates create
指令,建立含有 HTTP 伺服器的 VM 執行個體範本。開機指令碼也會將 Apache 伺服器設為監聽通訊埠
8080
,而非通訊埠80
。如要同時處理 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 instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設為
vm-client-ipv6
。將「可用區」設為
us-west1-a
。展開「進階選項」部分,然後進行下列變更:
- 展開「Networking」,然後將
allow-ssh
新增至「Network tags」。 - 在「網路介面」下方,按一下「編輯」,進行下列變更,然後按一下「完成」:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- IP 堆疊類型:IPv4 和 IPv6 (雙重堆疊)
- 「Primary internal IP」(主要內部 IP):臨時 (自動)
- 「External IP」(外部 IP):[Ephemeral] (臨時)
- Network (網路):
- 展開「Networking」,然後將
按一下 [建立]。
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 instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
在「Name」(名稱) 中輸入
vm-client
。在「Zone」 中輸入
us-west1-a
。展開「Advanced options」(進階選項) 區段。
展開「Networking」,然後設定下列欄位:
- 在「網路標記」中輸入
allow-ssh
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- Network (網路):
- 在「網路標記」中輸入
按一下 [建立]。
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 }
設定負載平衡器元件
為多個通訊協定建立負載平衡器。
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 流量:建立轉送規則,並將通訊協定設為
L3_DEFAULT
,以便處理所有支援的 IPv6 通訊協定流量。所有通訊埠都必須設定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 流量:建立轉送規則,並將通訊協定設為
L3_DEFAULT
,以便處理所有支援的 IPv4 通訊協定流量。所有通訊埠都必須設定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 連線能力的用戶端上執行下列指令。在
fr-ilb-ipv6
轉送規則中,將IPV6_ADDRESS
替換為暫時 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 上的/var/www/html/index.html
內容,在 HTML 回應的文字中顯示產生回應的 VM 名稱。預期的回應如下所示: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)。在
fr-ilb-ipv6
轉送規則中,將IPV6_ADDRESS
替換為暫時 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
。必須使用 --purpose
標記,才能讓多個轉送規則使用相同的內部 IP 位址。
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" }
設定負載平衡器元件
使用下列元件設定三個負載平衡器:
- 第一個負載平衡器有一個轉送規則,其中包含通訊協定
TCP
和通訊埠80
。TCP
轉送規則會處理透過通訊埠80
抵達內部 IP 位址的 TCP 流量。 - 第二個負載平衡器有一個轉送規則,其中通訊協定為
UDP
,通訊埠為53
。抵達通訊埠53
內部 IP 位址的 UDP 流量,會由UDP
轉送規則處理。 - 第三個負載平衡器含有通訊協定
L3_DEFAULT
和通訊埠ALL
的轉送規則。所有其他不符合TCP
或UDP
轉送規則的流量,都會由L3_DEFAULT
轉送規則處理。 - 三個負載平衡器在轉送規則中共用相同的靜態內部 IP 位址 (
internal-lb-ipv4
)。
建立第一個負載平衡器
為通訊埠 80
的 TCP 流量建立第一個負載平衡器。
gcloud
建立 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
將執行個體群組新增至後端服務:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
為後端服務建立轉送規則。使用靜態預留內部 IP 位址 (
internal-lb-ipv4
) 做為內部 IP 位址。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" }
建立第二個負載平衡器
為通訊埠 53
的 UDP 流量建立第二個負載平衡器。
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 位址 (
internal-lb-ipv4
) 做為內部 IP 位址。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" }
建立第三個負載平衡器
建立第三個負載平衡器的轉送規則,以便使用靜態預留內部 IP 位址。
gcloud
建立轉送規則,並將通訊協定設為 L3_DEFAULT
,以便處理所有其他支援的 IPv4 通訊協定流量。使用預約的靜態內部 IP 位址 (internal-lb-ipv4
) 做為內部 IP 位址。
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" }
測試負載平衡器
如要測試負載平衡器,請按照上一節的步驟操作。
後續步驟
- 如要瞭解重要概念,請參閱內部直通式網路負載平衡器總覽。
- 如要瞭解如何設定容錯移轉功能,請參閱「設定內部直通式網路負載平衡器的容錯移轉功能」。
- 如要瞭解如何為內部直通式網路負載平衡器設定記錄和監控功能,請參閱「內部直通式網路負載平衡器的記錄和監控」。
- 如要瞭解如何排解問題,請參閱「排解內部直通式網路負載平衡器問題」。
- 清除負載平衡器設定。