本文件說明如何針對在 Compute Engine VM 上執行的服務,設定區域性外部應用程式負載平衡器。
由於區域性外部應用程式負載平衡器可讓您在特定區域建立負載平衡器,因此通常會用於有法規遵循要求的工作負載。區域性外部應用程式負載平衡器的另一個常見用途,是需要存取標準網路級別出口的工作負載,因為區域性外部應用程式負載平衡器支援進階和標準網路服務級別。
在您依循這份指南操作之前,請先熟悉以下概念:
權限
如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色:
工作 | 必要角色 |
---|---|
建立網路、子網路和負載平衡器元件 | 網路管理員 |
新增與移除防火牆規則 | 安全性管理員 |
建立執行個體 | 執行個體管理員 |
詳情請參閱下列指南:
設定總覽
您可以按照以下整體設定流程所述來設定區域性外部應用程式負載平衡器。以下各個步驟編號對應至圖表中所標示的編號。
如圖所示,這個範例在 us-west1
地區的虛擬私有雲端網路中,建立了一個區域性外部應用程式負載平衡器,其中具有一個後端服務和兩個後端執行個體群組。
下圖顯示以下內容:
具有兩個子網路的虛擬私人雲端網路:
一個子網路用於後端 (執行個體群組)。其主要 IP 位址範圍為
10.1.2.0/24
。一個子網路是
us-west1
地區中的僅限 Proxy 子網路。您必須在使用區域性外部應用程式負載平衡器的虛擬私有雲網路的每個地區中,建立一個僅限 Proxy 的子網路。該地區的僅限 Proxy 子網路會在該地區的所有區域負載平衡器之間共用。系統會從僅限 Proxy 的子網路中分配從負載平衡器傳送至服務後端的封包來源位址。在這個範例中,該地區的僅限 Proxy 子網路的主要 IP 位址範圍為10.129.0.0/23
,這是建議的子網路大小。詳情請參閱「僅限 Proxy 的子網路」。
防火牆規則,允許僅限 Proxy 的子網路流量在網路中流動。也就是說,您需要新增一條規則,允許來自
10.129.0.0/23
(這個範例中僅限 Proxy 的子網路範圍) 的 TCP 通訊埠80
、443
和8080
流量。另一個用於健康狀態檢查探針的防火牆規則。後端執行個體。
執行個體群組:
- Compute Engine VM 部署的代管或非代管執行個體群組
- GKE 部署的 NEG
在每個區域中,您可以根據您的部署需求擁有不同類型的後端群組組合。
回報後端完備性的地區健康狀態檢查。
監控後端使用情況和健康狀態的地區後端服務。
地區網址對應,這項服務會剖析要求的網址,並根據要求網址的主機和路徑,將要求轉送至特定的後端服務。
地區目標 HTTP 或 HTTPS Proxy,這項服務會接收來自使用者的要求,並將其轉送至網址對應。如為 HTTPS,請設定地區安全資料傳輸層 (SSL) 憑證資源。如果您設定了 HTTPS 負載平衡,目標 Proxy 可以使用 SSL 憑證或憑證管理工具憑證來解密 SSL 流量。目標 Proxy 可使用 HTTP 或 HTTPS 將流量轉送至您的執行個體。
具有負載平衡器外部 IP 位址的轉送規則,可將每個傳入要求轉送至目標 Proxy。
如「預留負載平衡器的 IP 位址」一文所述,您可以使用
gcloud compute addresses create
指令預留與轉送規則相關聯的外部 IP 位址。
設定網路和子網路
您需要具有兩個子網路的虛擬私有雲網路:一個用於負載平衡器的後端,另一個用於負載平衡器的 Proxy。區域性外部應用程式負載平衡器具有地區性。如果流量來源位於與負載平衡器相同地區的子網路中,虛擬私人雲端網路內的流量會轉送至負載平衡器。
這個範例會使用以下虛擬私人雲端網路、地區和子網路:
網路:網路是名為
lb-network
的自訂模式虛擬私人雲端網路。後端子網路。
us-west1
地區中名為backend-subnet
的子網路使用10.1.2.0/24
做為其主要 IP 範圍。Proxy 專用子網路。
us-west1
地區中名為proxy-only-subnet
的子網路使用10.129.0.0/23
做為其主要 IP 範圍。
為後端設定網路和子網路
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network
。在「Subnets」(子網路) 區段中:
- 將「Subnet creation mode」(子網路建立模式) 設為「Custom」(自訂)。
- 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
backend-subnet
- Region (區域):
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
使用
gcloud compute networks subnets create
指令,在us-west1
地區的lb-network
網路中建立子網路:gcloud compute networks subnets create backend-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
Terraform
如要建立虛擬私人雲端網路,請使用 google_compute_network
資源。
如要在 lb-network
網路中建立 VPC 子網路,請使用 google_compute_subnetwork
資源。
API
向
networks.insert
方法提出POST
要求,並將 PROJECT_ID 替換為您的專案 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
向
subnetworks.insert
方法提出POST
要求,並將 PROJECT_ID 替換為您的專案 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "backend-subnet", "network": "projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "region": "projects/PROJECT_ID/regions/us-west1", }
設定僅限 Proxy 的子網路
僅限 Proxy 子網路會提供一組 IP 位址,供 Google 代表您執行 Envoy Proxy。Proxy 會終止來自用戶端的連線,並建立連至後端的新連線。
這個僅限 Proxy 的子網路會由 lb-network
虛擬私有雲網路中同個地區的所有 Envoy 型區域負載平衡器使用。每個網路和每個地區只能有一個活動的僅限 Proxy 子網路。
主控台
如果您使用的是 Google Cloud 控制台,也可以等之後再於「負載平衡」頁面中建立僅限 Proxy 的子網路。
如果您現在想建立僅限 Proxy 的子網路,請按照下列步驟操作:
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下虛擬私有雲網路名稱:
lb-network
。按一下 [新增子網路]。
在「Name」(名稱) 中輸入
proxy-only-subnet
。在「Region」(區域) 中選取
us-west1
。將「用途」設為「區域受管理 Proxy」。
在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。按一下「新增」。
gcloud
使用 gcloud compute networks subnets
create
指令,建立僅限 Proxy 的子網路。
gcloud compute networks subnets create proxy-only-subnet \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-west1 \ --network=lb-network \ --range=10.129.0.0/23
Terraform
如要在 lb-network
網路中建立僅限 Proxy 的 VPC 子網路,請使用 google_compute_subnetwork
資源。
API
使用 subnetworks.insert
方法建立僅限 Proxy 的子網路,並將 PROJECT_ID 替換為您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "proxy-only-subnet", "ipCidrRange": "10.129.0.0/23", "network": "projects/PROJECT_ID/global/networks/lb-network", "region": "projects/PROJECT_ID/regions/us-west1", "purpose": "REGIONAL_MANAGED_PROXY", "role": "ACTIVE" }
設定防火牆規則
這個範例使用以下防火牆規則:
fw-allow-health-check
:輸入規則,適用於要進行負載平衡的執行個體,可允許來自 Google Cloud健康狀態檢查系統 (在130.211.0.0/22
和35.191.0.0/16
中) 的所有 TCP 流量。這個範例會使用目標標記load-balanced-backend
來辨識套用防火牆規則的 VM。fw-allow-proxies
:輸入規則,適用於要進行負載平衡的執行個體,可在80
、443
和8080
通訊埠上允許來自區域外部應用程式負載平衡器代管 Proxy 的 TCP 流量。這個範例會使用目標標記load-balanced-backend
來辨識套用防火牆規則的 VM。
如果沒有這些防火牆規則,預設拒絕輸入規則將會封鎖傳入至後端執行個體的流量。
目標代碼定義後端執行個體。如未指定目標標記,防火牆規則會套用至 VPC 網路中的所有後端執行個體。建立後端 VM 時,請務必加入指定的目標標記,如「建立代管執行個體群組」一文所述。
主控台
在 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 tags」(目標標記):
load-balanced-backend
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22
和35.191.0.0/16
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「TCP」TCP核取方塊,然後輸入
80
做為「Port number」(通訊埠編號)。
最佳做法是將這個規則限制為只允許與健康檢查所使用的通訊協定和通訊埠相符的通訊協定和通訊埠。如果您將tcp:80
用於通訊協定和通訊埠, Google Cloud 可以使用通訊埠80
的 HTTP 與 VM 聯絡,但無法使用通訊埠443
的 HTTPS 與 VM 聯絡。
- Name (名稱):
按一下 [建立]。
按一下「Create firewall rule」(建立防火牆規則),建立允許負載平衡器 Proxy 伺服器連結後端的規則:
- Name (名稱):
fw-allow-proxies
- Network (網路):
lb-network
- Direction of traffic (流量方向):「Ingress」(輸入)
- 「Action on match」(相符時執行的動作):「允許」
- 目標:指定的目標標記
- 「Target tags」(目標標記):
load-balanced-backend
- 來源篩選器:IPv4 範圍
- Source IPv4 ranges (來源 IPv4 範圍):
10.129.0.0/23
- 通訊協定和通訊埠:
- 選擇「Specified protocols and ports」。
- 勾選「TCP」TCP核取方塊,然後輸入
80, 443, 8080
做為「Port number」(通訊埠編號)。
- Name (名稱):
按一下 [建立]。
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
建立
fw-allow-proxies
規則,允許區域性外部應用程式負載平衡器的 Proxy 連結後端。將source-ranges
設為僅限 Proxy 子網路的已分配範圍,例如10.129.0.0/23
。gcloud compute firewall-rules create fw-allow-proxies \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=source-range \ --target-tags=load-balanced-backend \ --rules=tcp:80,tcp:443,tcp:8080
Terraform
如要建立防火牆規則,請使用 google_compute_firewall
資源。
API
請向 firewalls.insert
方法提出 POST
要求,並將 PROJECT_ID 替換為您的專案 ID,藉此建立 fw-allow-health-check
防火牆規則。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "projects/PROJECT-ID/global/networks/lb-network", "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp" } ], "direction": "INGRESS" }
建立 fw-allow-proxies
防火牆規則,允許 proxy 子網路中的 TCP 流量,適用於 firewalls.insert
方法,並將 PROJECT_ID 替換為您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-proxies", "network": "projects/PROJECT_ID/global/networks/lb-network", "sourceRanges": [ "10.129.0.0/23" ], "targetTags": [ "load-balanced-backend" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "80" ] }, { "IPProtocol": "tcp", "ports": [ "443" ] }, { "IPProtocol": "tcp", "ports": [ "8080" ] } ], "direction": "INGRESS" }
使用 VM 服務設定區域性外部應用程式負載平衡器
本節顯示在 Compute Engine VM 上執行服務所需設定。用戶端 VM 會連線到您在轉送規則中設定的 IP 位址和通訊埠。當用戶端應用程式將流量傳送到這個 IP 位址和通訊埠時,系統會根據地區外部應用程式負載平衡器的網址對應,將要求轉送至您的後端虛擬機器 (VM)。
本頁的範例會為地區外部應用程式負載平衡器的轉送規則明確建立保留的外部 IP 位址,而不允許分配暫時性的外部 IP 位址。建議您最好為轉送規則保留 IP 位址。
建立代管執行個體群組後端
本節說明如何建立範本和代管執行個體群組。代管執行個體群組提供的 VM 執行個體,會執行區域外部應用程式負載平衡器範例的後端伺服器。從用戶端到這些後端伺服器的流量會經過負載平衡。為示範之用,後端會提供自己的主機名稱。
主控台
建立執行個體範本。前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。
前往「Instance templates」(執行個體範本) 頁面
- 點選「建立執行個體範本」。
- 在「Name」(名稱) 中輸入
l7-xlb-backend-template
。 - 確認「開機磁碟」已設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明使用僅在 Debian 上可用的指令,例如
apt-get
。 - 點選「進階選項」。
- 按一下「網路」,然後設定下列欄位:
- 在「網路標記」中輸入
load-balanced-backend
。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network
- Subnet (子網路):
backend-subnet
- Network (網路):
- 在「網路標記」中輸入
按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中輸入下列指令碼。
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
按一下 [建立]。
建立代管執行個體群組。前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱「無狀態或有狀態的 MIG」。
- 在「Name」(名稱) 中輸入
l7-xlb-backend-example
。 - 在「Location」(位置) 中,選取「Single zone」(單一可用區)。
- 在「Region」(區域) 中選取
us-west1
。 - 在「Zone」(區域) 中選取
us-west1-a
。 - 在「Instance template」(執行個體範本) 中選取
l7-xlb-backend-template
。 針對「Autoscaling mode」(自動調度資源模式),選取「On: add and remove instances to the group」(開啟:在群組中新增和移除執行個體)。
將「Minimum number of instances」(執行個體數量下限) 設為
2
,並將「Maximum number of instances」(執行個體數量上限) 設為2
以上。按一下 [建立]。
gcloud
本指南的 gcloud
操作說明假設您使用 Cloud Shell 或已安裝 bash 的其他環境。
使用
gcloud compute instance-templates create
指令,建立含有 HTTP 伺服器的 VM 執行個體範本。gcloud compute instance-templates create l7-xlb-backend-template \ --region=us-west1 \ --network=lb-network \ --subnet=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'
使用
gcloud compute instance-groups managed create
指令,在區域中建立代管執行個體群組。gcloud compute instance-groups managed create l7-xlb-backend-example \ --zone=us-west1-a \ --size=2 \ --template=l7-xlb-backend-template
Terraform
如要建立執行個體範本,請使用 google_compute_instance_template
資源。
如要建立代管執行個體群組,請使用 google_compute_instance_group_manager
資源。
API
使用
instanceTemplates.insert
方法建立執行個體範本,並將PROJECT_ID
替換為您的專案 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name":"l7-xlb-backend-template", "properties": { "machineType":"e2-standard-2", "tags": { "items":[ "load-balanced-backend" ] }, "metadata": { "kind":"compute#metadata", "items":[ { "key":"startup-script", "value":"#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nsystemctl restart apache2" } ] }, "networkInterfaces":[ { "network":"projects/PROJECT_ID/global/networks/lb-network", "subnetwork":"regions/us-west1/subnetworks/backend-subnet", "accessConfigs":[ { "type":"ONE_TO_ONE_NAT" } ] } ], "disks": [ { "index":0, "boot":true, "initializeParams": { "sourceImage":"projects/debian-cloud/global/images/family/debian-12" }, "autoDelete":true } ] } }
使用
instanceGroupManagers.insert
方法,在每個區域中建立受管理的執行個體群組,並將PROJECT_ID
替換為您的專案 ID。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/{zone}/instanceGroupManagers { "name": "l7-xlb-backend-example", "zone": "projects/PROJECT_ID/zones/us-west1-a", "instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-xlb-backend-template", "baseInstanceName": "l7-xlb-backend-example", "targetSize": 2 }
將命名通訊埠新增至執行個體群組
針對執行個體群組定義一個 HTTP 服務,並將通訊埠名稱對應至相關的通訊埠:負載平衡器的後端服務會將流量轉送至該具名連接埠。
主控台
前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
按一下執行個體群組的名稱 (本例為
l7-xlb-backend-example
)。在執行個體群組的「總覽」頁面上,按一下「編輯」圖示
。按一下 [Specify port name mapping] (指定通訊埠名稱對應)。
按一下 [新增項目]。
在「Port name」(通訊埠名稱) 中輸入
http
。在「Port number」(通訊埠編號) 中輸入80
。按一下 [儲存]。
gcloud
使用 gcloud compute instance-groups
set-named-ports
指令。
gcloud compute instance-groups set-named-ports l7-xlb-backend-example \ --named-ports http:80 \ --zone us-west1-a
Terraform
代管執行個體群組範例包含 named_port
屬性。
保留負載平衡器的 IP 位址
為負載平衡器保留靜態 IP 位址。
主控台
在 Google Cloud 控制台,前往「Reserve a static address」(預約靜態位址) 頁面。
為新地址選擇「名稱」。
在「Network Service Tier」中,選取「Standard」。
在「IP 版本」部分,選取「IPv4」。IPv6 位址只限通用位址,且只適用於全球負載平衡器。
在「Type」(類型) 中,選取「Regional」(區域)。
在「Region」(地區) 中,選取 us-west1。
將「Attached to」(連接至) 選項設為「None」(無)。建立負載平衡器後,這個 IP 位址就會附加至負載平衡器的轉送規則。
按一下「保留」,即可預留 IP 位址。
gcloud
如要使用
gcloud compute
保留靜態外部 IP 位址,請使用compute addresses create
指令。gcloud compute addresses create ADDRESS_NAME \ --region=us-west1 \ --network-tier=STANDARD
更改下列內容:
ADDRESS_NAME
:您要稱呼此位址的名稱。REGION
:您要保留這個位址的地區。此區域應與負載平衡器位於相同區域。所有區域 IP 位址都是IPv4
。
使用
compute addresses describe
指令查看結果:gcloud compute addresses describe ADDRESS_NAME
Terraform
如要預留 IP 位址,請使用 google_compute_address
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
API
如要建立地區 IPv4 位址,請呼叫地區 addresses.insert
方法:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/addresses
要求內容應包含以下程式碼:
{ "name": "ADDRESS_NAME" "networkTier": "STANDARD" "region": "us-west1" }
更改下列內容:
ADDRESS_NAME
:地址名稱REGION
:這項要求的區域名稱PROJECT_ID
:這項要求的專案 ID
設定負載平衡器
本例說明如何建立下列區域性外部應用程式負載平衡器資源:
- HTTP 健康狀態檢查
- 以代管執行個體群組做為後端的後端服務
- 網址對應
- 如果為目標 HTTP(S) Proxy 定義了地區,請務必參照地區網址對應。地區網址對應會根據您為傳入網址的主機和路徑定義的規則,將要求轉送到地區後端服務。地區網址對應只能由同一地區中的地區目標 Proxy 規則所參照。
- SSL 憑證 (適用於 HTTPS)
- 目標 Proxy
- 轉送規則
Proxy 可用性
有時 Google Cloud 區域的 Proxy 容量不足,無法支援新的負載平衡器。如果發生這種情況,您在建立負載均衡器時, Google Cloud 主控台會提供 Proxy 可用性警告訊息。如要解決這個問題,請採取下列任一做法:
- 為負載平衡器選取其他區域。如果您在其他區域有後端,這可能是一個實用的選項。
- 選取已分配專屬 Proxy 子網路的 VPC 網路。
等待容量問題解決。
主控台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合區域工作負載」,然後點選「Next」。
- 按一下 [設定]。
基本設定
- 在負載平衡器的名稱中輸入
regional-l7-xlb
。 - 在「Region」(區域) 中選取
us-west1
。 - 在「Network」(網路) 中選取
lb-network
。
保留僅限 Proxy 的子網路
如果是區域性外部應用程式負載平衡器,請保留 Proxy 專用子網路:
- 按一下「保留子網路」。
- 在「Name」(名稱) 中輸入
proxy-only-subnet
。 - 在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23
。 - 按一下「新增」。
設定前端
針對 HTTP:
- 按一下「前端設定」。
- 將「Name」(名稱) 設定為
l7-xlb-forwarding-rule
。 - 將「Protocol」(通訊協定) 設為
HTTP
。 - 將「Network service tier」(網路服務級別) 設為「Standard」(標準)。
- 將「Port」(通訊埠) 設為
80
。 - 選取您在「保留負載平衡器的 IP 位址」中建立的 IP 位址。
- 按一下 [完成]。
針對 HTTPS:
- 按一下「前端設定」。
- 在「Name」(名稱) 欄位中輸入
l7-xlb-forwarding-rule
。 - 在「Protocol」欄位中選取
HTTPS (includes HTTP/2)
。 - 將「Network service tier」(網路服務級別) 設為「Standard」(標準)。
- 確認「Port」(通訊埠) 已設為
443
。 - 選取您在「保留負載平衡器的 IP 位址」中建立的 IP 位址。
- 在「Certificate」清單中,執行下列操作:
- 如果您已擁有 Compute Engine 自行管理的 SSL 憑證資源,請選取主要 SSL 憑證。
- 按一下「建立新憑證」。
- 在「Name」(名稱) 欄位中輸入
l7-xlb-cert
。 - 在適當的欄位中上傳 PEM 格式的檔案:
- 認證
- 私密金鑰
- 按一下 [建立]。
- 在「Name」(名稱) 欄位中輸入
- 選用:如要新增主要安全資料傳輸層 (SSL) 憑證以外的憑證,請按照下列指示操作:
- 按一下「新增憑證」。
- 如果您已擁有憑證,請從「憑證」清單中選取。
- 選用:按一下「Create a new certificate」,然後按照先前步驟中的指示操作。
從「SSL policy」清單中選取 SSL 政策。如要建立 SSL 政策,請視需要執行下列操作:
- 在「SSL policy」(安全資料傳輸層 (SSL) 政策) 清單中,選取「Create a policy」(建立政策)。
- 輸入 SSL 政策的名稱。
- 選取最低 TLS 版本。預設值為 TLS 1.0。
- 選取預先設定的 Google 代管設定檔,或選取「自訂」設定檔,以便個別選取 SSL 功能。接著,系統會顯示「已啟用的功能」和「已停用的功能」。
- 按一下 [儲存]。
如果您尚未建立任何 SSL 政策,系統會套用預設 Google Cloud SSL 政策。
按一下 [完成]。
設定後端服務
- 按一下「後端設定」。
- 在「Create or select backend services」(建立或選取後端服務) 選單中,選取 [Create a backend service] (建立後端服務)。
- 將後端服務的名稱設為
l7-xlb-backend-service
。 - 在「通訊協定」部分選取「HTTP」。
- 在「Named Port」(已命名的通訊埠) 中輸入
http
。 - 將「後端類型」(Backend type) 設為「Instance group」(執行個體群組)。
- 在「New backend」部分中:
- 將「Instance group」(執行個體群組) 設為
l7-xlb-backend-example
。 - 將「Port numbers」(通訊埠編號) 設為
80
。 - 將「Balancing mode」(平衡模式) 設為「Utilization」(使用率)。
- 按一下 [完成]。
- 將「Instance group」(執行個體群組) 設為
- 在「Health check」(健康狀態檢查) 清單中,按一下「Create a health check」(建立健康狀態檢查)。
- 將「Name」(名稱) 設定為
l7-xlb-basic-check
。 - 將「Protocol」(通訊協定) 設為
HTTP
。 - 將「Port」(通訊埠) 設為
80
。 - 按一下 [儲存]。
- 將「Name」(名稱) 設定為
- 按一下 [建立]。
設定轉送規則
- 按一下「轉送規則」。
- 針對「Mode」,請選取「Simple host and path rule」。
- 確保
l7-xlb-backend-service
是任何不相符主機和路徑的唯一後端服務。
檢查設定
- 按一下「檢查並完成」。
- 查看負載平衡器設定。
- 選用:按一下「等效程式碼」,查看用來建立負載平衡器的 REST API 要求。
- 按一下 [建立]。
gcloud
使用
gcloud compute health-checks create http
指令定義 HTTP 健康狀態檢查。gcloud compute health-checks create http l7-xlb-basic-check \ --region=us-west1 \ --request-path='/' \ --use-serving-port
使用
gcloud compute backend-services create
指令定義後端服務。gcloud compute backend-services create l7-xlb-backend-service \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --port-name=http \ --health-checks=l7-xlb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1
使用
gcloud compute backend-services add-backend
指令,將後端新增到後端服務。gcloud compute backend-services add-backend l7-xlb-backend-service \ --balancing-mode=UTILIZATION \ --instance-group=l7-xlb-backend-example \ --instance-group-zone=us-west1-a \ --region=us-west1
使用
gcloud compute url-maps create
指令建立網址對應。gcloud compute url-maps create regional-l7-xlb-map \ --default-service=l7-xlb-backend-service \ --region=us-west1
建立目標 Proxy。
HTTP:
針對 HTTP 負載平衡器,請使用
gcloud compute target-http-proxies create
指令建立目標 Proxy。gcloud compute target-http-proxies create l7-xlb-proxy \ --url-map=regional-l7-xlb-map \ --url-map-region=us-west1 \ --region=us-west1
適用於 HTTPS:
您可以建立 Compute Engine 或憑證管理工具憑證。請使用下列任一方法,透過憑證管理工具建立憑證:
- 區域性自行管理憑證。如要進一步瞭解如何建立及使用區域性自行管理憑證,請參閱「部署區域性自行管理憑證」一文。不支援憑證對應。
區域性 Google 代管憑證。不支援憑證對應。
Certificate Manager 支援下列類型的區域性 Google 代管憑證:
- 區域性 Google 代管憑證,並針對每個專案授權 DNS 存取權。詳情請參閱「部署區域性 Google 代管憑證」。
- 區域性 Google 代管 (私人) 憑證 (搭配憑證授權單位服務)。 詳情請參閱「透過 CA 服務部署區域性 Google 代管憑證」。
建立憑證後,請直接將憑證附加至目標 Proxy。
將檔案路徑指派給變數名稱。
export LB_CERT=path to PEM-formatted file
export LB_PRIVATE_KEY=path to PEM-formatted file
使用
gcloud compute ssl-certificates create
指令建立地區 SSL 憑證。gcloud compute ssl-certificates create l7-xlb-cert \ --certificate=$LB_CERT \ --private-key=$LB_PRIVATE_KEY \ --region=us-west1
使用地區 SSL 憑證,搭配
gcloud compute target-https-proxies create
指令建立目標 Proxy。gcloud compute target-https-proxies create l7-xlb-proxy \ --url-map=regional-l7-xlb-map \ --region=us-west1 \ --ssl-certificates=l7-xlb-cert
建立轉寄規則。
HTTP:
使用
gcloud compute forwarding-rules create
指令並加上正確的旗標。gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-xlb-proxy \ --target-http-proxy-region=us-west1
適用於 HTTPS:
使用
gcloud compute forwarding-rules create
指令搭配正確的旗標建立轉送規則。gcloud compute forwarding-rules create l7-xlb-forwarding-rule \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --address=ADDRESS_NAME \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-xlb-proxy \ --target-https-proxy-region=us-west1
Terraform
如要建立健康狀態檢查,請使用 google_compute_region_health_check
資源。
如要建立後端服務,請使用 google_compute_region_backend_service
資源。
如要建立網址對應,請使用 google_compute_region_url_map
資源。
如要建立目標 HTTP Proxy,請使用 google_compute_region_target_http_proxy
資源。
如要建立轉送規則,請使用 google_compute_forwarding_rule
資源。
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
API
請向 regionHealthChecks.insert
方法提出 POST
要求,並將 PROJECT_ID
替換為您的專案 ID,藉此建立健康狀態檢查。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/{region}/healthChecks
{
"name": "l7-xlb-basic-check",
"type": "HTTP",
"httpHealthCheck": {
"portSpecification": "USE_SERVING_PORT"
}
}
請對 regionBackendServices.insert
方法提出 POST
要求,並將 PROJECT_ID
替換為您的專案 ID,藉此建立區域後端服務。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices
{
"name": "l7-xlb-backend-service",
"backends": [
{
"group": "projects/<var>PROJECT_ID</var>/zones/us-west1-a/instanceGroups/l7-xlb-backend-example",
"balancingMode": "UTILIZATION"
}
],
"healthChecks": [
"projects/<var>PROJECT_ID</var>/regions/us-west1/healthChecks/l7-xlb-basic-check"
],
"loadBalancingScheme": "EXTERNAL_MANAGED"
}
對 regionUrlMaps.insert
方法提出 POST
要求,並將 PROJECT_ID
替換為您的專案 ID,藉此建立網址對應。
POST https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/urlMaps
{
"name": "regional-l7-xlb-map",
"defaultService": "projects/<var>PROJECT_ID</var>/regions/us-west1/backendServices/l7-xlb-backend-service"
}
請對 regionTargetHttpProxies.insert
方法提出 POST
要求,並將 PROJECT_ID
取代為您的專案 ID,藉此建立目標 HTTP Proxy。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy { "name": "l7-xlb-proxy", "urlMap": "projects/PROJECT_ID/global/urlMaps/regional-l7-xlb-map", "region": "us-west1" }
請對 forwardingRules.insert
方法提出 POST
要求,並將 PROJECT_ID
替換為您的專案 ID,藉此建立轉送規則。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "l7-xlb-forwarding-rule", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "portRange": "80-80", "target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-xlb-proxy", "loadBalancingScheme": "EXTERNAL_MANAGED", "network": "projects/PROJECT_ID/global/networks/lb-network", "networkTier": "STANDARD", }
將網域連結至負載平衡器
建立負載平衡器後,請記下與負載平衡器相關聯的 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」(負載平衡)頁面。
- 選取剛剛建立的負載平衡器。
- 在「Backend」(後端) 區段中,確認 VM 健康狀態良好。「Healthy」欄應已填妥,顯示兩個 VM 的健康狀態均良好 (
2/2
)。如有其他情況,請先嘗試重新載入頁面。 Google Cloud 主控台可能需要一些時間才會顯示 VM 的健康狀態良好。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到您後端 VM 的防火牆設定與網路標記設定。 - 在 Google Cloud 主控台顯示後端執行個體健康後,您可以前往
https://IP_ADDRESS
(或http://IP_ADDRESS
),使用網路瀏覽器測試負載平衡器。請將IP_ADDRESS
替換為負載平衡器的 IP 位址。 - 如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
- 瀏覽器應會顯示頁面,並於其中列出提供該頁面的執行個體名稱及所屬可用區 (例如
Page served from: lb-backend-example-xxxx
)。如果您的瀏覽器無法顯示這個頁面,請檢查本指南中的設定。
gcloud
請注意預留的 IPv4 位址:
gcloud beta compute addresses describe ADDRESS_NAME \ --format="get(address)" \ --region="us-west1"
您可以前往 https://IP_ADDRESS
(或 http://IP_ADDRESS
),透過網路瀏覽器測試負載平衡器。請將 IP_ADDRESS
替換為負載平衡器的 IP 位址。
如果您使用自行簽署的憑證測試 HTTPS,瀏覽器會顯示警告。您必須明確指示瀏覽器接受自行簽署的憑證。
瀏覽器應會顯示含有後端執行個體最少資訊的頁面。如果您的瀏覽器無法顯示這個頁面,請參閱本指南中的設定說明。
額外設定選項
本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選填項目。您可以按任何順序執行這些工作。
啟用工作階段相依性
這些程序會說明如何更新範例地區外部應用程式負載平衡器的後端服務,以便後端服務使用產生的 Cookie 相依性、標頭欄位相依性或 HTTP Cookie 相依性。
啟用產生的 Cookie 相依性後,負載平衡器會在第一個要求中發出 Cookie。對於每個含有相同 Cookie 的後續要求,負載平衡器會將要求導向相同的後端 VM 或端點。區域性外部應用程式負載平衡器的 Cookie 名稱為 GCILB
。
啟用標頭欄位親和性後,負載平衡器會根據 --custom-request-header
標記中指定的 HTTP 標頭值,將要求轉送至 NEG 中的後端 VM 或端點。只有在負載平衡區域政策為 RING_HASH
或 MAGLEV
,且後端服務的一致雜湊指定 HTTP 標頭名稱時,標頭欄位相依性才會有效。
啟用 HTTP Cookie 相依性後,負載平衡器會根據 HTTP_COOKIE
標記中指定的 HTTP Cookie (使用選用的 --affinity-cookie-ttl
標記),將要求轉送至 NEG 中的後端 VM 或端點。如果用戶端未在 HTTP 要求中提供 Cookie,Proxy 會產生 Cookie,並透過 Set-Cookie
標頭傳回給用戶端。只有在負載平衡區域政策為 RING_HASH
或 MAGLEV
,且後端服務的一致雜湊指定 HTTP cookie 時,HTTP cookie 親和性才有效。
主控台
如要為後端服務啟用或變更工作階段相依性,請按照下列步驟操作:
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
選取剛剛建立的負載平衡器。
點選「後端」。
按一下「l7-xlb-backend-service」 (您為本範例建立的後端服務名稱),然後按一下「Edit」。
在「後端服務詳細資料」頁面中,按一下「進階設定」。
如要設定「工作階段相依性」,請從選單中選取所需的工作階段相依性類型。
按一下「更新」。
gcloud
使用下列指令,將 l7-xlb-backend-service
後端服務更新為不同類型的工作階段相依性:
gcloud compute backend-services update l7-xlb-backend-service \ --session-affinity=GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP --region=us-west1
API
如要設定工作階段相依性,請對 regionBackendServices/patch
方法發出 PATCH
要求。
PATCH https://compute.googleapis.com/compute/v1/projects/<var>PROJECT_ID</var>/regions/us-west1/regionBackendServices/l7-xlb-backend-service
{
"sessionAffinity": <var>"GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP"</var>
}
更新用戶端 HTTP 保持運作逾時時間
在先前步驟中建立的負載平衡器已設定 用戶端 HTTP keepalive 逾時的預設值。如要更新用戶端 HTTP keepalive 逾時值,請按照下列操作說明操作。
控制台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 按一下要修改的負載平衡器名稱。
- 按一下「編輯」圖示 。
- 按一下「前端設定」。
- 展開「進階功能」。在「HTTP 保持運作逾時」中,輸入逾時值。
- 按一下「更新」。
- 如要查看變更內容,請依序按一下「Review and finalize」和「Update」。
gcloud
對於 HTTP 負載平衡器,請使用 gcloud compute target-http-proxies update
指令更新目標 HTTP Proxy。
gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --region=REGION
針對 HTTPS 負載平衡器,請使用 gcloud compute target-https-proxies update
指令更新目標 HTTPS Proxy。
gcloud compute target-https-proxies update TARGET_HTTP_PROXY_NAME \ --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \ --region REGION
更改下列內容:
TARGET_HTTP_PROXY_NAME
:目標 HTTP Proxy 的名稱。TARGET_HTTPS_PROXY_NAME
:目標 HTTPS Proxy 的名稱。HTTP_KEEP_ALIVE_TIMEOUT_SEC
:HTTP 保持運作逾時值,介於 5 到 600 秒。
在外部應用程式負載平衡器上啟用 IAP
您可以設定 IAP 是否啟用 (預設)。如果啟用,您必須提供 oauth2-client-id
和 oauth2-client-secret
的值。
如要啟用 IAP,請更新後端服務,以便在 oauth2-client-id
和 oauth2-client-secret
中納入 --iap=enabled
旗標。
您也可以使用 Google Cloud 控制台、gcloud CLI 或 API,為 Compute Engine 資源啟用 IAP。