區域性外部 Proxy 網路負載平衡器是以 Proxy 為基礎的區域性第 4 層負載平衡器,可讓您透過外部區域性 IP 位址,在單一區域中執行及調度 TCP 服務流量。這類負載平衡器會將來自網際網路的外部 TCP 流量,分配給相同地區的後端。
本指南說明如何設定區域性外部 Proxy 網路負載平衡器,並使用可用區網路端點群組 (NEG) 後端。
開始之前,請先詳閱下列文件:
在本範例中,我們會使用負載平衡器,將 TCP 流量分配到 A 區域中兩個區域性 NEG 的後端 VM。這個範例使用一組設為透過通訊埠 80
回應要求的 Apache 伺服器來提供服務。
在本範例中,您將設定下圖所示的部署作業。
這是區域性負載平衡器。所有負載平衡器元件 (後端執行個體群組、後端服務、目標 Proxy 和轉送規則) 都必須位於同一區域。
權限
如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色。
工作 | 必要角色 |
---|---|
建立網路、子網路和負載平衡器元件 | Compute 網路管理員
(roles/compute.networkAdmin ) |
新增與移除防火牆規則 | Compute 安全性管理員
(roles/compute.securityAdmin ) |
建立執行個體 | Compute 執行個體管理員
(roles/compute.instanceAdmin ) |
詳情請參閱下列指南:
設定網路和子網路
您需要具有兩個子網路的虛擬私有雲網路:一個用於負載平衡器的後端,另一個用於負載平衡器的 Proxy。這是區域性負載平衡器。如果流量來源位於與負載平衡器相同地區的子網路中,虛擬私人雲端網路內的流量會轉送至負載平衡器。
這個範例會使用以下虛擬私人雲端網路、地區和子網路:
網路:名為
lb-network
的自訂模式虛擬私有雲網路後端的子網路:位於 A 區域中名為
backend-subnet
的子網路,使用10.1.2.0/24
做為主要 IP 位址範圍Proxy 的子網路:位於 A 區域,名為
proxy-only-subnet
的子網路,使用10.129.0.0/23
做為主要 IP 位址範圍
為後端建立網路和子網路
主控台
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network
。在「Subnets」(子網路) 區段中,執行下列操作:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
backend-subnet
- Region (區域):
REGION_A
- IP address range (IP 位址範圍):
10.1.2.0/24
- Name (名稱):
- 按一下 [完成]。
點選「建立」。
gcloud
如要建立自訂虛擬私有雲網路,請使用
gcloud compute networks create
指令:gcloud compute networks create lb-network --subnet-mode=custom
如要在
REGION_A
地區的lb-network
網路中建立子網路,請使用gcloud compute networks subnets create
指令:gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=REGION_A
建立僅限 Proxy 的子網路
僅限 Proxy 的子網路提供一組 IP 位址,供 Google 代表您執行 Envoy Proxy。Proxy 會終止來自用戶端的連線,並建立與後端的新連線。
lb-network
虛擬私有雲網路的 A 區域中,所有 Envoy 型負載平衡器都會使用這個僅限 Proxy 的子網路。
主控台
如果您使用 Google Cloud 控制台,可以稍後在「Load balancing」(負載平衡) 頁面中建立僅限 Proxy 的子網路。
如要立即建立僅限 Proxy 的子網路,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
按一下共用虛擬私有雲網路的名稱:
lb-network
。按一下 [新增子網路]。
在「Name」(名稱) 中輸入
proxy-only-subnet
。在「Region」(區域) 中選取
REGION_A
。將「用途」設為「區域受管理 Proxy」。
在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。按一下「新增」。
gcloud
如要建立僅限 Proxy 的子網路,請使用 gcloud compute networks subnets
create
指令:
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=REGION_A \ --network=lb-network \ --range=10.129.0.0/23
建立防火牆規則
在此範例中,您會建立下列防火牆規則:
fw-allow-health-check
。輸入規則,適用於要進行負載平衡的執行個體,可允許來自負載平衡器和Google Cloud 健康狀態檢查系統 (130.211.0.0/22
和35.191.0.0/16
) 的流量。這個範例會使用目標標記allow-health-check
來識別應套用此規則的後端 VM。 Google Cloudfw-allow-ssh
。輸入規則,允許在 TCP 通訊埠22
上來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。本範例使用目標標記allow-ssh
來識別應該適用此規則的 VM。fw-allow-proxy-only-subnet
. 僅限 Proxy 的子網路的輸入allow
防火牆規則,允許負載平衡器在 TCP 通訊埠80
上與後端執行個體通訊。本範例使用目標標記allow-proxy-only-subnet
來識別應該適用此規則的後端 VM。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
按一下「建立防火牆規則」,然後填入下列欄位:
- Name (名稱):
fw-allow-health-check
- Network (網路):
lb-network
- 目標:指定的目標標記
- 「Target tags」(目標標記):
allow-health-check
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22
和35.191.0.0/16
- 通訊協定和通訊埠:
- 選擇「指定的通訊協定與通訊埠」。
- 勾選「TCP」TCP核取方塊,然後輸入
80
做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
第二次按一下「Create firewall rule」(建立防火牆規則),以建立允許連入 SSH 連線的規則:
- Name (名稱):
fw-allow-ssh
- Network (網路):
lb-network
- Priority (優先順序):
1000
- Direction of traffic (流量方向):「Ingress」(輸入)
- 「Action on match」(相符時執行的動作):允許
- 目標:指定的目標標記
- 「Target tags」(目標標記):
allow-ssh
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
0.0.0.0/0
- 通訊協定和通訊埠:
- 選擇「指定的通訊協定與通訊埠」。
- 勾選「TCP」TCP核取方塊,然後輸入
22
做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
第三次按一下「Create firewall rule」(建立防火牆規則),以建立允許連入連線的規則,讓僅限 Proxy 子網路連線至後端: Google Cloud
- Name (名稱):
fw-allow-proxy-only-subnet
- Network (網路):
lb-network
- Priority (優先順序):
1000
- Direction of traffic (流量方向):「Ingress」(輸入)
- 「Action on match」(相符時執行的動作):允許
- 目標:指定的目標標記
- 「Target tags」(目標標記):
allow-proxy-only-subnet
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.129.0.0/23
- 通訊協定和通訊埠:
- 選擇「指定的通訊協定與通訊埠」。
- 勾選「TCP」TCP核取方塊,然後輸入
80
做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
gcloud
建立
fw-allow-health-check
規則,允許健康狀態檢查在 TCP 通訊埠80
上連線至後端執行個體: Google Cloudgcloud 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:80
建立
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
為僅限 Proxy 的子網路建立允許輸入的防火牆規則,允許負載平衡器在 TCP 通訊埠
80
上與後端執行個體通訊:gcloud compute firewall-rules create fw-allow-proxy-only-subnet \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-proxy-only-subnet \ --source-ranges=10.129.0.0/23 \ --rules=tcp:80
保留負載平衡器的 IP 位址
主控台
前往 Google Cloud 控制台的「Reserve a static address」(預約靜態位址) 頁面。
選擇新位址的名稱。
在「Network Service Tier」(網路服務級別) 部分,選取「Standard」(標準)。
在「IP version」(IP 版本) 部分,選取「IPv4」。系統不支援 IPv6 位址。
在「Type」(類型) 中,選取「Regional」(地區)。
在「Region」(區域) 中選取
REGION_A
。將「Attached to」(連接至) 選項保留為「None」(無)。建立負載平衡器後,這個 IP 位址會附加至負載平衡器的轉送規則。
按一下「預約」,預約 IP 位址。
gcloud
如要保留靜態外部 IP 位址,請使用
gcloud compute addresses create
指令:gcloud compute addresses create ADDRESS_NAME \ --region=REGION_A \ --network-tier=STANDARD
將
ADDRESS_NAME
替換為您要稱呼此位址的名稱。如要查看結果,請使用
gcloud compute addresses describe
指令:gcloud compute addresses describe ADDRESS_NAME
設定可用區 NEG
在 A 區域中,使用 GCE_VM_IP_PORT
類型端點設定可用區性 NEG。首先建立 VM,然後建立區域 NEG,並將 VM 的網路端點新增至 NEG。
建立 VM
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設定為
vm-a1
。在「Region」(區域) 中選取
REGION_A
。在「Zone」(可用區) 中選取
ZONE_A
。在「Boot disk」(開機磁碟) 專區中,確認已為開機磁碟選項選取「Debian GNU/Linux 12 (bookworm)」。如有需要,請按一下「Choose」(選擇),以變更映像檔。
點選「進階選項」。
按一下「Networking」(網路),然後設定下列欄位:
- 在「網路標記」部分,輸入
allow-ssh
、allow-health-check
和allow-proxy-only-subnet
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
backend-subnet
- Network (網路):
- 在「網路標記」部分,輸入
按一下 [Management] (管理)。在「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 systemctl restart apache2
點選「建立」。
重複上述步驟,再建立三個 VM。使用下列名稱和區域組合:
- 名稱:
vm-a2
| 區域:ZONE_A
- 名稱:
vm-b1
| 區域:ZONE_B
- 名稱:
vm-b2
| 區域:ZONE_B
- 名稱:
gcloud
如要建立 VM,請使用 gcloud compute instances create
指令兩次。請使用下列 VM_NAME
和 ZONE
的組合。兩個 VM 的指令碼內容皆相同:
VM_NAME
:vm-a1
和ZONE
:ZONE_A
VM_NAME
:vm-a2
和ZONE
:ZONE_A
VM_NAME
:vm-b1
和ZONE
:ZONE_B
VM_NAME
:vm-b2
和ZONE
:ZONE_B
gcloud compute instances create VM_NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \ --subnet=backend-subnet \ --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 systemctl restart apache2'
建立可用區 NEG
主控台
建立區域性網路端點群組
前往 Google Cloud 控制台的「Network endpoint groups」(網路端點群組) 頁面。
按一下「建立網路端點群組」。
在「Name」(名稱) 中輸入
zonal-neg-a
。在「網路端點群組類型」部分,選取「網路端點群組 (區域性)」。
在「Network」(網路) 中選取
lb-network
。在「Subnet」(子網路) 中,選取
backend-subnet
。在「Zone」(可用區) 中選取
ZONE_A
。在「Default port」(預設通訊埠) 欄中,輸入
80
。點選「建立」。
重複本節中的所有步驟,建立第二個區域 NEG,並進行下列設定變更:
- Name (名稱):
zonal-neg-b
- Zone (可用區):
ZONE_B
- Name (名稱):
將端點新增至可用區性 NEG
前往 Google Cloud 控制台的「Network endpoint groups」(網路端點群組) 頁面。
按一下您在上一個步驟建立的網路端點群組名稱 (例如
zonal-neg-a
)。在「網路端點群組詳細資料」頁面的「這個群組中的網路端點」區段中,按一下「新增網路端點」。
選取 VM 執行個體 (例如
vm-a1
)。「網路介面」部分會顯示 VM 名稱、區域和子網路。
- 在「IP address」(IP 位址) 中,輸入新網路端點的 IP 位址。 如要取得 IP 位址,請按一下「Check primary IP addresses and alias IP range in nic0」(檢查 nic0 中的主要 IP 位址和別名 IP 範圍)。
- 在「Port type」(通訊埠類型) 中選取「Default」(預設值)。端點會使用網路端點群組中所有端點的預設通訊埠
80
。由於 Apache 伺服器會在通訊埠80
處理要求,因此這個範例已足夠。 - 點選「建立」。
按一下「新增網路端點」。選取第二個 VM 執行個體
vm-a2
,然後重複上述步驟,將其端點新增至zonal-neg-a
。重複本節中的所有步驟,從
vm-b1
和vm-b2
新增端點至zonal-neg-b
。
gcloud
在
ZONE_A
區域中建立可用區 NEG,並使用GCE_VM_IP_PORT
端點:gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A \ --network=lb-network \ --subnet=backend-subnet
您可以在建立 NEG 時指定
--default-port
,或為每個端點指定通訊埠號碼,如下一步所示。將端點新增至可用區性 NEG:
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=ZONE_A \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
在
ZONE_B
區域中建立可用區 NEG,並使用GCE_VM_IP_PORT
端點:gcloud compute network-endpoint-groups create zonal-neg-b \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_B \ --network=lb-network \ --subnet=backend-subnet
您可以在建立 NEG 時指定
--default-port
,或為每個端點指定通訊埠號碼,如下一步所示。將端點新增至可用區性 NEG:
gcloud compute network-endpoint-groups update zonal-neg-b \ --zone=ZONE_B \ --add-endpoint='instance=vm-b1,port=80' \ --add-endpoint='instance=vm-b2,port=80'
設定負載平衡器
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」。
- 在「Proxy or passthrough」(直通或使用 Proxy) 部分,選取「Proxy load balancer」(Proxy 負載平衡器),然後點選「Next」(下一步)。
- 在「公開或內部」部分選取「公開 (外部)」,接著點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for regional workloads」(最適合區域工作負載),然後點選「Next」(下一步)。
- 按一下「Configure」(設定)。
基本設定
- 在「Name」(名稱) 中輸入
my-ext-tcp-lb
。 - 在「Region」(區域) 中選取
REGION_A
。 - 在「Network」(網路) 中選取
lb-network
。
保留僅限 Proxy 子網路
- 按一下「保留子網路」。
- 在「Name」(名稱) 中輸入
proxy-only-subnet
。 - 在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。 - 按一下「新增」。
設定後端
- 按一下「後端設定」。
- 在「Backend type」(後端類型) 清單中,選取「Zonal network endpoint group」(區域網路端點群組)。
- 在「通訊協定」清單中,選取「TCP」。
- 設定健康狀態檢查:
- 在「健康狀態檢查」清單中,選取「建立健康狀態檢查」。
- 在「Name」(名稱) 欄位中輸入
tcp-health-check
。 - 在「通訊協定」清單中,選取「TCP」。
- 在「Port」(通訊埠) 欄位中輸入
80
。 - 按一下「建立」。
- 設定第一個後端:
- 在「New backend」(新增後端) 中,選取可用區性 NEG
zonal-neg-a
。 - 保留其餘預設值,然後按一下「完成」。
- 在「New backend」(新增後端) 中,選取可用區性 NEG
- 設定第二個後端:
- 點選「新增後端」。
- 在「New backend」(新增後端) 部分,選取執行個體群組
zonal-neg-b
。 - 保留其餘預設值,然後按一下「完成」。
- 保留其餘預設值,然後按一下「儲存」。
- 在 Google Cloud 控制台中,確認「後端設定」旁顯示勾號。如未顯示,請重新檢查一遍,確認是否已完成所有步驟。
設定前端
- 按一下「前端設定」。
- 在「Name」(名稱) 中輸入
ext-tcp-forwarding-rule
。 - 在「Network Service Tier」(網路服務級別) 部分,選取「Standard」(標準)。
- 在「IP address」(IP 位址) 的部分,選取「
ext-tcp-ip-address
」。 - 在「Port number」(通訊埠編號) 部分輸入
9090
。轉送規則只會轉送目的地通訊埠相符的封包。 - 在「Proxy 通訊協定」部分,選取「關閉」,因為 PROXY 通訊協定不適用於 Apache HTTP 伺服器軟體。詳情請參閱「PROXY 通訊協定」。
- 按一下 [完成]。
- 在 Google Cloud 控制台中,確認「Frontend configuration」(前端設定) 旁顯示勾號。如未顯示,請重新檢查一遍,確認您是否已完成上述所有步驟。
檢查並完成
- 按一下 [Review and finalize] (檢查並完成)。
- 重新檢查一遍您的設定。
- 點選「建立」。
gcloud
為後端建立區域健康狀態檢查:
gcloud compute health-checks create tcp tcp-health-check \ --region=REGION_A \ --use-serving-port
建立後端服務:
gcloud compute backend-services create external-tcp-proxy-bs \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=TCP \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
將
ZONE_A
區域中的區域 NEG 新增至後端服務:gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=ZONE_A \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
將
ZONE_B
區域中的區域 NEG 新增至後端服務:gcloud compute backend-services add-backend external-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-b \ --network-endpoint-group-zone=ZONE_B \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
建立目標 TCP Proxy:
gcloud compute target-tcp-proxies create ext-tcp-target-proxy \ --backend-service=external-tcp-proxy-bs \ --region=REGION_A
建立轉送規則。如為
--ports
,請指定介於 1 至 65535 之間的單一通訊埠編號。本範例使用通訊埠9090
。轉送規則只會轉送目的地通訊埠相符的封包。gcloud compute forwarding-rules create ext-tcp-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=lb-network \ --network-tier=STANDARD \ --address=ext-tcp-ip-address \ --ports=9090 \ --region=REGION_A \ --target-tcp-proxy=ext-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A
測試負載平衡器
您已設定好負載平衡器,現在可以測試將流量傳送至負載平衡器的 IP 位址。
取得負載平衡器的 IP 位址。
如要取得 IPv4 位址,請執行下列指令:
gcloud compute addresses describe ADDRESS_NAME
執行下列指令,將流量傳送至負載平衡器。將
LB_IP_ADDRESS
替換為負載平衡器的 IPv4 位址。curl -m1 LB_IP_ADDRESS:9090
後續步驟
- 將 Proxy 網路負載平衡器轉換為 IPv6
- 外部 Proxy 網路負載平衡器總覽。
- Proxy 網路負載平衡器的記錄與監控功能。
- 新增 Private Service Connect。
- 清除負載平衡器設定。