本文提供兩個範例設定,說明如何在共用 VPC 環境中,設定具備 VM 執行個體群組後端的全域外部應用程式負載平衡器:
- 在第一個範例中,負載平衡器的前端和後端元件是在一個服務專案中建立。
- 在第二個範例中,負載平衡器的前端元件和網址對應是在一個服務專案中建立,而負載平衡器的後端服務和後端則是在另一個服務專案中建立。這種部署方式是指一個專案中的網址對應參照另一個專案中的後端服務,稱為「跨專案服務參照」。
這兩個範例都需要相同的初始設定,才能授予權限、在主專案中設定網路和子網路,以及設定共用虛擬私有雲,然後才能開始建立負載平衡器。
全域外部應用程式負載平衡器支援的共用 VPC 設定不只這些。如需其他有效的共用虛擬私有雲架構,請參閱「共用虛擬私有雲架構」。
如不想使用共用虛擬私有雲網路,請參閱「設定具有 VM 執行個體群組後端的全域外部應用程式負載平衡器」。
事前準備
- 閱讀共用虛擬私有雲總覽。
- 請參閱外部應用程式負載平衡器總覽,包括共用 VPC 架構一節。
必要權限
如要在共用虛擬私有雲網路中設定負載平衡器,管理員必須先進行一些初始設定和佈建作業。完成初始設定後,服務專案擁有者可以執行下列任一操作:
- 在服務專案中部署負載平衡器的所有元件和後端。
- 在服務專案中部署負載平衡器的後端元件 (後端服務和後端),這些元件可由其他服務或主機專案中的網址對應參照。
本節將摘要說明按照本指南操作,在共用虛擬私有雲網路上設定負載平衡器時所需的權限。
設定共用虛擬私有雲
如要執行下列工作,您必須具備下列角色:
- 執行一次性管理工作,例如設定共用虛擬私有雲和啟用主專案。
- 執行管理工作,每次要啟用新的服務專案時,都必須重複這些工作。包括附加服務專案、佈建及設定網路資源,以及授予服務專案管理員存取權。
這些工作必須在共用虛擬私有雲主專案中執行。建議您將共用 VPC 管理員設為共用 VPC 主專案的擁有者。系統會自動授予網路管理員和安全管理員角色。
工作 | 必要角色 |
---|---|
設定共用虛擬私有雲、啟用主專案,並授予服務專案管理員存取權 | 共用虛擬私有雲管理員 |
在共用 VPC 託管專案中建立子網路,並授予服務專案管理員存取權 | 網路管理員 |
新增與移除防火牆規則 | 安全管理員 |
子網路佈建完成後,主專案擁有者必須在主專案中,將「網路使用者」角色授予需要使用這些資源的任何人 (通常是服務專案管理員、開發人員或服務帳戶)。
工作 | 必要角色 |
---|---|
使用屬於主專案的虛擬私有雲網路和子網路 | 網路使用者 |
您可以在專案層級或個別子網路授予這個角色。建議您在個別子網路上授予角色。在專案中授予角色,即可存取主專案虛擬私有雲網路中現有和日後的所有子網路。
部署負載平衡器和後端
服務專案管理員必須在服務專案中具備下列角色,才能建立負載平衡資源和後端。服務專案擁有者或編輯者會自動取得這些權限。
工作 | 必要角色 |
---|---|
建立負載平衡器元件 | 網路管理員 |
建立執行個體 | 執行個體管理員 |
建立及修改 SSL 憑證 | 安全管理員 |
參照跨專案後端服務
如果負載平衡器需要參照其他服務專案的後端服務 (也稱為跨專案服務參照),負載平衡器管理員必須在後端服務建立所在的服務專案中,具備下列角色。
工作 | 必要角色 |
---|---|
具備在其他專案中使用服務的權限 | 負載平衡器服務使用者 |
您可以在專案層級或個別後端服務授予這個角色。如需授予這項角色的操作說明,請參閱本頁的跨專案服務參照範例。
如要進一步瞭解 IAM,請參閱下列指南:
必要條件
在本節中,您需要執行下列步驟:
您不必每次建立新的負載平衡器時,都執行本節中的步驟。不過,您必須先確認自己有權存取本文所述資源,才能建立負載平衡器。
在主專案中設定網路和子網路
您需要共用虛擬私有雲網路,以及負載平衡器後端的子網路。這個範例使用以下網路、地區和子網路:
電視網:網路名稱為「
lb-network
」。負載平衡器後端的子網路。
us-west1
地區中名為lb-backend-subnet
的子網路使用10.1.2.0/24
做為其主要 IP 範圍。
設定負載平衡器後端的子網路
您不必每次建立新的負載平衡器時都執行這個步驟。您只需要確保服務專案有權存取共用虛擬私有雲網路中的子網路即可。本節中的所有步驟都必須在主專案中執行。
主控台
- 在 Google Cloud 控制台中,前往「VPC networks」(VPC 網路) 頁面。
- 按一下「建立虛擬私有雲網路」。
- 在「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
. 輸入規則,適用於要進行負載平衡的執行個體,可允許來自 Google Cloud健康狀態檢查系統 (位於130.211.0.0/22
和35.191.0.0/16
) 的所有 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
- 通訊協定和通訊埠:
- 選擇「指定的通訊協定與通訊埠」。
- 勾選「TCP」TCP,然後輸入
80
做為通訊埠編號。
最佳做法是將這項規則限制為僅適用於與健康狀態檢查所用通訊協定和通訊埠相符的項目。如果您將通訊協定和通訊埠指定為
tcp:80
, Google Cloud 可以使用 HTTP 透過通訊埠80
與您的 VM 聯絡,但無法使用 HTTPS 透過通訊埠443
聯絡這些 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 政策,以及指定主機和服務專案。
請先設定共用虛擬私有雲,並啟用主專案和服務專案,再繼續進行後續步驟。
完成本節定義的必要步驟後,您可以選擇下列任一設定:
在一個服務專案中設定負載平衡器
在主專案中設定虛擬私有雲網路並設定共用虛擬私有雲後,您就可以將注意力轉移到服務專案,在其中建立所有負載平衡元件 (後端服務、網址對應、目標 Proxy 和轉送規則) 和後端。
本節假設您已在主專案中執行上一節所述的必要步驟。在本節中,負載平衡器的前端和後端元件,以及後端,都會在一個服務專案中建立。
下圖顯示一個服務專案中的全域外部應用程式負載平衡器元件,該專案已附加至共用虛擬私有雲網路中的主專案。
這些步驟應由服務專案管理員 (或在服務專案中運作的開發人員) 執行,不需要主專案管理員參與。本節中的步驟與設定全域外部應用程式負載平衡器的標準步驟類似。
本頁的範例會為全域外部應用程式負載平衡器的轉送規則明確設定保留的 IP 位址,而不允許分配暫時的 IP 位址。建議您最好為轉送規則保留 IP 位址。
建立代管執行個體群組後端
建立代管執行個體群組之前,您必須先建立執行個體範本。執行個體範本是一種資源,可用來建立虛擬機器 (VM) 執行個體。從用戶端到執行個體群組中 VM 的流量會經過負載平衡。代管執行個體群組提供的 VM 會執行外部應用程式負載平衡器的後端伺服器。在本範例中,後端會提供自己的主機名稱。
主控台
建立執行個體範本
在 Google Cloud 控制台中,前往 Compute Engine 的「Instance templates」(執行個體範本) 頁面。
點選「建立執行個體範本」。
在「Name」(名稱) 中輸入
backend-template
。在「Boot disk」(開機磁碟) 專區中,確認開機磁碟已設為 Debian 映像檔,例如 Debian GNU/Linux 12 (bookworm)。如有需要,請按一下「變更」變更圖片。
展開「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」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「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 流量。如要完成前端設定,請按一下「Done」(完成)。
請先確認「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 憑證。
如要完成前端設定,請按一下「Done」(完成)。
繼續操作之前,請先驗證「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
。如要新增後端,請按一下「完成」。
如要新增健康狀態檢查,請在「健康狀態檢查」清單中選取
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 的健康狀態良好。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到後端 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 網路或共用 VPC 網路。
在本範例中,服務專案中的後端 VM 是主專案中建立的共用虛擬私有雲網路的一部分。不過,您也可以在服務專案中設定獨立虛擬私有雲網路 (即未共用的虛擬私有雲網路),以及必要的防火牆規則。然後,您可以建立屬於這個獨立 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
。在「網路介面」中,選取「與我共用的網路 (來源主專案:
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_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
。如要新增後端,請按一下「完成」。
如要新增健康狀態檢查,請在「健康狀態檢查」清單中選取
lb-health-check
,也就是您先前建立的健康狀態檢查。選用:在「新增權限」部分,輸入其他專案的 IAM 主體 (通常是電子郵件地址),這些主體具有 Compute Load Balancer Admin 角色 (
roles/compute.loadBalancerAdmin
),因此可以使用這個後端服務,為自己專案中的負載平衡器提供服務。如果沒有這項權限,您就無法使用跨專案服務參照。如果您沒有權限為這項專案中的後端服務設定存取控制政策,還是可以立即建立後端服務,授權使用者稍後再執行這個步驟,詳情請參閱「授予 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」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「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 憑證使用,請在選單中選取所需資源。
- 否則,請選取「建立新憑證」。
- 輸入 SSL 憑證的名稱。
- 將 PEM 格式的檔案上傳至相對應的欄位:
- 公用金鑰憑證
- 憑證鏈結
- 私密金鑰
- 點選「建立」。
- 如要新增主要 SSL 憑證資源以外的憑證資源,請按照下列指示操作:
- 按一下「新增憑證」。
- 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下「Create a new certificate」(建立新憑證) 並按照先前的指示操作。
- 按一下 [完成]。
設定後端
- 按一下「後端設定」。
- 按一下「跨專案後端服務」。
- 在「Project ID」部分,輸入服務專案 B 的專案 ID。
- 在「選取後端服務」清單中,選取要使用的服務專案 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 Admin
如要讓負載平衡器參照其他服務專案中的後端服務,負載平衡器管理員必須具備 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 控制台的「後端」頁面。
從後端清單中,選取要授予存取權的後端服務,然後按一下「權限」
。按一下「新增主體」
。在「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,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示頁面,其中包含後端執行個體的最低資訊。如果瀏覽器無法顯示這個頁面,請檢查本指南中的設定。
後續步驟
- 使用 Cloud Load Balancing 的組織政策限制,限制專案中如何使用共用虛擬私有雲功能,例如跨專案服務參照。
- 瞭解如何排解全域外部應用程式負載平衡器的相關問題。
- 清除負載平衡設定。