本指南說明如何建立 Google Cloud HTTPS 負載平衡器,並執行下列操作:
- 根據要求網址路徑選取後端服務。
- 將要求轉送至靠近用戶端的後端 (多區域負載平衡)。
開始之前,請先熟悉外部應用程式負載平衡器的概念。
如需簡化範例,請參閱使用 Compute Engine 後端設定外部應用程式負載平衡器。如需 HTTP 重新編寫和重新導向等進階路由功能,請參閱外部應用程式負載平衡器的流量管理功能。
總覽
本指南提供建立負載平衡器的操作說明。您可從中學習如何讓負載平衡器依據要求網址的路徑引導流量,並平衡多個地區間的流量。首先建立八個 Compute Engine 執行個體,四個位於美國地區 (us-central1-b 區域),四個位於歐盟地區 (eu-west1-b 區域)。接下來建立負載平衡器,將流量轉送至上述執行個體。
完成操作說明的步驟後,負載平衡器的設定會如下所示:
- 流量若包含開頭為
/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 IAM 角色:
| 工作 | 必要角色 |
|---|---|
| 建立執行個體 | 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」(防火牆政策) 頁面。
按一下「Create firewall rule」(建立防火牆規則),建立第一個防火牆規則:
- 輸入
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做為通訊埠編號。 - 點選「建立」。
- 輸入
按一下「建立防火牆規則」,建立第二個防火牆規則:
- 輸入
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
建立執行個體
您的 VM 必須屬於某個執行個體群組,才能設定具有 Compute Engine 後端的負載平衡器。本指南說明如何建立代管執行個體群組,並使用執行 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-big-www-us、www-us-template、us-central1-big-www-eu、www-europe-template、europe-west1-b
將具名通訊埠新增至執行個體群組
針對每個執行個體群組定義一個 HTTP 服務,並將通訊埠名稱對應至相關的通訊埠:設定完成後,負載平衡服務會將流量轉送至該具名連接埠。
主控台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下執行個體群組的名稱 (例如
ig-video-us),然後按一下「編輯群組」。按一下 [Specify port name mapping] (指定通訊埠名稱對應)。
按一下 [新增項目]。
輸入
http做為通訊埠名稱。在通訊埠編號欄位中輸入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」(名稱)。將「Network tier」(網路級別) 設為「Premium」(進階)。
將「IP version」(IP 版本) 設為「IPv4」。
將「Type」(類型) 設為「Global」(通用)。
按一下 [Reserve] (預約)。
再按一下 [Reserve static address] (預約靜態位址) 以預留 IPv6 位址。
指派
lb-ipv6-1的「Name」(名稱)。將「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」(下一步)。
- 在「公開或內部」部分選取「公開 (外部)」,接著點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
web-map。 - 將視窗保持開啟,以便繼續操作。
設定 www 執行個體的後端服務與健康狀態檢查
負載平衡器需要兩個後端服務,以及供這兩個服務使用的一項健康狀態檢查。在此範例中,負載平衡器會終止用戶端的 HTTPS 要求,並使用 HTTP 與後端通訊。為達到此目標,請指定後端通訊協定與健康狀態檢查的 HTTP。
- 按一下「後端設定」。
- 在「建立或選取後端服務」下拉式選單中,將滑鼠指標懸停在「後端服務」,然後選取「建立後端服務」。
- 將後端服務的「Name」(名稱) 設為
web-backend-service。 - 請確定「Backend type」(後端類型) 已設為「Instance group」(執行個體群組)。
- 在「通訊協定」下拉式選單中,選取「HTTP」。
- 在「Named port」(已命名通訊埠) 欄位輸入
http。 - 設定
www執行個體的健康狀態檢查:- 在「健康狀態檢查」清單中,按一下「建立健康狀態檢查」。
- 在「Name」(名稱) 欄位中輸入
http-basic-check-www。 - 在「Protocol」(通訊協定) 清單中,選取「HTTP」。
- 在「Port」(通訊埠) 欄位中輸入
80。 - 點選「建立」。
- 在「Backends」(後端) 下方,將「Instance group」(執行個體群組) 設為
ig-www-us。 - 對於負載平衡器與執行個體間的流量,請將「Port numbers」(通訊埠編號) 設為
80。 - 保留其餘欄位的預設值。
- 按一下「New backend」(新增後端) 視窗底部的「Done」(完成)。
- 按一下「Add backend」(新增後端),並重複上述步驟,但選取執行個體群組
ig-www-eu。 - 將視窗保持開啟,以便繼續操作。
設定 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」(主機) 設為
*。 - 在「路徑」欄位中:
- 輸入
/video,然後按下 Tab 鍵。 - 輸入
/video/*,然後按下 Tab 鍵。
- 輸入
- 將「Hosts」(主機) 設為
設定前端
您可在前端設定區段中,設定負載平衡器的多項資源,包含轉送規則與 SSL 憑證。此外,您也可以在此區段中,選取用戶端與負載平衡器間使用的通訊協定。
在本範例中,您在用戶端與負載平衡器間使用的是 HTTPS,因此您需要有一個或多個 SSL 憑證資源才能設定 Proxy。如要瞭解如何建立 SSL 憑證資源,請參閱「SSL 憑證」。建議使用 Google 代管的憑證。
- 在「建立全域外部應用程式負載平衡器」頁面的左側面板中,按一下「前端設定」。
- 在「Name」(名稱) 欄位中輸入
https-content-rule。 - 在「Protocol」(通訊協定) 欄位中,選取「
HTTPS」。 - 將視窗保持開啟,以便繼續操作。
設定 IPv4 轉送規則
- 將「IP version」(IP 版本) 設為
IPv4。 - 在「IP address」(IP 位址) 中,選取您先前建立的「
lb-ipv4-1」。 - 確認「Port」(通訊埠) 已設為
443,以允許 HTTPS 流量。 - 按一下「憑證」下拉式清單。
- 如果您已擁有自行管理的 SSL 憑證資源,且想要做為主要 SSL 憑證使用,請在下拉式選單中選取所需資源。
- 否則,請選取 [Create a new certificate] (建立新憑證)。
- 填寫
www-ssl-cert的「名稱」。 - 選取「上傳我的憑證」或「建立 Google 代管憑證」。如要建立 Google 代管的憑證,您必須擁有網域。如果您沒有網域,可以上傳自己的憑證以供測試。
- 如果您選取「上傳我的憑證」,請完成下列步驟。
- 在「公開金鑰憑證」欄位中,執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取 PEM 格式的憑證檔案。
- 複製並貼上 PEM 格式憑證的內容。內容開頭必須是
-----BEGIN CERTIFICATE-----,結尾必須是-----END CERTIFICATE-----。
- 針對「Certificate chain」(憑證鏈結) 欄位,請執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取 CA 的憑證檔案。 這個檔案應包含中繼 CA 憑證和根 CA 憑證。
- 複製並貼上憑證鏈的內容。鏈結中的每個憑證都必須採用 PEM 格式,開頭為
-----BEGIN CERTIFICATE-----,結尾為-----END CERTIFICATE-----。 Google Cloud 不會為您驗證憑證鏈結,驗證責任由您承擔。 - 如果省略憑證鏈結,您的憑證應由公開信任的 CA 簽署,用戶端會自動信任該 CA。
- 在「私密金鑰憑證」欄位中,執行下列其中一項操作:
- 按一下「上傳」按鈕,然後選取私密金鑰。私密金鑰必須採用 PEM 格式,且不得受通關密語保護。
- 複製並貼上 PEM 格式的私密金鑰內容。RSA 私密金鑰開頭須為
-----BEGIN RSA PRIVATE KEY-----,結尾須為-----END RSA PRIVATE KEY-----。ECDSA 私密金鑰開頭必須為-----BEGIN EC PRIVATE KEY-----,結尾必須為-----END EC PRIVATE KEY-----。
- 點選「建立」。
- 在「公開金鑰憑證」欄位中,執行下列其中一項操作:
- 如果您選取「建立 Google 代管憑證」,請輸入網域。
- 如要新增主要 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」IP中,選取您先前建立的「
lb-ipv6-1」。 - 預設的通訊埠必須設定為
443。 - 如果您已經有想要使用的 SSL 憑證資源,請在「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。在
- 按一下 [完成]。
檢查並完成
- 在「建立全域外部應用程式負載平衡器」頁面的左側面板中,按一下「檢查並完成」。
- 將您的設定與您打算建立的內容進行比較。
- 若一切正確,請按一下「建立」,即可建立外部應用程式負載平衡器。
gcloud
建立健康狀態檢查。 如果您在負載平衡器與後端之間使用 HTTP,請使用
gcloud指令。gcloud compute health-checks create http http-basic-check \ --port 80為每個內容供應商建立一項後端服務。
將「
--protocol」欄位設定為HTTP,因為我們要使用 HTTP 前往執行個體。請使用我們先前建立的http-basic-check健康狀態檢查做為健康狀態檢查。-
如果是全域外部應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL_MANAGED的 gcloud CLI 指令。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
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 \ --globalgcloud 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-
如果是全域外部應用程式負載平衡器,請使用
將您的執行個體群組新增至後端服務,以做為後端使用。後端內執行個體群組的能力 (後端使用率上限或每秒查詢次數上限),由後端決定。在本範例中,請將
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。
-
如果是全域外部應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL_MANAGED的 gcloud CLI 指令。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
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=443gcloud 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-
如果是全域外部應用程式負載平衡器,請使用
建立全域轉送規則後,可能需等待數分鐘時間,才能讓您的設定傳播到全世界。
將網域連結至負載平衡器
建立負載平衡器後,請記下與負載平衡器相關聯的 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 供應商,請參閱「新增、修改及刪除記錄」。
將流量傳送至執行個體
您已設定好負載平衡服務,現在可以開始傳送流量至轉送規則,您會看到流量發布至不同的執行個體。
Console 和網路瀏覽器
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
按一下
web-map,展開您剛建立的負載平衡器。在「Backend」(後端) 區段,確認執行個體健康狀態良好。「Healthy」(健康) 欄應已填妥,顯示四個執行個體中的執行個體健康狀態均良好。如看到其他資訊,請先嘗試重新載入頁面。Google Cloud 控制台可能需要一段時間才能顯示執行個體的健康狀態良好。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到您後端執行個體的防火牆設定與網路標記設定。
記錄負載平衡器的 IPv4 和 IPv6 位址:
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
在「名稱」下方,找出名為
lb-ipv4-1和lb-ipv6-1的地址,然後記錄「外部地址」欄中的相關值。
如果您使用的是 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 是完整網域名稱 (FQDN),您已設定 DNS 將其指向負載平衡器的 IP 位址。如果您使用自行管理、自行簽署的 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」 (您為本範例建立的其中一個後端服務名稱),然後按一下「編輯」。
在「後端服務詳細資料」頁面中,按一下「進階設定」。
在「工作階段相依性」下方,從選單中選取「用戶端 IP」。
按一下 [儲存]。
如要為 video-backend-service 啟用產生的 Cookie 工作階段相依性,請按照下列步驟操作:
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
點選「後端」。
按一下「video-backend-service」 (您為本範例建立的其中一個後端服務名稱),然後按一下「編輯」。
在「後端服務詳細資料」頁面中,按一下「進階設定」。
在「Session affinity」(工作階段相依性) 下方,從選單中選取「Generated cookie」(產生的 Cookie)。
按一下「Update」。
gcloud
使用下列 gcloud 指令更新後端服務,並指定用戶端 IP 工作階段相依性:web-backend-service
gcloud compute backend-services update web-backend-service \
--session-affinity=CLIENT_IP \
--global
使用下列 gcloud 指令更新後端服務,並指定產生的 Cookie 工作階段相依性:video-backend-service
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」(專案) 頁面。
在專案清單中選取要刪除的專案,然後按一下「刪除」。
在對話方塊中輸入專案 ID,然後按一下「Shut down」(關閉) 刪除專案。
PROJECT_ID
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」(刪除)。
在確認視窗中,按一下「刪除」。
釋出外部 IP 位址
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
勾選「
lb-ipv4-1」和「lb-ipv6-1」旁的核取方塊。按一下「Release static addresses」(釋放靜態位址)。
在確認視窗中,按一下「刪除」。
刪除防火牆規則
在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。
勾選「
fw-allow-health-check-and-proxy」和「fw-allow-ssh」旁的核取方塊。按一下 「Delete」(刪除)。
在確認視窗中,按一下「刪除」。
刪除 VM 執行個體
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
選取頂部位於「Name」(名稱) 旁的核取方塊,並選取所有執行個體群組。
按一下 「Delete」(刪除)。
在確認視窗中,按一下「刪除」。
刪除虛擬私人雲端網路
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路) 頁面。
按一下「
lb-network」。在網路詳細資料頁面上,按一下 [Delete VPC network] (刪除 VPC 網路)。
在確認視窗中,按一下「刪除」。
gcloud
刪除負載平衡器
如要刪除負載平衡器,您需要刪除其個別元件。
刪除轉送規則:
gcloud compute forwarding-rules delete https-content-rule \ --globalgcloud compute forwarding-rules delete https-content-ipv6-rule \ --global刪除通用外部 IP 位址:
gcloud compute addresses delete lb-ipv4-1 \ --globalgcloud 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 \ --globalgcloud 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」。