區域性外部 Proxy 網路負載平衡器是以 Proxy 為基礎的區域性第 4 層負載平衡器,可讓您透過外部區域 IP 位址在單一區域中執行及調度 TCP 服務流量。這些負載平衡器會將來自網際網路的外部 TCP 流量,分配給同一個地區的後端。
本指南說明如何設定區域性外部 Proxy 網路負載平衡器,並搭配區域性網路端點群組 (NEG) 後端。
開始前,請先詳閱下列文件:
在本例中,我們會使用負載平衡器,在區域 A 的兩個區域 NEG 中,將 TCP 流量分配給後端 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 會終止來自用戶端的連線,並建立連至後端的新連線。
這個僅限 Proxy 的子網路,會由 lb-network
虛擬私有雲網路的區域 A 中,所有 Envoy 型負載平衡器使用。
主控台
如果您使用的是 Google Cloud 主控台,可以等之後再於「負載平衡」頁面中建立僅限 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執行個體,可允許來自負載平衡器和Google Cloud 健康狀態檢查系統 (130.211.0.0/22
和35.191.0.0/16
) 的流量。這個範例會使用目標標記allow-health-check
來辨識應套用此規則的後端 VM。fw-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
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「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
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「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
- Source filter (來源篩選器):IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.129.0.0/23
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「TCP」TCP核取方塊,然後輸入
80
做為「Port number」(通訊埠編號)。
- Name (名稱):
按一下 [建立]。
gcloud
建立
fw-allow-health-check
規則,允許 Google Cloud 健康檢查在 TCP 通訊埠80
上存取後端執行個體: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: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 版本」部分,選取「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」(選擇),以變更圖片。
點選「進階選項」。
按一下「網路」,然後設定下列欄位:
- 在「網路標記」中輸入
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
。在「子網路」中,選取
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
)。在「Network endpoint group details」(網路端點群組詳細資料) 頁面的「Network endpoints in this group」(這個群組中的網路端點) 區段中,按一下「Add network endpoint」(新增網路端點)。
選取 VM 執行個體 (例如
vm-a1
)。在「Network interface」部分,系統會顯示 VM 名稱、區域和子網路。
- 在「IP 位址」中,輸入新網路端點的 IP 位址。如要取得 IP 位址,請按一下「顯示 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
區域中使用GCE_VM_IP_PORT
端點建立可用區性 NEG: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
區域中使用GCE_VM_IP_PORT
端點建立可用區性 NEG: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」部分,選取「Proxy load balancer」,然後點選「Next」。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合區域工作負載」,然後點選「Next」。
- 按一下 [設定]。
基本設定
- 在「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」。
- 在「Protocol」中,選取「TCP」。
- 設定第一個後端:
- 在「New backend」(新增後端) 中,選取區域性 NEG
zonal-neg-a
。 - 保留其餘預設值,然後按一下「完成」。
- 在「New backend」(新增後端) 中,選取區域性 NEG
- 設定第二個後端:
- 點選「新增後端」。
- 在「New backend」(新增後端) 部分,選取執行個體群組
zonal-neg-b
。 - 保留其餘預設值,然後按一下「完成」。
- 設定健康狀態檢查:
- 在「健康狀態檢查」部分,選取「建立健康狀態檢查」。
- 將健康狀態檢查名稱設為
tcp-health-check
。 - 在「Protocol」中,選取「TCP」。
- 在「Port」(通訊埠) 欄中,輸入
80
。
- 保留剩餘的預設值,然後按一下「儲存」。
- 在 Google Cloud 控制台中,確認「後端設定」旁有勾號。如未顯示,請重新檢查一遍,確認是否已完成所有步驟。
設定前端
- 按一下「前端設定」。
- 在「Name」(名稱) 中輸入
ext-tcp-forwarding-rule
。 - 在「Network Service Tier」中,選取「Standard」。
- 在「IP 位址」部分,選取
ext-tcp-ip-address
。 - 在「Port number」(通訊埠編號) 中輸入
9090
。轉送規則只會轉送具有相符目的地通訊埠的封包。 - 針對「Proxy protocol」,請選取「Off」,因為 Proxy 通訊協定不適用於 Apache HTTP Server 軟體。詳情請參閱「PROXY 通訊協定」。
- 按一下 [完成]。
- 在 Google Cloud 控制台中,確認「前端設定」旁有勾號。如未顯示,請重新檢查一遍,確認是否已完成上述所有步驟。
檢查並完成
- 按一下 [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。
- 清除負載平衡器設定。