本指南說明如何建立 Google Cloud HTTPS 負載平衡器,以便:
- 根據要求網址路徑選取後端服務。
- 將要求轉送至距離用戶端較近的後端 (多地區負載平衡)。
在開始之前,請先熟悉外部應用程式負載平衡器的概念。
如需簡易範例,請參閱「使用 Compute Engine 後端設定外部應用程式負載平衡器」一文。如需瞭解 HTTP 重寫和重新導向等進階路由功能,請參閱「外部應用程式負載平衡器的流量管理」。
總覽
本指南提供建立負載平衡器的操作說明。您可從中學習如何讓負載平衡器依據要求網址的路徑引導流量,並平衡多個地區間的流量。您在美國 (us-central1-b 區域) 和歐盟 (eu-west1-b 區域) 共建立八個 Compute Engine 執行個體。接下來建立負載平衡器,將流量轉送至上述執行個體。
完成操作說明的步驟後,負載平衡器的設定會如下所示:
- 流量若包含開頭為
/video
的網址路徑,會轉送至一個後端服務。 - 流量包含的網址路徑若不符合此模式,會轉送至其他後端服務。
在此教學文件中,需建立如下圖所示的設定:
圖表中的事件順序如下:
- 用戶端存取
https://www.example.com/video/concert
網址,傳送內容要求至轉送規則所定義的外部 IP 位址。該要求可以使用 IPv4 或 IPv6,兩種通訊協定皆有適用的轉送規則。 - 轉送規則將要求導向目標 HTTPS Proxy。
- 目標 Proxy 會使用網址對應中設定的規則,判斷哪個後端服務會收到要求。包含
/video
的請求 (例如https://www.example.com/video/concert
) 會傳送至video-backend-service
。其他任何網址路徑都會傳送到預設服務web-backend-service
。 - 負載平衡器依據要求的負載以及和用戶端的距離,判斷應由哪個後端服務的執行個體群組處理要求,並將要求導向該群組中的執行個體。
- 執行個體處理每個使用者的內容要求。
video
執行個體處理影片內容,而www
執行個體則處理所有其他內容。
在此範例中,負載平衡器會接受用戶端的 HTTPS 要求,並將這些要求變成 HTTP 轉送至後端。您也可以將負載平衡器設為接受 HTTP 要求,並且在將要求轉送成至後端時使用 HTTPS。
事前準備
這些操作說明需要專案才能進行。如果您還沒有專案,請現在建立一個。這些操作說明會引導您建立自訂模式的虛擬私有雲 (VPC) 網路。您也必須建立自訂的防火牆規則,才能讓流量連上執行個體。
如果您希望透過指令列操作,請先安裝 gcloud
指令列工具。如需該工具的概念與安裝資訊,請參閱 gcloud 概覽。
權限
為了完成本指南中的步驟,您必須具有在專案中建立 Compute Engine 執行個體的權限。您必須具有專案擁有者或編輯者角色,或者具有下列 Compute Engine 身分與存取權管理角色:
工作 | 必要角色 |
---|---|
建立執行個體 | Compute 執行個體管理員 |
新增與移除防火牆規則 | 安全性管理員 |
建立負載平衡器元件 | 網路管理員 |
建立專案 (選用) | 專案建立者 |
詳情請參閱下列指南:
設定
選用:建立新專案
建議具備 resourcemanager.projects.create
權限的使用者先建立新專案,再繼續進行本教學接下來的步驟。如此可以簡化指南最後清除所用資源的工作。
設定網路與子網路
在此範例中,請使用下列虛擬私人雲端網路、地區與子網路:
網路:網路為名為
lb-network
的自訂模式虛擬私人雲端網路。位於兩個不同地區的子網路:
us-subnet
使用10.1.10.0/24
做為其主要 IP 範圍,位於us-central1
地區。eu-subnet
使用10.1.11.0/24
做為其主要 IP 範圍,位於europe-west1
地區。
如要建立範例網路與子網路,請依照下列步驟操作:
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
輸入
lb-network
的「Name」。在「Subnets」(子網路) 區段中,建立第一個子網路:
- 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
us-subnet
- Region (區域):
us-central1
- IP address range (IP 位址範圍):
10.1.10.0/24
- 按一下 [完成]。
- Name (名稱):
請繼續在「Subnets」(子網路) 區段中點選「Add subnet」(新增子網路),並建立第二個子網路:
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
eu-subnet
- Region (區域):
europe-west1
- IP address range (IP 位址範圍):
10.1.11.0/24
- 按一下 [完成]。
- Name (名稱):
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
按一下 [建立]。
gcloud
建立自訂虛擬私人雲端網路:
gcloud compute networks create lb-network --subnet-mode=custom
建立
us-subnet
:gcloud compute networks subnets create us-subnet \ --network=lb-network \ --range=10.1.10.0/24 \ --region=us-central1
建立
eu-subnet
:gcloud compute networks subnets create eu-subnet \ --network=lb-network \ --range=10.1.11.0/24 \ --region=europe-west1
設定防火牆規則
預設拒絕輸入會封鎖後端執行個體收到的流量,包含來自負載平衡器與Google Cloud 健康狀態檢查系統的流量。您必須建立新的防火牆規則,才能覆寫預設規則,讓流量連上您的執行個體。
在此範例中,您會建立下列防火牆規則:
fw-allow-ssh
:輸入規則,適用於要進行負載平衡的執行個體,可在 TCP 通訊埠 22 上允許來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。本範例使用目標標記allow-ssh
來識別應套用此規則的後端 VM。fw-allow-health-check-and-proxy
:輸入規則,適用於要進行負載平衡的執行個體,可允許來自負載平衡器和Google Cloud 健康狀態檢查系統 (130.211.0.0/22
和35.191.0.0/16
) 的流量。這個範例會使用目標標記allow-health-check
來辨識應套用這項規則的後端 VM。
主控台
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
按一下「建立防火牆規則」,建立第一個防火牆規則:
- 輸入
fw-allow-ssh
的「Name」。 - 在「Network」下方選取
lb-network
。 - 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)。
- 在「Target tags」(目標標記) 欄位填入
allow-ssh
。 - 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)。
- 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為
0.0.0.0/0
。 - 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取 [Specified protocols and ports] (指定的通訊協定與通訊埠)。
- 勾選「TCP」TCP核取方塊,然後輸入
22
做為「Port number」(通訊埠編號)。 - 按一下 [建立]。
- 輸入
按一下「Create firewall rule」(建立防火牆規則),建立第二個防火牆規則:
- 輸入
fw-allow-health-check-and-proxy
的「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,443
。 - 按一下 [建立]。
- 輸入
gcloud
建立
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
建立
fw-allow-health-check-and-proxy
規則,以允許負載平衡器與 Google Cloud 健康檢查在 TCP 通訊埠80
和443
上與後端執行個體通訊:gcloud compute firewall-rules create fw-allow-health-check-and-proxy \ --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,tcp:443
建立執行個體
如要設定具有 Compute Engine 後端的負載平衡器,您的 VM 必須屬於某個執行個體群組。本指南說明如何使用執行 Apache 的 Linux VM 建立代管執行個體群組。
代管執行個體群組提供的 VM 會執行外部 HTTPS 負載平衡器的後端伺服器。為示範之用,後端會提供自己的主機名稱。
在此範例中,您要建立八個虛擬機器執行個體 (VM):四個用於處理影片內容,另外四個則用於處理其他所有內容。您可以使用開機指令碼安裝 Apache 網路伺服器軟體,提供不重複的首頁給每個執行個體。請注意,您可以在 VM 上使用任何網路伺服器;我們在本例中安裝 Apache,方便您操作。
主控台
建立執行個體範本。
前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。
前往「Instance templates」(執行個體範本) 頁面
- 點選「建立執行個體範本」。
- 在「Name」(名稱) 中輸入
video-us-template
。 - 確認「開機磁碟」已設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如
apt-get
。 - 點選「進階選項」。
- 按一下「網路」,然後設定下列欄位:
- 在「Network tags」(網路標記) 中輸入
allow-health-check
和allow-ssh
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
us-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)" mkdir -p /var/www/html/video echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html /var/www/html/video/index.html systemctl restart apache2
按一下 [建立]。
建立代管執行個體群組。在 Google Cloud 控制台中,前往「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
- 在「Name」(名稱) 中輸入
ig-video-us
。 - 在「Location」(位置) 底下,選取 [Single zone] (單一區域)。
- 在「區域」部分,選取偏好的區域。本範例使用
us-central1
。 - 在「Zone」(區域) 中,選取 us-central1-b。
- 在「Instance template」(執行個體範本) 下,選取
video-us-template
。 - 在「Autoscaling mode」(自動調度資源模式) 下方,選取
Off:do not autoscale
。 - 在「Maximum number of instances」(執行個體數量上限) 下方輸入
2
。 - 按一下 [建立]。
gcloud
建立執行個體範本。
gcloud compute instance-templates create video-us-template \ --region=us-central1 \ --network=lb-network \ --subnet=us-subnet \ --tags=allow-health-check,allow-ssh \ --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)" mkdir -p /var/www/html/video echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html /var/www/html/video/index.html systemctl restart apache2'
依據範本建立代管執行個體群組。
gcloud compute instance-groups managed create ig-video-us \ --template=video-us-template --size=2 --zone=us-central1-b
針對四個執行個體群組重複執行這項程序四次。請務必變更每個執行個體群組的名稱、範本名稱、地區和區域,如下所示:
ig-video-us
、video-us-template
、us-central1-b
(如範例所示)ig-video-eu
、video-eu-template
、europe-west1-b
ig-www-us
、www-us-template
、us-central1-b
ig-www-eu
、www-europe-template
、europe-west1-b
將命名通訊埠新增至執行個體群組
針對每個執行個體群組定義一個 HTTP 服務,並將通訊埠名稱對應至相關的通訊埠:設定完成後,負載平衡服務會將流量轉送至該具名連接埠。
主控台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下執行個體群組名稱 (例如
ig-video-us
),然後按一下「編輯群組」。按一下 [Specify port name mapping] (指定通訊埠名稱對應)。
按一下 [新增項目]。
在「Port name」(通訊埠名稱) 中輸入
http
。在「Port number」(通訊埠編號) 中輸入80
。按一下 [儲存]。
針對每個執行個體群組重複執行這個步驟。
gcloud
gcloud compute instance-groups unmanaged set-named-ports ig-video-us \ --named-ports http:80 \ --zone us-central1-b
gcloud compute instance-groups unmanaged set-named-ports ig-www-us \ --named-ports http:80 \ --zone us-central1-b
gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \ --named-ports http:80 \ --zone europe-west1-b
gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \ --named-ports http:80 \ --zone europe-west1-b
保留外部 IP 位址
現在已設定好執行個體並開始執行,請設定負載平衡所需的服務。在本節中,您要建立兩個通用靜態外部 IP 位址,供您的客戶使用,以連上您的負載平衡器。
主控台
在 Google Cloud 控制台中,前往「External IP addresses」(外部 IP 位址) 頁面。
按一下 [Reserve static address] (預約靜態位址) 以預留 IPv4 位址。
將
lb-ipv4-1
的「Name」 指派給lb-ipv4-1
。將「Network tier」(網路級別) 設為「Premium」(進階)。
將「IP version」(IP 版本) 設為「IPv4」。
將「Type」(類型) 設為「Global」(通用)。
按一下 [Reserve] (預約)。
再按一下 [Reserve static address] (預約靜態位址) 以預留 IPv6 位址。
將
lb-ipv6-1
的「Name」 指派給lb-ipv6-1
。將「Network tier」(網路級別) 設為「Premium」(進階)。
將「IP version」(IP 版本) 設為 IPv6。
確定「Type」(類型) 已設為「Global」(通用)。
在此範例中,負載平衡器會使用進階級網路。使用標準級網路的負載平衡器會改為使用地區 IP 位址。標準層級無法使用 IPv6 位址。
按一下「保留」。
gcloud
保留 IPv4 位址:
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
預留 IPv6 位址:
gcloud compute addresses create lb-ipv6-1 \ --ip-version=IPV6 \ --network-tier=PREMIUM \ --global
設定負載平衡資源
負載平衡器的功能涉及多種連線資源。在本節中,您將設定這些資源並為其建立連線。如下所示:
- 已命名的通訊埠,負載平衡器會使用這項服務來將流量導向您的執行個體群組。
- 健康狀態檢查,這項服務會輪詢您的執行個體,並查看其健康狀態是否良好。負載平衡器只會將流量傳送至健康狀態良好的執行個體。
- 後端服務,可以追蹤能力、工作階段相依性與健康狀態檢查。後端服務會依據能力與執行個體健康狀態,將要求導向後端 VM 或端點。
- 網址對應,可讓負載平衡器依據要求網址的主機與路徑,將要求導向特定的後端服務。
- SSL 憑證資源。SSL 憑證資源含有 SSL 憑證資訊,負載平衡器在 HTTPS 用戶端與其連結後,會使用此資訊來用來終止 TLS。您可以使用多個 SSL 憑證,也就是任何代管或自行管理的 SSL 憑證組合。您必須為您使用的每個憑證建立一個 SSL 憑證資源。
- 目標 HTTPS Proxy,負載平衡器會使用此 Proxy,建立起網址對應和 SSL 憑證與全域轉送規則之間的關聯。
兩個全域轉送規則,分別用於 IPv4 和 IPv6,可保存全域外部 IP 位址資源。全域轉送規則可將傳入要求轉送至目標 Proxy。
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
web-map
。 - 將視窗保持開啟,以便繼續操作。
設定 www
執行個體的後端服務與健康狀態檢查
負載平衡器需要兩個後端服務,以及供這兩個服務使用的一項健康狀態檢查。在此範例中,負載平衡器會終止用戶端的 HTTPS 要求,並使用 HTTP 與後端通訊。為達到此目標,請指定後端通訊協定與健康狀態檢查的 HTTP。
- 按一下「後端設定」。
- 在「Create or select a backend service」下拉式選單中,將滑鼠指標懸停在「Backend services」,然後選取「Create a backend service」。
- 將後端服務的「Name」設為
web-backend-service
。 - 請確認「後端類型」已設為「執行個體群組」。
- 在「Protocol」下拉式選單中,選取「HTTP」。
- 在「Named port」(已命名通訊埠) 欄位中輸入
http
。 - 在「Backends」(後端) 下方,將「Instance group」(執行個體群組) 設為
ig-www-us
。 - 對於負載平衡器與執行個體間的流量,請將「Port numbers」(通訊埠編號) 設為
80
。 - 保留其餘欄位的預設值。
- 按一下「New backend」(新增後端) 視窗底部的「Done」(完成)。
- 按一下「Add backend」(新增後端),並重複上述步驟,但選取執行個體群組
ig-www-eu
。 - 將視窗保持開啟,以便繼續操作。
設定 www
執行個體的健康狀態檢查。
- 在「Health check」(健康狀態檢查) 下方的「Backend configuration」(後端設定) 視窗中,選取 [Create a health check] (建立健康狀態檢查) 或 [Create another health check] (建立另一個健康狀態檢查)。
- 如要建立 HTTP 健康狀態檢查,請設定下列健康狀態檢查參數:
- 名稱:
http-basic-check-www
- 「Protocol」 設為
HTTP
- 「Port」(通訊埠):
80
- 名稱:
- 點選「儲存並繼續」。
- 按一下 [建立]。
設定 video
執行個體的後端服務與健康狀態檢查
- 請重複上述步驟,但將第二個後端服務命名為
video-backend-service
,並指派ig-video-us
和ig-video-eu
執行個體群組至此後端服務。 - 請按照相同的步驟建立健康狀態檢查,但請將健康狀態檢查命名為
http-basic-check-video
。健康檢查名稱不得重複。
設定主機與路徑規則
主機與路徑規則會設定負載平衡器的網址對應資源。
- 在畫面的左欄中,按一下 [Host and path rules] (主機與路徑規則)。
- 第一列的右欄中已填入
web-backend-service
,且「Hosts」與「Paths」 已按照預設規則Any unmatched (default)
填妥。 - 確認右欄中有包含
video-backend-service
的第二列。若不存在,請按一下「Add host and path rule」,然後從右欄的下拉式選單中選取video-backend-service
。請依照下列資訊填寫其他欄位:- 將「Hosts」設為
*
。 - 在「Paths」欄位中:
- 輸入
/video
,然後按下 Tab 鍵。 - 輸入
/video/*
,然後按下 Tab 鍵。
- 輸入
- 將「Hosts」設為
設定前端
您可在前端設定區段中,設定負載平衡器的多項資源,包含轉送規則與 SSL 憑證。此外,您也可以在此區段中,選取用戶端與負載平衡器間使用的通訊協定。
在此範例中,您在用戶端與負載平衡器間使用的是 HTTPS,因此您需要有一個或多個 SSL 憑證資源才能設定 Proxy。如要瞭解如何建立 SSL 憑證資源,請參閱「SSL 憑證」。建議使用 Google 代管的憑證。
- 在「Create global external Application Load Balancer」(建立全域外部應用程式負載平衡器)頁面的左側面板中,按一下「Frontend configuration」(前端設定)。
- 在「Name」(名稱) 欄位中輸入
https-content-rule
。 - 在「Protocol」欄位中選取
HTTPS
。 - 將視窗保持開啟,以便繼續操作。
設定 IPv4 轉送規則
- 將「IP version」(IP 版本) 設為
IPv4
。 - 在「IP address」(IP 位址) 中,選取您先前建立的
lb-ipv4-1
。 - 確認「Port」(通訊埠) 已設為
443
,以允許 HTTPS 流量。 - 按一下「Certificate」下拉式清單。
- 如果您已擁有自行管理的 SSL 憑證資源,且想要做為主要 SSL 憑證使用,請在下拉式選單中選取所需資源。
- 否則,請選取 [Create a new certificate] (建立新憑證)。
- 填入
www-ssl-cert
的「名稱」。 - 選取「Upload my certificate」(上傳我的憑證) 或「Create Google managed certificate」(建立 Google 代管憑證)。如要建立 Google 代管的憑證,您必須擁有網域。如果您沒有網域,可以上傳自己的憑證來進行測試。
- 如果您選取「Upload my certificate」(上傳我的憑證),請完成下列步驟。
- 在「Public key certificate」欄位中,執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取 PEM 格式的憑證檔案。
- 複製 PEM 格式憑證的內容,然後貼上。內容的開頭和結尾必須是
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
。
- 針對「Certificate chain」(憑證鏈結)欄位,請執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取 CA 的憑證檔案。這個檔案應包含中繼 CA 憑證和根 CA 憑證。
- 複製並貼上憑證鏈結的內容。鏈結中的每個憑證都必須採用 PEM 格式,開頭為
-----BEGIN CERTIFICATE-----
,結尾為-----END CERTIFICATE-----
。 Google Cloud 不會為您驗證憑證鏈結,您必須自行驗證。 - 如果您省略憑證鏈結,憑證應由公開信任的 CA 簽署,這樣客戶端就會自動信任。
- 針對「Private key certificate」欄位,執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取私密金鑰。私密金鑰必須採用 PEM 格式,且不得使用通關密語保護。
- 複製並貼上 PEM 格式私密金鑰的內容。RSA 私密金鑰開頭必須為
-----BEGIN RSA PRIVATE KEY-----
,結尾為-----END RSA PRIVATE KEY-----
。ECDSA 私密金鑰開頭須為-----BEGIN EC PRIVATE KEY-----
,結尾為-----END EC PRIVATE KEY-----
。
- 按一下 [建立]。
- 在「Public key certificate」欄位中,執行下列其中一項操作:
- 如果您選取「Create Google managed certificate」(建立 Google 代管憑證),請輸入「Domain」(網域)。
- 如要新增主要安全資料傳輸層 (SSL) 憑證資源以外的憑證資源,請按照下列指示操作:
- 按一下「新增憑證」。
- 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下 [Create a new certificate] (建立新憑證) 並按照上述指示操作。
- 在「QUIC 協商」下方,選取下列任一選項:
- 自動 (預設):允許 Google 控制 QUIC 協商的時機。目前,選取「自動」時,系統會停用 QUIC。選取這個選項,即表示您允許 Google 在日後自動為這個負載平衡器啟用 QUIC 協商和 HTTP/3。在
gcloud
和 API 中,這個選項稱為NONE
。 - 已啟用:允許負載平衡器與用戶端交涉 QUIC。
- 已停用:避免負載平衡器與用戶端協商 QUIC。
- 自動 (預設):允許 Google 控制 QUIC 協商的時機。目前,選取「自動」時,系統會停用 QUIC。選取這個選項,即表示您允許 Google 在日後自動為這個負載平衡器啟用 QUIC 協商和 HTTP/3。在
- 按一下 [完成]。
- 將視窗保持開啟,以便繼續操作。
設定 IPv6 轉送規則
- 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)。
- 輸入
https-content-ipv6-rule
的「Name」。 - 若您想要在用戶端與負載平衡器間使用 HTTPS,請在「Protocol」欄位中選取
HTTPS
。如果您想要在用戶端與負載平衡器間使用 HTTP,請選取HTTP
。 - 將「IP version」(IP 版本) 設為
IPv6
。 - 在「IP」中,選取您先前建立的
lb-ipv6-1
。 - 預設的通訊埠必須設定為
443
。 - 如果您已經有想要使用的 SSL 憑證資源,請在「Certificate」(憑證) 下拉式選單中選取所需資源。如果沒有,請選取「Create a new certificate」。
- 填入
www-ssl-cert
的「名稱」。 - 在正確的欄位中上傳您的公用金鑰憑證 (.crt 檔案)、憑證鏈結 (.csr 檔案) 與私密金鑰 (.key 檔案)。
- 按一下 [建立]。
- 填入
- 如要新增主要 SSL 憑證資源以外的憑證資源,請按照下列指示操作:
- 按一下「新增憑證」。
- 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下 [Create a new certificate] (建立新憑證) 並按照上述指示操作。
- 在「QUIC 協商」下方,選取下列任一選項:
- 自動 (預設):允許 Google 控制 QUIC 協商的時機。目前,選取「自動」時,系統會停用 QUIC。選取這個選項後,Google 日後會自動為這個負載平衡器啟用 QUIC 協商和 HTTP/3。在
gcloud
和 API 中,這個選項稱為NONE
。 - 已啟用:允許負載平衡器與用戶端進行 QUIC 交涉。
- 已停用:避免負載平衡器與用戶端協商 QUIC。
- 自動 (預設):允許 Google 控制 QUIC 協商的時機。目前,選取「自動」時,系統會停用 QUIC。選取這個選項後,Google 日後會自動為這個負載平衡器啟用 QUIC 協商和 HTTP/3。在
- 按一下 [完成]。
審查及完成
- 在「Create global external Application Load Balancer」(建立全域外部應用程式負載平衡器)頁面的左側面板中,按一下「Review and finalize」(檢查並完成)。
- 將您的設定與您打算建立的內容進行比較。
- 如果一切正確無誤,請按一下「建立」,即可建立外部應用程式負載平衡器。
gcloud
建立健康狀態檢查。如果您在負載平衡器與後端之間使用 HTTP,請使用
gcloud
指令。gcloud compute health-checks create http http-basic-check \ --port 80
為每個內容供應商建立後端服務。
將
--protocol
欄位設為HTTP
,因為我們要使用 HTTP 前往執行個體。請使用我們先前建立的http-basic-check
健康狀態檢查做為健康狀態檢查。-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
load-balancing-scheme=EXTERNAL_MANAGED
。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL
。
gcloud compute backend-services create video-backend-service \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
gcloud compute backend-services create web-backend-service \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol=HTTP \ --port-name=http \ --health-checks=http-basic-check \ --global
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
將您的執行個體群組新增至後端服務,以做為後端使用。後端會定義其包含的執行個體群組容量 (後端使用率上限或每秒查詢次數上限)。在這個範例中,請將
balancing-mode
設為UTILIZATION
、max-utilization
設為0.8
,以及capacity-scaler
設為1
。如果您想要耗盡後端服務,請將capacity-scaler
設為0
。新增
ig-video-us
執行個體群組:gcloud compute backend-services add-backend video-backend-service \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=ig-video-us \ --instance-group-zone=us-central1-b \ --global
新增
ig-video-eu
執行個體群組:gcloud compute backend-services add-backend video-backend-service \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=ig-video-eu \ --instance-group-zone=europe-west1-b \ --global
新增
ig-www-us
執行個體群組:gcloud compute backend-services add-backend web-backend-service \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=ig-www-us \ --instance-group-zone=us-central1-b \ --global
新增
ig-www-eu
執行個體群組:gcloud compute backend-services add-backend web-backend-service \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=ig-www-eu \ --instance-group-zone=europe-west1-b \ --global
建立網址對應,將收到的要求轉送至正確的後端服務。在此情況下,由
--path-rules
旗標定義的要求路徑對應,會根據您網站上各要求的網址路徑來分割流量。與--path-rules
清單項目不相符的流量會傳送至--default-service flag
中的項目。建立網址對應:
gcloud compute url-maps create web-map \ --default-service web-backend-service
新增路徑比對器至您的網址對應,並定義您的要求路徑對應:
gcloud compute url-maps add-path-matcher web-map \ --default-service web-backend-service \ --path-matcher-name pathmap \ --path-rules="/video=video-backend-service,/video/*=video-backend-service"
建立要在 HTTPS Proxy 中使用的 SSL 憑證資源。如要建立 Google 代管的憑證,您必須擁有網域。如果您沒有網域,可以使用自行簽署的 SSL 憑證進行測試。詳情請參閱「安全資料傳輸層 (SSL) 憑證類型」。
如要使用多組安全資料傳輸層 (SSL) 憑證,您必須為每組憑證建立安全資料傳輸層 (SSL) 憑證資源。
建立自行管理的 SSL 憑證資源:
gcloud compute ssl-certificates create www-ssl-cert \ --certificate [CRT_FILE_PATH] \ --private-key [KEY_FILE_PATH]
建立 Google 代管的 SSL 憑證資源:
gcloud compute ssl-certificates create www-ssl-cert \ --domains [DOMAIN]
建立目標 HTTPS Proxy 以轉送要求至您的網址對應。Proxy 是負載平衡器的一部分,為 HTTPS 負載平衡保留 SSL 憑證,因此您也可以在此步驟中載入您的憑證。
gcloud compute target-https-proxies create https-lb-proxy \ --url-map web-map --ssl-certificates www-ssl-cert
建立兩個全域轉送規則,以將傳入要求轉送至 Proxy,一個用於 IPv4,另一個則用於 IPv6。
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
load-balancing-scheme=EXTERNAL_MANAGED
。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL
。
gcloud compute forwarding-rules create https-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
gcloud compute forwarding-rules create https-content-ipv6-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv6-1 \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
建立全域轉送規則後,可能需等待數分鐘時間,才能讓您的設定傳播到全世界。
將網域連結至負載平衡器
建立負載平衡器後,請記下與負載平衡器相關聯的 IP 位址,例如 30.90.80.100
。如要將網域指向負載平衡器,請使用網域註冊服務建立 A
記錄。如果您在 SSL 憑證中新增了多個網域,則必須為每個網域新增 A
記錄,並全部指向負載平衡器的 IP 位址。舉例來說,如要為 www.example.com
和 example.com
建立 A
記錄,請使用以下方法:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用 Cloud DNS 做為 DNS 供應商,請參閱「新增、修改及刪除記錄」。
將流量傳送至執行個體
您已設定負載平衡器服務,現在可以開始傳送流量至轉送規則,並觀察流量是否分散到不同的執行個體。
控制台和網路瀏覽器
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
按一下
web-map
,即可展開您剛建立的負載平衡器。在「Backend」(後端) 區段中,確認執行個體健康狀態良好。「Healthy」(健康) 欄應已填妥,顯示四個執行個體中的執行個體健康狀態均良好。如看到其他資訊,請先嘗試重新載入頁面。Google Cloud 主控台可能需要一段時間才能顯示執行個體的健康狀態良好。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到您後端執行個體的防火牆設定與網路標記設定。
記下負載平衡器的 IPv4 和 IPv6 位址:
在 Google Cloud 控制台中,前往「External IP addresses」(外部 IP 位址) 頁面。
在「Name」下方,找出名為
lb-ipv4-1
和lb-ipv6-1
的地址,然後記錄「External Addresses」欄中的相關值。
如果您使用的是 Google 代管的憑證,請按照下列步驟操作:
建立下列 DNS 記錄:
- CAA 記錄。詳情請參閱「指定可簽署 Google 代管憑證的 CA」。
- A 記錄。詳情請參閱「建立 DNS A 記錄,指向負載平衡器的 IP 位址」。
- AAAA 記錄。這與 A 記錄類似,但適用於負載平衡器的 IPv6 位址。
確認憑證資源的狀態為「ACTIVE」(有效)。詳情請參閱 Google 代管的 SSL 憑證資源狀態。
如要使用網路瀏覽器測試負載平衡器,請前往下列任一網址:
https://IP_ADDRESS
,其中 IP_ADDRESS 是負載平衡器的 IPv4 位址。如果瀏覽器顯示憑證警告,您必須明確指示瀏覽器信任憑證。這項警告會出現,是因為憑證通常會使用網域而非 IP 位址進行設定。https://FQDN
,其中 FQDN 是您設定 DNS 以指向負載平衡器 IP 位址的完整網域名稱 (FQDN)。如果您使用的是自行管理的自行簽署 SSL 憑證,或是由自訂憑證授權單位 (CA) 簽署的自行管理 SSL 憑證,瀏覽器會顯示憑證警告,除非您明確設定瀏覽器信任憑證或其 CA。如要進一步瞭解自行管理的憑證,請參閱「建立私密金鑰和憑證」。
您的瀏覽器應該會顯示另一個頁面,其中內容會顯示提供該頁面的執行個體名稱,以及其所屬區域 (例如:
Page on ig-www-us-02 in us-central1-b
)。透過瀏覽器前往下列任一網址:
https://IP_ADDRESS/video
,其中 IP_ADDRESS 是負載平衡器的 IPv4 位址。https://FQDN/video
,其中 FQDN 是您設定 DNS 以指向負載平衡器 IP 位址的 FQDN。
您的瀏覽器應該會顯示另一個頁面,其中內容會顯示提供該頁面的 video 執行個體名稱,以及其所屬區域 (例如
Page on ig-video-us-02 in us-central1-b
)。
gcloud 和使用 curl
記下負載平衡器的 IPv4 和 IPv6 位址:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
gcloud compute addresses describe lb-ipv6-1 \ --format="get(address)" \ --global
如果您使用的是 Google 代管的憑證,請按照下列步驟操作:
建立下列 DNS 記錄:
- CAA 記錄。詳情請參閱「指定可簽署 Google 代管憑證的 CA」。
- A 記錄。詳情請參閱「建立 DNS A 記錄,指向負載平衡器的 IP 位址」。
- AAAA 記錄。這與 A 記錄類似,但適用於負載平衡器的 IPv6 位址。
確認憑證資源的狀態為「ACTIVE」(有效)。如需詳細資訊,請參閱 Google 代管 SSL 憑證資源狀態。
gcloud compute ssl-certificates list
使用
curl
指令來測試這些網址的回覆。請將 IP_ADDRESS 替換為負載平衡器的 IPv4 位址:curl -k https://IP_ADDRESS
curl -k https://IP_ADDRESS/video/
使用
curl
指令測試這些網址的回應。請將 IP_ADDRESS 替換為負載平衡器的 IPv6 位址。針對 IPv6,您必須在位址周圍放上方括號 ([]
),並使用-g
標記停用 glob (例如:curl -g -6 "https://[2001:DB8::]/"
)。curl -k -g -6 https://[IP_ADDRESS]
curl -k -g -6 https://[IP_ADDRESS]/video/
測試多區域功能
如要模擬不同地理區域內的使用者,您可以連結至自己位於其他地區的虛擬機器執行個體,再從該執行個體執行 curl
指令,您會看到要求前往該地區中距離最近的執行個體。
如果您連線至 ig-www-us-01
,執行 curl
指令會顯示要求會傳送至 us-central1
中的例項。您會看到類似以下的輸出內容:Page on ig-www-us-02 in us-central1-b
。
如果您連線至 ig-www-eu-01
,執行 curl
指令會顯示要求會傳送至 europe-west1
中的例項。您會看到類似以下的輸出內容:Page on ig-www-eu-02 in europe-west1-b
。
您可以用世界任一處的用戶端系統進行測試。若地區中的後端變得不健康,或達到能力上限,HTTPS 負載平衡器會自動傳送流量至下一個距離最近的地區。
其他設定選項
本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選填項目。您可以按任何順序執行這些工作。
啟用工作階段相依性
以下程序說明如何為每項後端服務設定不同類型的工作階段親和性:
web-backend-service
的用戶端 IP 位址工作階段相依性video-backend-service
的 HTTP Cookie 工作階段相依性
啟用用戶端 IP 相依性後,負載平衡器會根據用戶端 IP 位址建立的雜湊,將特定用戶端的要求導向至同一個後端 VM。
啟用產生的 Cookie 相依性後,負載平衡器會在第一個要求中發出 Cookie。對於每個含有相同 Cookie 的後續要求,負載平衡器會將要求導向相同的後端 VM 或端點。外部應用程式負載平衡器的 Cookie 名稱為 GCLB
。
控制台
如要為 web-backend-service
啟用用戶端 IP 工作階段相依性:
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
點選「後端」。
按一下「web-backend-service」 (您為本範例建立的其中一個後端服務的名稱),然後按一下「Edit」。
在「後端服務詳細資料」頁面中,按一下「進階設定」。
在「Session affinity」(工作階段相依性) 下方,從選單中選取「Client IP」(用戶端 IP)。
按一下 [儲存]。
如要為 video-backend-service
啟用產生的 Cookie 工作階段相依性,請按照下列步驟操作:
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
點選「後端」。
按一下「video-backend-service」 (您為本範例建立的其中一個後端服務的名稱),然後按一下「Edit」。
在「後端服務詳細資料」頁面中,按一下「進階設定」。
在「Session affinity」(工作階段相依性) 下方,從選單中選取「Generated cookie」。
按一下 [Update]。
gcloud
使用以下 gcloud
指令更新 web-backend-service
後端服務,並指定用戶端 IP 工作階段相依性:
gcloud compute backend-services update web-backend-service \ --session-affinity=CLIENT_IP \ --global
使用下列 gcloud
指令更新 video-backend-service
後端服務,並指定產生的 Cookie 工作階段相依性:
gcloud compute backend-services update video-backend-service \ --session-affinity=GENERATED_COOKIE \ --global
API
如要設定用戶端 IP 工作階段相依性,請向 backendServices/patch
方法提出 PATCH
要求。
PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/web-backend-service
{
"sessionAffinity": "CLIENT_IP"
}
如要設定產生的 Cookie 工作階段相依性,請對 backendServices/patch
方法發出 PATCH
要求。
PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/video-backend-service
{
"sessionAffinity": "GENERATED_COOKIE"
}
從後端 VM 移除外部 IP 位址
外部應用程式負載平衡器會使用其內部 IP 位址,與特殊的負載平衡器路徑與後端通訊。後端執行個體不需要外部 IP 位址也可以與負載平衡器通訊。您可以從後端服務移除外部 IP 位址以增加安全性。
若要從後端執行個體移除外部 IP 位址,請依照這些指示操作。
如果需要讓 SSH 連結至沒有外部 IP 位址的後端執行個體,請參閱連結沒有外部 IP 位址的執行個體。
正在清除所用資源
完成本教學課程後,您可以刪除所建立的資源,這樣日後就不需再為這些資源付費。如果是在資源專屬的專案中建立資源,可以刪除整個專案。否則,您可以個別刪除資源。
刪除專案
控制台
前往 Google Cloud 控制台的「Projects」(專案) 頁面。
在專案清單中選取要刪除的專案,然後按一下
「刪除」。在對話方塊中輸入
PROJECT_ID
,然後按一下「Shut down」(關閉) 即可刪除專案。
gcloud
執行下列指令,將 PROJECT_ID
替換為您的專案 ID:
gcloud projects delete PROJECT_ID
刪除個別資源
主控台
刪除負載平衡器
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
勾選
web-map
旁邊的核取方塊。點選頁面頂端的 [Delete] (刪除) 按鈕。
選取所有其他資源旁的核取方塊,包含後端服務、健康檢查狀態與 SSL 憑證。
按一下 [Delete load balancer and the selected resources] (刪除負載平衡器和選取的資源)。
刪除執行個體群組
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
勾選頂端位於「Name」(名稱) 旁的核取方塊,並選取所有執行個體群組。
按一下
「Delete」(刪除)。在確認視窗中,按一下「Delete」。
釋出外部 IP 位址
在 Google Cloud 控制台中,前往「External IP addresses」(外部 IP 位址) 頁面。
勾選
lb-ipv4-1
和lb-ipv6-1
旁的核取方塊。按一下「釋出靜態位址」。
在確認視窗中,按一下「Delete」。
刪除防火牆規則
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
勾選
fw-allow-health-check-and-proxy
和fw-allow-ssh
旁的核取方塊。按一下
「Delete」(刪除)。在確認視窗中,按一下「Delete」。
刪除 VM 執行個體
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
選取頂部位於「Name」(名稱) 旁的核取方塊,並選取所有執行個體群組。
按一下
「Delete」(刪除)。在確認視窗中,按一下「Delete」。
刪除虛擬私人雲端網路
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「
lb-network
」。在網路詳細資料頁面上,按一下 [Delete VPC network] (刪除 VPC 網路)。
在確認視窗中,按一下「Delete」。
gcloud
刪除負載平衡器
如要刪除負載平衡器,您需要刪除其個別元件。
刪除轉送規則:
gcloud compute forwarding-rules delete https-content-rule \ --global
gcloud compute forwarding-rules delete https-content-ipv6-rule \ --global
刪除通用外部 IP 位址:
gcloud compute addresses delete lb-ipv4-1 \ --global
gcloud compute addresses delete lb-ipv6-1 \ --global
刪除目標 Proxy:
gcloud compute target-https-proxies delete https-lb-proxy
刪除 SSL 憑證:
gcloud compute ssl-certificates delete www-ssl-cert
刪除網址對應:
gcloud compute url-maps delete web-map
刪除後端服務:
gcloud compute backend-services delete web-backend-service \ --global
gcloud compute backend-services delete video-backend-service \ --global
刪除健康狀態檢查:
gcloud compute health-checks delete http-basic-check
您已刪除所有負載平衡器資源。
刪除執行個體群組
重複以下指令,並使用以下的名稱和區域組合,刪除四個非代管的執行個體群組。請依照下列資訊,替換 INSTANCE_GROUP_NAME
和 ZONE
:
- 名稱:
ig-www-us
,區域:us-central1-b
- 名稱:
ig-video-us
,區域:us-central1-b
- 名稱:
ig-www-eu
,區域:europe-west1-b
- 名稱:
ig-video-eu
,區域:europe-west1-b
gcloud compute instance-groups unmanaged delete INSTANCE_GROUP_NAME \ --zone=ZONE
刪除 VM 執行個體
重複下列指令,並使用以下的名稱與區域組合,刪除八個 VM。請依照下列資訊,替換 VM_NAME
和 ZONE
:
- 名稱:
ig-www-us-01
,區域:us-central1-b
- 名稱:
ig-www-us-02
,區域:us-central1-b
- 名稱:
ig-video-us-01
,區域:us-central1-b
- 名稱:
ig-video-us-02
,區域:us-central1-b
- 名稱:
ig-www-eu-01
,區域:europe-west1-b
- 名稱:
ig-www-eu-02
,區域:europe-west1-b
- 名稱:
ig-video-eu-01
,區域:europe-west1-b
- 名稱:
ig-video-eu-02
,區域:europe-west1-b
gcloud compute instances delete VM_NAME \ --zone=ZONE
刪除防火牆規則
刪除下列兩個防火牆規則:
gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
gcloud compute firewall-rules delete fw-allow-ssh
刪除虛擬私人雲端網路
刪除
us-subnet
:gcloud compute networks subnets delete us-subnet \ --region=us-central1
刪除
eu-subnet
:gcloud compute networks subnets delete eu-subnet \ --region=europe-west1
刪除虛擬私有雲網路:
gcloud compute networks delete lb-network
您已刪除此專案中設定的所有資源。
後續步驟
- 使用記錄與監控功能
- 負載平衡疑難排解
- 如要啟用 IAP,請參閱「在外部應用程式負載平衡器上啟用 IAP」。