區域內部 Proxy 網路負載平衡器是以 Proxy 為基礎的區域第 4 層負載平衡器,可讓您透過內部 IP 位址執行及調度 TCP 服務流量,且只有相同虛擬私有雲網路中的用戶端,或連線至虛擬私有雲網路的用戶端可以存取該 IP 位址。
本指南說明如何設定區域性內部 Proxy 網路負載平衡器,並使用區域網路端點群組 (NEG) 後端。事前準備:
總覽
在本範例中,我們會使用負載平衡器,將 TCP 流量分配到 REGION_A
地區兩個區域 NEG 中的後端 VM。這個範例使用一組設為透過通訊埠 80
回應要求的 Apache 伺服器來提供服務。
在本範例中,您將設定下列部署作業:
區域性內部 Proxy 網路負載平衡器是區域性負載平衡器,所有負載平衡器元件 (後端執行個體群組、後端服務、目標 Proxy 和轉送規則) 都必須位於相同區域。
權限
如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色:
工作 | 必要角色 |
---|---|
建立網路、子網路和負載平衡器元件 | 網路管理員 |
新增與移除防火牆規則 | 安全管理員 |
建立執行個體 | Compute 執行個體管理員 |
詳情請參閱下列指南:
設定網路和子網路
您需要具有兩個子網路的虛擬私有雲網路:一個用於負載平衡器的後端,另一個用於負載平衡器的 Proxy。區域性內部 Proxy 網路負載平衡器屬於區域性資源。如果流量來源位於與負載平衡器相同地區的子網路中,虛擬私有雲端網路內的流量會轉送至負載平衡器。
這個範例會使用以下虛擬私人雲端網路、地區和子網路:
電視網:網路是名為
lb-network
的自訂模式虛擬私有雲網路。後端專用的子網路。
REGION_A
地區中名為backend-subnet
的子網路使用10.1.2.0/24
做為其主要 IP 範圍。Proxy 專用子網路。
REGION_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
使用
gcloud compute networks subnets create
指令,在REGION_A
地區的lb-network
網路中建立子網路: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
虛擬私有雲網路REGION_A
區域中的所有 Envoy 型負載平衡器,都會使用這個僅限 Proxy 的子網路。
主控台
如果您使用 Google Cloud 控制台,可以稍後在「Load balancing」(負載平衡) 頁面中建立僅限 Proxy 的子網路。
如要立即建立僅限 Proxy 的子網路,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
按一下共用虛擬私有雲網路的名稱:
lb-network
。按一下 [新增子網路]。
在「Name」中輸入
proxy-only-subnet
。在「區域」部分,選取「
REGION_A
」。將「用途」設為「區域受管理 Proxy」。
在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。按一下「新增」。
gcloud
使用 gcloud compute networks subnets
create
指令建立僅限 Proxy 的子網路。
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 的子網路建立允許輸入的防火牆規則,允許負載平衡器在 TCP 通訊埠80
上與後端執行個體通訊。本範例使用目標標記allow-proxy-only-subnet
來識別應該適用此規則的後端 VM。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
按一下「建立防火牆規則」:
- 輸入
fw-allow-health-check
的「Name」(名稱)。 - 在「Network」(網路) 下方選取
lb-network
。 - 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)。
- 在「Target tags」(目標標記) 欄位填入
allow-health-check
。 - 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)。
- 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為
130.211.0.0/22
和35.191.0.0/16
。 - 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取 [Specified protocols and ports] (指定的通訊協定與通訊埠)。
- 勾選「TCP」TCP核取方塊,然後輸入
80
做為通訊埠編號。 - 點選「建立」。
- 輸入
再次按一下「建立防火牆規則」,建立允許連入 SSH 連線的規則:
- Name (名稱):
fw-allow-ssh
- Network (網路):
lb-network
- Priority (優先順序):
1000
- 「Direction of traffic」(流量方向):[ingress] (輸入)
- 「Action on match」(相符時執行的動作):[allow] (允許)
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-ssh
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
0.0.0.0/0
- 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入
tcp:22
。
- 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」(相符時執行的動作):[allow] (允許)
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
allow-proxy-only-subnet
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.129.0.0/23
- 「Protocols and ports」(通訊協定和通訊埠):選擇「Specified protocols and ports」(指定的通訊協定和通訊埠),然後輸入
tcp:80
。
- 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 位址
如要為負載平衡器保留靜態內部 IP 位址,請參閱「保留新的靜態內部 IPv4 或 IPv6 位址」。
設定可用區 NEG
在 REGION_A
區域中設定可用區 NEG (含 GCE_VM_IP_PORT
類型端點)。請先建立 VM。然後建立區域性 NEG,並將 VM 的網路端點新增至 NEG。
建立 VM
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設為
vm-a1
。在「區域」部分,選取「
REGION_A
」。如要瞭解「可用區」,請參閱
ZONE_A1
。在「Boot disk」(開機磁碟) 專區中,確認已為開機磁碟選項選取「Debian GNU/Linux 12 (bookworm)」。如有需要,請按一下「Choose」(選擇),以變更映像檔。
點選「進階選項」。
按一下「網路」並設定下列欄位:
- 在「Network tags」(網路標記) 中輸入
allow-ssh
、allow-health-check
和allow-proxy-only-subnet
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
backend-subnet
- Network (網路):
- 在「Network tags」(網路標記) 中輸入
按一下 [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
點選「建立」。
使用下列名稱和區域組合,重複以下步驟來建立另外 3 個 VM:
- 名稱:
vm-a2
,區域:ZONE_A1
- 名稱:
vm-c1
,區域:ZONE_A2
- 名稱:
vm-c2
,區域:ZONE_A2
- 名稱:
gcloud
使用下列 VM_NAME 和 ZONE 的組合,執行以下指令兩次來建立 VM。兩個 VM 的指令碼內容完全相同。
- VM_NAME:
vm-a1
和ZONE:ZONE_A1
- VM_NAME:
vm-a2
和ZONE:ZONE_A1
- VM_NAME:
vm-c1
和ZONE:ZONE_A2
VM_NAME:
vm-c2
和ZONE:ZONE_A2
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_A1
。輸入預設通訊埠:
80
。點選「建立」。
重複本節中的所有步驟,建立第二個區域 NEG,並進行下列設定變更:
- Name (名稱):
zonal-neg-c
- Zone (可用區):
ZONE_A2
- Name (名稱):
將端點新增至可用區性 NEG:
前往 Google Cloud 控制台的「Network endpoint groups」(網路端點群組) 頁面。
按一下上一個步驟中建立的網路端點群組「名稱」 (例如
zonal-neg-a
)。畫面上會顯示「網路端點群組詳細資料」頁面。在「Network endpoints in this group」(這個群組中的網路端點) 區段中,按一下 [Add network endpoint] (新增網路端點]。畫面會出現「Add network endpoint」(新增網路端點) 頁面。
選取 VM 執行個體 (例如
vm-a1
)。「Network interface」(網路介面) 區段會顯示 VM 名稱、區域和子網路。- 輸入新網路端點的「IP address」(IP 位址)。您可以按一下「Check primary IP addresses and alias IP range in nic0」(檢查 nic0 中的主要 IP 位址和別名 IP 範圍),查看 IP 位址。
- 在「通訊埠類型」中選取「預設」,端點會使用網路端點群組中所有端點的預設通訊埠。
80
由於 Apache 伺服器會在通訊埠80
處理要求,因此這個範例已足夠。 - 點選「建立」。
再次按一下「新增網路端點」。選取第二個 VM 執行個體
vm-a2
,然後重複上述步驟,將其端點新增至zonal-neg-a
。重複本節中的所有步驟,從
vm-c1
和vm-c2
新增端點至zonal-neg-c
。
gcloud
在
ZONE_A1
可用區中建立可用區 NEG,並加入GCE_VM_IP_PORT
端點。gcloud compute network-endpoint-groups create zonal-neg-a \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A1 \ --network=lb-network \ --subnet=backend-subnet
您可以在建立 NEG 時指定
--default-port
,或為每個端點指定通訊埠號碼,如下一步所示。將端點新增至可用區 NEG。
gcloud compute network-endpoint-groups update zonal-neg-a \ --zone=ZONE_A1 \ --add-endpoint='instance=vm-a1,port=80' \ --add-endpoint='instance=vm-a2,port=80'
在
ZONE_A2
可用區中建立可用區 NEG,並加入GCE_VM_IP_PORT
端點。gcloud compute network-endpoint-groups create zonal-neg-c \ --network-endpoint-type=GCE_VM_IP_PORT \ --zone=ZONE_A2 \ --network=lb-network \ --subnet=backend-subnet
您可以在建立 NEG 時指定
--default-port
,或為每個端點指定通訊埠號碼,如下一步所示。將端點新增至可用區 NEG。
gcloud compute network-endpoint-groups update zonal-neg-c \ --zone=ZONE_A2 \ --add-endpoint='instance=vm-c1,port=80' \ --add-endpoint='instance=vm-c2,port=80'
設定負載平衡器
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」。
- 在「Proxy or passthrough」(直通或使用 Proxy) 部分,選取「Proxy load balancer」(Proxy 負載平衡器),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 在「Cross-region or single region deployment」(跨區域或單一區域部署) 部分,選取「Best for regional workloads」(最適合區域工作負載),然後點選「Next」(下一步)。
- 按一下「Configure」(設定)。
基本設定
- 在「Name」(名稱) 中輸入
my-int-tcp-lb
。 - 在「Region」(區域) 中選取
REGION_A
。 - 在「Network」(網路) 中選取
lb-network
。
保留僅限 Proxy 子網路
如要保留僅限 Proxy 的子網路,請按照下列步驟操作:
- 按一下「保留子網路」。
- 在「Name」(名稱) 中輸入
proxy-only-subnet
。 - 在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。 - 按一下「新增」。
後端設定
- 按一下「後端設定」。
- 在「Backend type」(後端類型) 部分,選取「Zonal network endpoint group」(可用區網路端點群組)。
- 在「Protocol」(通訊協定) 欄中,選取「TCP」。
- 在「健康狀態檢查」清單中,按一下「建立健康狀態檢查」,然後輸入下列資訊:
- Name (名稱):
tcp-health-check
- 「Protocol」(通訊協定):TCP
- Port (通訊埠):
80
- Name (名稱):
- 點選「建立」。
- 設定第一個後端:
- 在「New backend」(新增後端) 下方,選取可用區性 NEG
zonal-neg-a
。 - 保留其餘預設值,然後按一下「完成」。
- 在「New backend」(新增後端) 下方,選取可用區性 NEG
設定第二個後端:
- 點選「新增後端」。
- 在「New backend」(新增後端) 下方,選取執行個體群組
zonal-neg-c
。 - 保留其餘預設值,然後按一下「完成」。
在 Google Cloud 控制台中,確認「後端設定」旁顯示勾號。如未顯示,請重新檢查一遍,確認是否已完成所有步驟。
前端設定
- 按一下「前端設定」。
- 在「Name」(名稱) 中輸入
int-tcp-forwarding-rule
。 - 在「Subnetwork」(子網路) 中,選取「backend-subnet」。
- 「IP address」(IP 位址) 部分請選取「int-tcp-ip-address」。
- 在「Port number」(通訊埠編號) 部分輸入
9090
。轉送規則只會轉送目的地通訊埠相符的封包。 - 在本範例中,請勿啟用「Proxy 通訊協定」,因為這項通訊協定不適用於 Apache HTTP Server 軟體。詳情請參閱「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 internal-tcp-proxy-bs \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=TCP \ --region=REGION_A \ --health-checks=tcp-health-check \ --health-checks-region=REGION_A
將
ZONE_A1
區域中的區域 NEG 新增至後端服務。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-a \ --network-endpoint-group-zone=ZONE_A1 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
將
ZONE_A2
區域中的區域 NEG 新增至後端服務。gcloud compute backend-services add-backend internal-tcp-proxy-bs \ --network-endpoint-group=zonal-neg-c \ --network-endpoint-group-zone=ZONE_A2 \ --balancing-mode=CONNECTION \ --max-connections-per-endpoint=50 \ --region=REGION_A
建立目標 TCP Proxy。
gcloud compute target-tcp-proxies create int-tcp-target-proxy \ --backend-service=internal-tcp-proxy-bs \ --region=REGION_A
建立轉送規則。如為
--ports
,請指定介於 1 至 65535 之間的單一通訊埠編號。本範例使用通訊埠9090
。轉送規則只會轉送目的地通訊埠相符的封包。gcloud compute forwarding-rules create int-tcp-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=int-tcp-ip-address \ --ports=9090 \ --region=REGION_A \ --target-tcp-proxy=int-tcp-target-proxy \ --target-tcp-proxy-region=REGION_A
測試負載平衡器
如要測試負載平衡器,請在與負載平衡器相同的地區中建立用戶端 VM。然後將流量從用戶端傳送至負載平衡器。
建立用戶端 VM
在與負載平衡器相同的地區中建立用戶端 VM (client-vm
)。
主控台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設定為
client-vm
。將「Zone」(區域) 設為
ZONE_A1
。點選「進階選項」。
按一下「網路」並設定下列欄位:
- 在「網路標記」部分輸入
allow-ssh
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
backend-subnet
- Network (網路):
- 在「網路標記」部分輸入
點選「建立」。
gcloud
用戶端 VM 必須與負載平衡器位於相同的 VPC 網路和區域。不一定要位於相同子網路或區域。用戶端使用的子網路與後端 VM 相同。
gcloud compute instances create client-vm \ --zone=ZONE_A1 \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=backend-subnet
將流量傳送至負載平衡器
您已設定好負載平衡器,現在可以測試將流量傳送至負載平衡器的 IP 位址。
使用 SSH 連線至用戶端執行個體。
gcloud compute ssh client-vm \ --zone=ZONE_A1
確認負載平衡器是否正常提供後端主機名稱。
使用
compute addresses describe
指令查看負載平衡器的 IP 位址:gcloud compute addresses describe int-tcp-ip-address \ --region=REGION_A
記下 IP 位址。
將流量傳送至負載平衡器。將 IP_ADDRESS 替換為負載平衡器的 IP 位址。
curl IP_ADDRESS:9090
後續步驟
- 將 Proxy 網路負載平衡器轉換為 IPv6
- 區域性內部 Proxy 網路負載平衡器總覽。
- 如要設定區域性內部 Proxy 網路負載平衡器的監控功能,請參閱「使用監控功能」。
- 清除負載平衡器設定。