本頁說明如何建立內部直通式網路負載平衡器,以平衡多個通訊協定的流量。
如要為多個通訊協定 (包括 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 流量,必須有雙重堆疊子網路 (設為IPV4_IPV6
stack-type
)。在自訂模式虛擬私有雲網路中建立雙重堆疊子網路時,請為子網路選擇 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 範圍) 中,選取「Automatically」(自動) 或「Manually」(手動)。
在「子網路建立模式」部分,選取「自訂」。
在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:
- 在「Name」(名稱) 中輸入
lb-subnet
。 - 在「Region」(區域) 中選取
us-west1
。 - 如要建立雙重堆疊子網路,請選取「IP 堆疊類型」的「IPv4 和 IPv6 (雙重堆疊)」。
- 在「IPv4 range」(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 流量,請使用下列指令:
如要建立新的自訂模式虛擬私有雲網路,請執行
gcloud compute networks create
指令。如要在這個網路的任何子網路上設定內部 IPv6 範圍,請使用
--enable-ula-internal-ipv6
標記。這個選項會從fd20::/20
範圍內指派/48
ULA 前置字元 ,供 Google Cloud 用於內部 IPv6 子網路範圍。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 流量,請使用下列指令:
建立新的自訂模式虛擬私有雲網路。 對
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
:建立虛擬私有雲網路的專案 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
替換為專案 ID。Google CloudPOST 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 Cloud2600: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」。
- 選取「其他」,然後輸入
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 ranges」(IPv6 範圍)
- 來源 IPv6 範圍:IPV6_ADDRESS 在
lb-subnet
中指派 - 「Protocols and ports」(通訊協定和通訊埠):選取「Specified protocols and ports」(指定的通訊協定和通訊埠)。
- 選取「TCP」TCP,然後輸入
0-65535
。 - 選取「UDP」。
- 選取「其他」,然後輸入
58
,代表 ICMPv6 通訊協定。
- 選取「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 ranges」(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
規則,允許 IPv6 健康狀態檢查。 Google Cloudgcloud 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
替換為專案 ID。Google CloudPOST 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」(進階選項) 區段。
展開「管理」區段,然後將下列指令碼複製到「開機指令碼」欄位。 開機指令碼也會將 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 stack type (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」(進階選項) 區段。
展開「管理」區段,然後將下列指令碼複製到「開機指令碼」欄位。 開機指令碼也會將 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」(執行個體群組) 頁面。
前往「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
。將「Zone」(區域) 設為
us-west1-a
。展開「進階選項」部分,然後進行下列變更:
- 展開「Networking」(網路),然後將
allow-ssh
新增至「Network tags」(網路標記)。 - 在「網路介面」下方,按一下「編輯」,進行下列變更,然後按一下「完成」:
- Network (網路):
lb-network
- Subnet (子網路):
lb-subnet
- IP stack type (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
替換為專案 ID。 Google Cloud
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
替換為專案 ID。Google CloudPOST 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 上的/var/www/html/index.html
內容,產生回應的 VM 名稱會顯示在 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
。需要使用 --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
替換為專案 ID。Google Cloud
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
的轉送規則。 抵達通訊埠80
內部 IP 位址的 TCP 流量,會由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
替換為專案 ID。Google CloudPOST 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
替換為專案 ID。Google CloudPOST 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
替換為專案 ID。Google Cloud
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" }
測試負載平衡器
如要測試負載平衡器,請按照上一節的步驟操作。
後續步驟
- 如要瞭解重要概念,請參閱內部直通式網路負載平衡器總覽。
- 如要瞭解如何設定容錯移轉,請參閱「設定內部直通式網路負載平衡器的容錯移轉功能」。
- 如要瞭解如何為內部直通式網路負載平衡器設定記錄和監控功能,請參閱「內部直通式網路負載平衡器記錄和監控」。
- 如要瞭解如何排解問題,請參閱「排解內部直通式網路負載平衡器問題」。
- 清除負載平衡設定。