本文件將說明兩種設定範例,說明如何在共用虛擬私有雲 (VPC) 環境中,設定具備 VM 執行個體群組後端的全域外部應用程式負載平衡器:
- 在第一個範例中,負載平衡器的前端和後端元件是在一個服務專案中建立。
- 在第二個範例中,負載平衡器的前端元件和網址對應是在一個服務專案中建立,而負載平衡器的後端服務和後端則是在另一個服務專案中建立。這類部署作業 (在一個專案中的網址對應參照另一專案中的後端服務) 稱為跨專案服務參照。
兩個範例都需要相同的初始設定,才能授予權限、在主機專案中設定網路和子網路,以及設定共用虛擬私有雲,才能開始建立負載平衡器。
全域外部應用程式負載平衡器支援的共用虛擬私有雲配置不限於上述項目。如需瞭解其他有效的共用虛擬私人雲端架構,請參閱「共用虛擬私人雲端架構」。
如果您不想使用共用虛擬私有雲網路,請參閱「設定具有 VM 執行個體群組後端的全域外部應用程式負載平衡器」。
事前準備
- 閱讀共用虛擬私人雲端總覽。
- 請參閱外部應用程式負載平衡器總覽,包括「共用虛擬私人雲端架構」一節。
必要權限
管理員必須進行一些初始設定和佈建作業,才能在共用虛擬私有雲網路上設定負載平衡器。完成初始設定後,服務專案擁有者可以執行下列任一操作:
- 在服務專案中部署所有負載平衡器元件及其後端。
- 在服務專案中部署負載平衡器的後端元件 (後端服務和後端),這些元件可由其他服務或主機專案中的網址對應參照。
本節將概述按照本指南設定共用虛擬私有雲網路負載平衡器時,所需的權限。
設定共用虛擬私有雲
如要執行下列工作,您必須具備下列角色:
- 執行一次性管理工作,例如設定共用虛擬私有雲和啟用主專案。
- 執行管理工作,每次要導入新服務專案時都必須重複執行。包括附加服務專案、佈建及設定網路資源,以及授予服務專案管理員存取權。
這些工作必須在共用虛擬私有雲主專案中執行。建議您將共用 VPC 管理員設為共用 VPC 主專案的擁有者。系統會自動授予網路管理員和安全管理員角色。
工作 | 必要角色 |
---|---|
設定共用虛擬私人雲端、啟用主專案,並授予服務專案管理員存取權 | 共用虛擬私有雲管理員 |
在共用 VPC 主機專案中建立子網路,並授予服務專案管理員存取權 | 網路管理員 |
新增與移除防火牆規則 | 安全性管理員 |
子網路佈建完成後,主專案擁有者必須將主專案中的網路使用者角色授予需要使用這些資源的任何人 (通常是服務專案管理員、開發人員或服務帳戶)。
工作 | 必要角色 |
---|---|
使用屬於主專案的 VPC 網路和子網路 | 網路使用者 |
您可以在專案層級或個別子網路中授予這個角色。建議您在個別子網路上授予角色。在專案上授予角色後,即可存取主機專案虛擬私有雲網路中現有和日後的所有子網路。
部署負載平衡器和後端
服務專案管理員需要在服務專案中具備下列角色,才能建立負載平衡資源和後端。這些權限會自動授予服務專案擁有者或編輯者。
工作 | 必要角色 |
---|---|
建立負載平衡器元件 | 網路管理員 |
建立執行個體 | 執行個體管理員 |
建立及修改 SSL 憑證 | 安全性管理員 |
參照跨專案後端服務
如果負載平衡器需要參照其他服務專案的後端服務 (也稱為跨專案服務參照),負載平衡器管理員必須在建立後端服務的服務專案中具備下列角色。
工作 | 必要角色 |
---|---|
具備在其他專案中使用服務的權限 | 負載平衡器服務使用者 |
您可以在專案層級或個別後端服務層級授予這個角色。如需授予此角色的操作說明,請參閱本頁的跨專案服務參照範例。
如要進一步瞭解 IAM,請參閱下列指南:
事前準備
在本節中,您需要執行下列步驟:
您不必每次建立新的負載平衡器時,都執行本節中的步驟。不過,您必須先確認自己有權存取這裡所述的資源,才能繼續建立負載平衡器。
在主專案中設定網路和子網路
您需要共用虛擬私有雲網路,並為負載平衡器的後端提供子網路。這個範例使用以下網路、地區和子網路:
網路:網路名稱為
lb-network
。負載平衡器後端的子網路。
us-west1
地區中名為lb-backend-subnet
的子網路使用10.1.2.0/24
做為其主要 IP 範圍。
為負載平衡器的後端設定子網路
您不必每次建立新負載平衡器時都執行這項步驟。您只需要確保服務專案有權存取共用虛擬私有雲網路中的子網路。本節的所有步驟都必須在主機專案中執行。
主控台
- 在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
- 按一下「建立虛擬私有雲網路」。
- 在「Name」(名稱) 中輸入
lb-network
。 在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
lb-backend-subnet
Region (區域):
us-west1
IP address range (IP 位址範圍):
10.1.2.0/24
- Name (名稱):
按一下 [完成]。
按一下 [建立]。
gcloud
使用
gcloud compute networks create
指令建立虛擬私有雲網路:gcloud compute networks create lb-network --subnet-mode=custom
在
us-west1
地區的lb-network
網路中建立子網路:gcloud compute networks subnets create lb-backend-subnet
--network=lb-network
--range=10.1.2.0/24
--region=us-west1
授予服務專案管理員後端子網路的存取權
服務專案管理員必須具備lb-backend-subnet
子網路的存取權,才能佈建負載平衡器的後端。共用虛擬私有雲管理員必須將後端子網路存取權授予服務專案管理員 (或部署使用子網路的資源和後端的開發人員)。如需操作說明,請參閱「部分子網路的服務專案管理員」。
在主機專案中設定防火牆規則
本範例使用以下防火牆規則:fw-allow-health-check
:輸入規則,適用於要進行負載平衡的執行個體,可允許來自130.211.0.0/22
和35.191.0.0/16
中 Google Cloud健康檢查系統的所有 TCP 流量。這個範例會使用目標標記load-balanced-backend
來辨識應套用這項規則的執行個體。
本節的所有步驟都必須在主機專案中執行。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
- 按一下「Create firewall rule」(建立防火牆規則),建立允許 Google Cloud 健康檢查的規則:
- Name (名稱):
fw-allow-health-check
- Network (網路):
lb-network
- 「Direction of traffic」(流量方向):ingress
- 「Action on match」(相符時執行的動作):允許
- 「Target」(目標):指定的目標標記
- 「Target tags」(目標標記):
load-balanced-backend
- Source filter (來源篩選器):IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22
和35.191.0.0/16
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「TCP」TCP,然後輸入
80
做為通訊埠編號。
最佳做法是將此規則限制為只允許與健康檢查所使用的通訊協定和通訊埠相符的項目。如果您將
tcp:80
用於通訊協定和通訊埠, Google Cloud 可以使用通訊埠80
上的 HTTP 與 VM 聯絡,但無法使用通訊埠443
上的 HTTPS 與 VM 聯絡。 - 按一下 [建立]。
gcloud
建立
fw-allow-health-check
防火牆規則,允許Google Cloud 健康狀態檢查。這個範例可允許來自健康狀態檢查探測器的所有 TCP 流量。不過,您可以設定較狹隘的連接埠組合,以符合需求。gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=load-balanced-backend \ --rules=tcp
在主專案中設定共用虛擬私有雲
這個步驟包括啟用共用虛擬私有雲主專案、共用主專案的子網路,以及將服務專案連結至主專案,以便服務專案使用共用虛擬私有雲網路。如要在主專案中設定共用虛擬私有雲,請參閱下列頁面:
以下操作說明假設您已設定共用虛擬私人雲端。包括為機構設定 IAM 政策,以及指定主機和服務專案。
請先設定共用虛擬私有雲,並啟用主專案和服務專案,再繼續操作。
完成本節所述的必備條件後,您可以採用下列任一設定:
在服務專案中設定負載平衡器
在主機專案中設定 VPC 網路並完成共用虛擬私有雲設定後,您可以將注意力轉移到服務專案,並在其中建立所有負載平衡元件 (後端服務、網址對應、目標 Proxy 和轉送規則) 和後端。
本節假設您已在主機專案中執行先決步驟,詳情請參閱上一節。在本節中,負載平衡器的前端和後端元件會與後端一起在一個服務專案中建立。
下圖顯示服務專案中全域外部應用程式負載平衡器的元件,該專案已連結至共用虛擬私有雲網路中的主專案。
這些步驟應由服務專案管理員 (或在服務專案中運作的開發人員) 執行,不需要主專案管理員介入。本節的步驟與設定全域外部應用程式負載平衡器的標準步驟相似。
本頁的範例會為全域外部應用程式負載平衡器的轉送規則明確設定保留的 IP 位址,而不允許分配暫時性 IP 位址。建議您最好為轉送規則保留 IP 位址。
建立代管執行個體群組後端
建立代管執行個體群組之前,您必須先建立執行個體範本,這是一種資源,可用來建立虛擬機器 (VM) 執行個體。從用戶端到執行個體群組 VM 的流量會經過負載平衡。代管執行個體群組提供的 VM 會執行外部應用程式負載平衡器的後端伺服器。在這個範例中,後端會提供自己的主機名稱。
主控台
建立執行個體範本
在 Google Cloud 控制台中,前往 Compute Engine 的「Instance templates」(執行個體範本) 頁面。
點選「建立執行個體範本」。
在「Name」(名稱) 中輸入
backend-template
。在「Boot disk」(開機磁碟) 專區中,確認開機磁碟已設為 Debian 映像檔,例如 Debian GNU/Linux 12 (bookworm)。如有需要,請按一下「Change」(變更),以變更圖片。
展開「Advanced options」(進階選項) 區段。
展開「Networking」(網路) 專區,然後在「Network tags」(網路標記) 欄位中輸入
load-balanced-backend
。在「網路介面」部分,選取「與我共用的網路 (來源主專案:
HOST_PROJECT_ID
)」。在「Shared subnetwork」清單中,選取
lb-network
網路中的lb-backend-subnet
子網路。展開「Management」(管理) 區段,並在「Automation」(自動化) 欄位中指定下列開機指令碼:
#! /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
按一下 [建立]。
建立代管執行個體群組
在 Google Cloud 控制台中,前往 Compute Engine 的「Instance groups」(執行個體群組) 頁面。
按一下「建立執行個體群組」。
從選項中選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。
輸入
lb-backend
做為執行個體群組的名稱。在「Instance template」(執行個體範本) 清單中,選取您在上一個步驟中建立的執行個體範本
backend-template
。在「Location」(位置) 專區中,選取「Single zone」(單一可用區),並輸入下列值:
在「Region」(區域) 中選取
us-west1
。在「Zone」(可用區) 中選取
us-west1-a
。
在「Autoscaling」(自動調度資源) 區段中,輸入以下的值:
針對「Autoscaling mode」(自動調度資源模式),選取「On: add and remove instances to the group」(開啟:在群組中新增和移除執行個體)。
在「Minimum number of instances」(執行個體數量下限) 中選取
2
。在「Maximum number of instances」(執行個體數量上限) 中選取
3
。
在「Port mapping」(通訊埠對應) 專區中,按一下「Add port」(新增通訊埠),然後輸入下列值:
在「Port name」(通訊埠名稱) 中輸入
http
。在「Port number」(通訊埠編號) 中輸入
80
。
按一下 [建立]。
gcloud
建立執行個體範本:
gcloud compute instance-templates create backend-template \ --region=us-west1 \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \ --tags=load-balanced-backend \ --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 systemctl restart apache2' \ --project=SERVICE_PROJECT_ID
建立代管執行個體群組,並選取在上一個步驟中建立的執行個體範本:
gcloud compute instance-groups managed create lb-backend \ --zone=us-west1-a \ --size=2 \ --template=backend-template \ --project=SERVICE_PROJECT_ID
將已命名通訊埠新增至執行個體群組:
gcloud compute instance-groups set-named-ports lb-backend \ --named-ports=http:80 \ --zone=us-west1-a \ --project=SERVICE_PROJECT_ID
建立健康狀態檢查
健康狀態檢查可以確認後端的可用性。建立使用 HTTP 通訊協定和在 80
通訊埠上探測的健康狀態檢查。稍後,您將將此健康狀態檢查附加至負載平衡器參照的後端服務。
主控台
在 Google Cloud 控制台中,前往 Compute Engine 的「Health checks」(健康狀態檢查) 頁面。
將健康狀態檢查的名稱設為
lb-health-check
。將「Protocol」(通訊協定) 設為「HTTP」HTTP。
按一下 [建立]。
gcloud
建立 HTTP 健康狀態檢查。
gcloud compute health-checks create http lb-health-check \ --use-serving-port \ --project=SERVICE_PROJECT_ID
保留負載平衡器的 IP 位址
預留可指派給負載平衡器轉送規則的全域靜態外部 IP 位址。
主控台
在 Google Cloud 控制台中,前往虛擬私有雲的「IP addresses」(IP 位址) 頁面。
按一下「保留外部靜態 IP 位址」。
在「Name」(名稱) 中輸入
lb-ipv4-1
。將「Network Service Tier」(網路服務級別) 設為「Premium」。
將「IP version」(IP 版本) 設為「IPv4」。
將「Type」(類型) 設為「Global」(通用)。
按一下「保留」。
gcloud
建立全域靜態外部 IP 位址。
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global --project=SERVICE_PROJECT_ID
設定 SSL 憑證資源
如果負載平衡器使用 HTTPS 做為要求和回應通訊協定,請按照下列資源所述建立 SSL 憑證資源:
建議您使用 Google 代管的憑證。
這個範例假設您已建立名為 lb-ssl-cert
的 SSL 憑證。安全資料傳輸層 (SSL) 憑證會附加至您在下列步驟中建立的目標 Proxy。
設定負載平衡器
本節說明如何為全域外部應用程式負載平衡器建立下列資源:
- 以代管執行個體群組做為後端的後端服務
- 網址對應
- SSL 憑證 (僅適用於 HTTPS 流量)
- 目標 Proxy
- 轉送規則
在這個範例中,您可以使用 HTTP 或 HTTPS 做為用戶端與負載平衡器之間的要求與回應通訊協定。如為 HTTPS,您需要安全資料傳輸層 (SSL) 憑證資源才能設定 Proxy。建議使用 Google 代管的憑證。
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external Application Load Balancer」(全域外部應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器名稱中輸入
l7-xlb-shared-vpc
。
設定負載平衡器前端
HTTP 流量:
按一下「前端設定」。
在負載平衡器前端的「Name」(名稱) 中輸入
http-fw-rule
。針對「Protocol」(通訊協定),選取「HTTP」。
將「IP version」(IP 版本) 設為「IPv4」。
在「IP address」(IP 位址) 的部分,選取您先前預留的 IP 位址「
lb-ipv4-1
」。將「Port」(通訊埠) 設為「
80
」,接受 HTTP 流量。如要完成前端設定,請按一下「完成」。
繼續操作之前,請先驗證「Frontend configuration」旁是否有藍色勾號。
針對 HTTPS 流量:
按一下「前端設定」。
在負載平衡器前端的「Name」(名稱) 中輸入
https-fw-rule
。在「Protocol」(通訊協定) 欄中,選取「HTTPS」。
將「IP version」(IP 版本) 設為「IPv4」。
在「IP address」(IP 位址) 的部分,選取您先前預留的 IP 位址「
lb-ipv4-1
」。將「Port」(通訊埠) 設為
443
,允許 HTTPS 流量。在「Certificate」清單中,選取您建立的 SSL 憑證。
如要完成前端設定,請按一下「完成」。
繼續操作之前,請先驗證「Frontend configuration」(前端設定) 旁是否有藍色勾號。
設定後端
按一下「後端設定」。
在「Backend services and backend buckets」(後端服務和後端值區) 選單中,按一下「Create a backend service」(建立後端服務)。
輸入
lb-backend-service
做為後端服務的名稱。在「Backend type」(後端類型) 部分,選取「Instance group」(執行個體群組)。
將「Protocol」(通訊協定) 設為「HTTP」。
在「Named port」(已命名通訊埠) 欄位輸入
http
,也就是您在建立代管執行個體群組時輸入的通訊埠名稱。如要將後端新增至後端服務,請按照下列指示操作:
在「Backends」專區中,將「Instance group」設為
lb-backend
,也就是您在先前步驟中建立的代管執行個體群組。在「Port numbers」(通訊埠編號) 的部分,輸入
80
。如要新增後端,請按一下「完成」。
如要新增健康狀態檢查,請在「Health check」(健康狀態檢查) 清單中選取
lb-health-check
,也就是您先前建立的健康狀態檢查。如要建立後端服務,請按一下「Create」(建立)。
繼續操作之前,請先驗證「Backend configuration」旁是否有藍色勾號。
設定轉送規則
- 按一下「轉送規則」。確保
lb-backend-service
是任何不相符主機和路徑的預設後端服務。
如要瞭解流量管理,請參閱「設定流量管理」一文。
檢查並完成設定
按一下「檢查並完成」。
查看負載平衡器的前端和後端設定,確認其設定正確無誤。
按一下「建立」,然後等待負載平衡器建立完成。
gcloud
建立後端服務,將流量分配到後端:
gcloud compute backend-services create lb-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=lb-health-check \ --global \ --project=SERVICE_PROJECT_ID
將執行個體群組新增至後端服務,做為後端使用:
gcloud compute backend-services add-backend lb-backend-service \ --instance-group=lb-backend \ --instance-group-zone=us-west1-a \ --global \ --project=SERVICE_PROJECT_ID
建立網址對應,將連入的要求轉送至後端服務:
gcloud compute url-maps create lb-map \ --default-service=lb-backend-service \ --global \ --project=SERVICE_PROJECT_ID
建立目標 Proxy。
針對 HTTP 流量,建立目標 HTTP Proxy,將要求轉送至網址對應:
gcloud compute target-http-proxies create http-proxy \ --url-map=lb-map \ --global \ --project=SERVICE_PROJECT_ID
針對 HTTPS 流量,請建立目標 HTTPS Proxy,將要求轉送至網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡器的 SSL 憑證,因此您還可以在此步驟中載入 SSL 憑證:
gcloud compute target-https-proxies create https-proxy \ --url-map=lb-map \ --ssl-certificates=lb-ssl-cert --global \ --project=SERVICE_PROJECT_ID
建立轉送規則。
針對 HTTP 流量,請建立全域轉送規則,將傳入要求轉送至目標 Proxy:
gcloud compute forwarding-rules create http-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-proxy \ --ports=80 \ --project=SERVICE_PROJECT_ID
針對 HTTPS 流量,請建立全域轉送規則,將傳入要求轉送至目標 Proxy:
gcloud compute forwarding-rules create https-fw-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=lb-ipv4-1 \ --global \ --target-https-proxy=https-proxy \ --ports=443 \ --project=SERVICE_PROJECT_ID
測試負載平衡器
負載平衡服務執行時,您可以將流量傳送至轉送規則,並觀察流量是否分散到不同的執行個體。
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
點選剛剛建立的負載平衡器。
記下負載平衡器的 IP 位址。這個 IP 位址在後續步驟中稱為
LB_IP_ADDRESS
。在「Backend」(後端) 區段中,確認 VM 健康狀態良好。
「Healthy」欄應已填妥,顯示 VM 的健康狀態良好。舉例來說,如果您建立了兩個執行個體,就會看到訊息,指出
2 of 2
旁邊有綠色勾號。如果看到其他資訊,請先嘗試重新載入頁面。 Google Cloud 主控台可能需要幾分鐘的時間,才能顯示虛擬機的健康狀態。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到您後端 VM 的防火牆設定與網路標記設定。在 Google Cloud 控制台顯示後端執行個體健康後,您可以將網路瀏覽器指向
https://LB_IP_ADDRESS
(或http://LB_IP_ADDRESS
),藉此測試負載平衡器。請將LB_IP_ADDRESS
替換為負載平衡器的 IP 位址。如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示頁面,並於其中列出提供該頁面的執行個體名稱 (例如
Page served from: lb-backend-example-xxxx
)。如果您的瀏覽器無法顯示這個頁面,請檢查本指南中的設定。
gcloud
請注意預留的 IP 位址:
gcloud compute addresses describe IP_ADDRESS_NAME \ --format="get(address)" \ --global
您可以將網路瀏覽器指向 https://LB_IP_ADDRESS
(或 http://LB_IP_ADDRESS
),藉此測試負載平衡器。請將 LB_IP_ADDRESS
替換為負載平衡器的 IP 位址。
如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示含有後端執行個體最少資訊的頁面。如果您的瀏覽器無法顯示這個頁面,請參閱本指南中的設定說明。
設定具有跨專案後端服務的負載平衡器
本節說明如何在共用虛擬私有雲環境中,設定具有跨專案後端服務的負載平衡器。
事前準備
本頁先前的範例說明如何設定共用虛擬私有雲部署作業,在其中建立所有負載平衡器元件及其後端,全域外部應用程式負載平衡器也能讓您設定共用虛擬私有雲部署作業,其中主專案或服務專案中的網址對應項目會參照共用虛擬私有雲環境中多個服務專案中的後端服務 (和後端)。
您可以參考本節的步驟,設定下列任何支援的組合:
- 主機專案中的轉送規則、目標 Proxy 和網址對應,以及服務專案中的後端服務
- 一個服務專案中的轉送規則、目標 Proxy 和網址對應,以及另一個服務專案中的後端服務
雖然本節使用共用虛擬私有雲環境設定跨專案部署作業,但並非必要。對於全球外部應用程式負載平衡器,負載平衡器前端可以參照同一個機構內任何專案的後端服務或後端值區。
設定需求
如果您尚未完成,請務必完成所有必要步驟,設定共用虛擬私有雲,並設定本例所需的網路、子網路和防火牆規則。如需操作說明,請參閱本頁開頭的以下各節:
在這種設定中,轉送規則、目標 Proxy 和網址對應會位於一個服務專案中,而後端服務和後端則位於另一個服務專案中。
- 在服務專案 B 中,您將設定下列後端資源:
- 代管執行個體群組後端
- 健康狀態檢查
- 全球後端服務
- 在服務專案 A 中,您會設定下列前端資源:
- IP 位址
- SSL 憑證
- 網址對應
- 目標 Proxy
- 轉送規則
下圖顯示全域外部應用程式負載平衡器,其中一個服務專案中的負載平衡器後端服務,會由另一個服務專案中的網址對應參照。
使用全域外部應用程式負載平衡器的跨專案服務參照,不需要後端執行個體屬於同一個 VPC 網路或共用虛擬私有雲網路。
在這個範例中,服務專案中的後端虛擬機器是主專案中建立的共用虛擬私有雲網路的一部分。不過,您也可以在服務專案中設定獨立虛擬私有雲網路 (即未共用的虛擬私有雲網路),以及必要的防火牆規則。接著,您可以建立屬於這個獨立虛擬私有雲網路的後端執行個體 (例如執行個體群組)。建立後端執行個體後,您可以按照本範例所示的其餘步驟,在服務專案中建立後端服務,並使用跨專案服務參照將其連結至另一個服務專案中的網址對應。
在服務專案 B 中設定負載平衡器的後端元件
在本節中,您需要在服務專案 B 中設定下列後端資源:
- 代管執行個體群組
- 健康狀態檢查
- 全球後端服務
建立代管執行個體群組後端
建立代管執行個體群組之前,您必須先建立執行個體範本,這是一種資源,可用來建立虛擬機器 (VM) 執行個體。從用戶端到執行個體群組 VM 的流量會經過負載平衡。代管執行個體群組提供的 VM 會執行外部應用程式負載平衡器的後端伺服器。在這個範例中,後端會提供自己的主機名稱。
主控台
建立執行個體範本
在 Google Cloud 控制台中,前往 Compute Engine 的「Instance templates」(執行個體範本) 頁面。
點選「建立執行個體範本」。
在「Name」(名稱) 中輸入
backend-template
。在「Boot disk」(開機磁碟) 專區中,確認開機磁碟已設為 Debian 映像檔,例如 Debian GNU/Linux 12 (bookworm)。如有需要,請按一下「Change」(變更),以變更映像檔。
展開「Advanced options」(進階選項) 區段。
展開「Networking」(網路) 專區,然後在「Network tags」(網路標記) 欄位中輸入
load-balanced-backend
。在「Network interfaces」中,選取「Networks shared with me (from host project:
HOST_PROJECT_ID)
)」。在「共用子網路」清單中,選取
lb-network
網路中的lb-backend-subnet
子網路。展開「Management」(管理) 區段,並在「Automation」(自動化) 欄位中指定下列開機指令碼:
#! /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
按一下 [建立]。
建立代管執行個體群組
在 Google Cloud 控制台中,前往 Compute Engine 的「Instance groups」(執行個體群組) 頁面。
按一下「建立執行個體群組」。
從選項中選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。
輸入
lb-backend
做為執行個體群組的名稱。在「Instance template」(執行個體範本) 清單中,選取您在上一個步驟中建立的執行個體範本
backend-template
。在「Location」(位置) 專區中,選取「Single zone」(單一可用區),並輸入下列值:
在「Region」(區域) 中選取
us-west1
。在「Zone」(可用區) 中選取
us-west1-a
。
在「Autoscaling」(自動調度資源) 區段中,輸入以下的值:
針對「Autoscaling mode」(自動調度資源模式),選取「On: add and remove instances to the group」(開啟:在群組中新增和移除執行個體)。
在「Minimum number of instances」(執行個體數量下限) 中選取
2
。在「Maximum number of instances」(執行個體數量上限) 中選取
3
。
在「Port mapping」(通訊埠對應) 專區中,按一下「Add port」(新增通訊埠),然後輸入下列值:
在「Port name」(通訊埠名稱) 中輸入
http
。在「Port number」(通訊埠編號) 中輸入
80
。
按一下 [建立]。
gcloud
建立執行個體範本:
gcloud compute instance-templates create backend-template \ --region=us-west1 \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \ --tags=load-balanced-backend \ --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 systemctl restart apache2' \ --project=SERVICE_PROJECT_B_ID
建立代管執行個體群組,並選取在上一個步驟中建立的執行個體範本:
gcloud compute instance-groups managed create lb-backend \ --zone=us-west1-a \ --size=2 \ --template=backend-template \ --project=SERVICE_PROJECT_B_ID
將已命名通訊埠新增至執行個體群組:
gcloud compute instance-groups set-named-ports lb-backend \ --named-ports=http:80 \ --zone=us-west1-a \ --project=SERVICE_PROJECT_B_ID
建立健康狀態檢查
健康狀態檢查可以確認後端的可用性。建立使用 HTTP 通訊協定和在 80
通訊埠上探測的健康狀態檢查。稍後,您將將此健康狀態檢查附加至負載平衡器參照的後端服務。
主控台
在 Google Cloud 控制台中,前往 Compute Engine 的「Health checks」(健康狀態檢查) 頁面。
將健康狀態檢查的名稱設為
lb-health-check
。將「Protocol」(通訊協定) 設為「HTTP」HTTP。
按一下 [建立]。
gcloud
建立 HTTP 健康狀態檢查。
gcloud compute health-checks create http lb-health-check \ --use-serving-port \ --project=SERVICE_PROJECT_B_ID
建立全域後端服務
建立全域後端服務,將流量分配到後端。在這個步驟中,您需要將建立的健康狀態檢查指派給後端服務,並將執行個體群組新增至後端服務,做為後端使用。
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
前往「後端」部分。
按一下「建立後端服務」。
在「全域後端服務」部分,按一下旁邊的「建立」按鈕。
輸入
cross-ref-backend-service
做為後端服務的名稱。在「Backend type」(後端類型) 部分,選取「Instance group」(執行個體群組)。
將「Protocol」(通訊協定) 設為「HTTP」。
在「Named port」(已命名通訊埠) 欄位輸入
http
,也就是您在建立代管執行個體群組時輸入的通訊埠名稱。如要將後端新增至後端服務,請按照下列指示操作:
在「Backends」專區中,將「Instance group」設為
lb-backend
,也就是您在先前步驟中建立的代管執行個體群組。在「Port numbers」(通訊埠編號) 的部分,輸入
80
。如要新增後端,請按一下「完成」。
如要新增健康狀態檢查,請在「Health check」(健康狀態檢查) 清單中選取
lb-health-check
,也就是您先前建立的健康狀態檢查。選用:在「Add permissions」(新增權限) 部分,輸入其他專案中具有 Compute 負載平衡器管理員角色 (
roles/compute.loadBalancerAdmin
) 的 IAM 主體 (通常是電子郵件地址),以便他們在自己的專案中為負載平衡器使用此後端服務。如果沒有這項權限,就無法使用跨專案服務參照。如果您沒有權限為此專案中的後端服務設定存取控制政策,還是可以立即建立後端服務,授權使用者稍後可執行這項步驟,詳情請參閱「授予 Compute Load Balancer 管理員使用後端服務的權限」一節。該部分也說明如何授予此專案中所有後端服務的存取權,這樣您就不必每次建立新的後端服務時都授予存取權。
如要建立後端服務,請按一下「Create」(建立)。
gcloud
建立全域後端服務,將流量分配到後端:
gcloud compute backend-services create cross-ref-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=lb-health-check \ --global \ --project=SERVICE_PROJECT_B_ID
將執行個體群組新增至後端服務,做為後端使用:
gcloud compute backend-services add-backend cross-ref-backend-service \ --instance-group=lb-backend \ --instance-group-zone=us-west1-a \ --global \ --project=SERVICE_PROJECT_B_ID
在服務專案 A 中設定負載平衡器的前端元件
在本節中,您需要在服務專案 A 中設定下列前端資源:
- IP 位址
- SSL 憑證
- 網址對應
- 目標 Proxy
- 轉送規則
保留負載平衡器的 IP 位址
預留可指派給負載平衡器轉送規則的全域靜態外部 IP 位址。
主控台
在 Google Cloud 控制台中,前往虛擬私有雲的「IP addresses」(IP 位址) 頁面。
按一下「保留外部靜態 IP 位址」。
在「Name」(名稱) 中輸入
cross-ref-ip-address
。將「Network Service Tier」(網路服務級別) 設為「Premium」。
將「IP version」(IP 版本) 設為「IPv4」。
將「Type」(類型) 設為「Global」(通用)。
按一下「保留」。
gcloud
建立全域靜態外部 IP 位址。
gcloud compute addresses create cross-ref-ip-address \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global \ --project=SERVICE_PROJECT_A_ID
設定 SSL 憑證資源
如果負載平衡器使用 HTTPS 做為要求和回應通訊協定,請按照下列資源所述建立 SSL 憑證資源:
建議您使用 Google 代管的憑證。
這個範例假設您已建立名為 lb-ssl-cert
的 SSL 憑證。安全資料傳輸層 (SSL) 憑證會附加至您在下列步驟中建立的目標 Proxy。
建立前端元件
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external Application Load Balancer」(全域外部應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 輸入負載平衡器的「Name」(名稱):
cross-ref-lb-shared-vpc
。 - 請保持頁面開啟狀態,以便繼續操作。
設定前端
HTTP:
- 按一下「前端設定」。
- 輸入轉寄規則的「Name」(名稱):
cross-ref-http-forwarding-rule
。 - 將「Protocol」(通訊協定) 設為
HTTP
。 - 選取您在「保留負載平衡器的 IP 位址」中建立的 IP 位址 (稱為 cross-ref-ip-address)。
- 將「Port」(通訊埠) 設為
80
。 - 按一下 [完成]。
適用於 HTTPS:
如果您在用戶端與負載平衡器間使用的是 HTTPS,則需要有一個或多個 SSL 憑證資源才能設定 Proxy。如要瞭解如何建立 SSL 憑證資源,請參閱「SSL 憑證」。區域性外部應用程式負載平衡器不支援 Google 代管憑證。
- 按一下「前端設定」。
- 輸入轉寄規則的「Name」(名稱):
cross-ref-https-forwarding-rule
。 - 在「Protocol」欄位中選取
HTTPS (includes HTTP/2)
。 - 選取您在「保留負載平衡器的 IP 位址」中建立的 IP 位址 (稱為 cross-ref-ip-address)。
- 確認「Port」(通訊埠) 已設為
443
,以允許 HTTPS 流量。 - 按一下「憑證」清單。
- 如果您已擁有自行管理的 SSL 憑證資源,且想要做為主要 SSL 憑證使用,請從選單中選取所需資源。
- 否則,請選取「Create a new certificate」。
- 輸入 SSL 憑證的「名稱」。
- 將 PEM 格式的檔案上傳至相對應的欄位:
- 公用金鑰憑證
- 憑證鏈結
- 私密金鑰
- 按一下 [建立]。
- 如要新增主要安全資料傳輸層 (SSL) 憑證資源以外的憑證資源,請按照下列指示操作:
- 按一下「新增憑證」。
- 從「Certificates」清單中選取所需憑證,或是按一下「Create a new certificate」並按照先前的操作說明操作。
- 按一下 [完成]。
設定後端
- 按一下「後端設定」。
- 按一下「跨專案後端服務」。
- 在「Project ID」中,輸入服務專案 B 的專案 ID。
- 在「Select backend services」(選取後端服務)清單中,選取要使用的服務專案 B 中的後端服務。在本例中,請輸入
cross-ref-backend-service
。 - 按一下「確定」。
設定轉送規則
- 按一下「轉送規則」。確認「cross-ref-backend-service」cross-ref-backend-service是任何不相符主機和路徑的唯一後端服務。
如要瞭解流量管理,請參閱「設定流量管理」一文。
檢查並完成設定
- 按一下 [建立]。
gcloud
選用:建立含有交叉參照後端服務的負載平衡器前,請先確認您要參照的後端服務是否可使用網址對應進行參照:
gcloud compute backend-services list-usable \ --global \ --project=SERVICE_PROJECT_B_ID
建立網址對應,將連入的要求轉送至後端服務:
gcloud compute url-maps create cross-ref-url-map \ --default-service=projects/SERVICE_PROJECT_B_ID/global/backendServices/cross-ref-backend-service \ --global \ --project=SERVICE_PROJECT_A_ID
建立目標 Proxy。
針對 HTTP 流量,建立目標 HTTP Proxy,將要求轉送至網址對應:
gcloud compute target-http-proxies create cross-ref-http-proxy \ --url-map=cross-ref-url-map \ --global \ --project=SERVICE_PROJECT_A_ID
針對 HTTPS 流量,請建立目標 HTTPS Proxy,將要求轉送至網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡器的 SSL 憑證,因此您還可以在此步驟中載入 SSL 憑證:
gcloud compute target-https-proxies create cross-ref-https-proxy \ --url-map=cross-ref-url-map \ --ssl-certificates=lb-ssl-cert \ --global \ --project=SERVICE_PROJECT_A_ID
建立轉送規則。
針對 HTTP 流量,請建立全域轉送規則,將傳入要求轉送至目標 Proxy:
gcloud compute forwarding-rules create cross-ref-http-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=cross-ref-ip-address \ --global \ --target-http-proxy=cross-ref-http-proxy \ --ports=80 \ --project=SERVICE_PROJECT_A_ID
針對 HTTPS 流量,請建立全域轉送規則,將傳入要求轉送至目標 Proxy:
gcloud compute forwarding-rules create cross-ref-https-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --address=cross-ref-ip-address \ --global \ --target-https-proxy=cross-ref-https-proxy \ --ports=443 \ --project=SERVICE_PROJECT_A_ID
將權限授予 Compute Load Balancer 管理員,以便使用後端服務
如果您希望負載平衡器參照其他服務專案中的後端服務,負載平衡器管理員必須具備 compute.backendServices.use
權限。如要授予這項權限,您可以使用名為 Compute 負載平衡器服務使用者 (roles/compute.loadBalancerServiceUser
) 的預先定義 IAM 角色。這個角色必須由服務專案管理員授予,且可在專案層級或個別後端服務層級套用。
如果您在建立後端服務時,已在後端服務層級授予必要權限,則不必執行這個步驟。您可以略過這個部分,也可以繼續閱讀,瞭解如何授予此專案中所有後端服務的存取權,這樣您就不必每次建立新的後端服務時都授予存取權。
在本例中,服務專案 B 的服務專案管理員必須執行一項下列指令,才能將 compute.backendServices.use
權限授予服務專案 A 的負載平衡器管理員。您可以在專案層級 (針對專案中的所有後端服務) 或各後端服務中執行這項操作。
主控台
專案層級權限
請按照下列步驟,為專案中的所有後端服務授予權限。
您必須具備 compute.backendServices.setIamPolicy
和 resourcemanager.projects.setIamPolicy
權限,才能完成這個步驟。
前往 Google Cloud 控制台的「IAM」頁面。
選取專案。
按一下「授予存取權」。
在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。
在「Select a role」(請選擇角色) 清單中,選取「Compute Load Balancer Services User」(Compute Load Balancer 服務使用者)。
選用:為角色新增條件。
按一下 [儲存]。
個別後端服務的資源層級權限
請按照下列步驟,為專案中的個別後端服務授予權限。
您必須具備 compute.backendServices.setIamPolicy
權限,才能完成這個步驟。
在 Google Cloud 控制台中,前往「Backends」頁面。
從後端服務清單中選取要授予存取權的後端服務,然後按一下「Permissions」(權限)。
按一下「
新增主體」。在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。
在「Select a role」(請選擇角色) 清單中,選取「Compute Load Balancer Services User」(Compute Load Balancer 服務使用者)。
按一下 [儲存]。
gcloud
專案層級權限
請按照下列步驟,為專案中的所有後端服務授予權限。
您必須具備 compute.backendServices.setIamPolicy
和 resourcemanager.projects.setIamPolicy
權限,才能完成這個步驟。
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \ --member="user:LOAD_BALANCER_ADMIN" \ --role="roles/compute.loadBalancerServiceUser"
個別後端服務的資源層級權限
在後端服務層級,服務專案管理員可以使用下列任一指令授予 Compute 負載平衡器服務使用者角色 (roles/compute.loadBalancerServiceUser
)。
您必須具備 compute.backendServices.setIamPolicy
權限,才能完成這個步驟。
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \ --member="user:LOAD_BALANCER_ADMIN" \ --role="roles/compute.loadBalancerServiceUser" \ --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'
或
gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \ --member="user:LOAD_BALANCER_ADMIN" \ --role="roles/compute.loadBalancerServiceUser" \ --project=SERVICE_PROJECT_B_ID \ --region=us-west1
如要使用這些指令,請將 LOAD_BALANCER_ADMIN
替換為使用者的主要使用者,例如 test-user@gmail.com
。
您也可以使用條件並指定條件屬性,設定 IAM 權限,讓權限只套用至部分地區後端服務。
測試負載平衡器
設定負載平衡器可能需要幾分鐘的時間。負載平衡服務執行時,您可以將流量傳送至 服務專案 A 中的轉送規則,並觀察流量是否分散到 服務專案 B 中的不同 VM 執行個體。
主控台
在 Google Cloud 控制台中,前往 服務專案 A 的「Load balancing」(負載平衡) 頁面。
點選剛剛建立的負載平衡器。
記下負載平衡器的 IP 位址。這個 IP 位址在後續步驟中稱為
LB_IP_ADDRESS
。您可以將網路瀏覽器指向
https://LB_IP_ADDRESS
(或http://LB_IP_ADDRESS
),藉此測試負載平衡器。請將LB_IP_ADDRESS
替換為負載平衡器的 IP 位址。如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示頁面,並於其中列出提供該頁面的執行個體名稱 (例如
Page served from: lb-backend-example-xxxx
)。如果您的瀏覽器無法顯示這個頁面,請檢查本指南中的設定。
gcloud
請注意預留的 IP 位址:
gcloud compute addresses describe IP_ADDRESS_NAME \ --format="get(address)" \ --global --project=SERVICE_PROJECT_A_ID
您可以將網路瀏覽器指向 https://LB_IP_ADDRESS
(或 http://LB_IP_ADDRESS
),藉此測試負載平衡器。請將 LB_IP_ADDRESS
替換為負載平衡器的 IP 位址。
如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示含有後端執行個體最少資訊的頁面。如果您的瀏覽器無法顯示這個頁面,請參閱本指南中的設定說明。
後續步驟
- 使用雲端負載平衡器的機構政策限制,限制專案中共用虛擬私有雲功能 (例如跨專案服務參照) 的使用方式。
- 瞭解如何排解全域外部應用程式負載平衡器的問題。
- 清除負載平衡器設定。