本文說明如何為在 Compute Engine VM 上執行的服務,設定區域內部應用程式負載平衡器。
如要為在 Google Kubernetes Engine (GKE) Pod 中執行的服務設定負載平衡,請參閱「透過獨立 NEG 進行容器原生負載平衡」和「將內部應用程式負載平衡器附加至獨立 NEG」一節。
如要設定負載平衡,透過 Private Service Connect 存取 Google API 和服務,請參閱「透過後端存取區域性 Google API」。
設定內部應用程式負載平衡器分為兩個部分:
- 執行事前準備工作,例如確保必要帳戶具有正確的權限,以及準備虛擬私有雲 (VPC) 網路。
- 設定負載平衡器資源。
在您依循這份指南操作之前,請先熟悉以下概念:
- 內部應用程式負載平衡器總覽,包括「限制」一節
- 虛擬私有雲防火牆規則總覽
權限
如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色。
| 工作 | 必要角色 |
|---|---|
| 建立網路、子網路和負載平衡器元件 | Compute 網路管理員 (roles/compute.networkAdmin)
|
| 新增與移除防火牆規則 | Compute Security Admin (roles/compute.securityAdmin)
|
| 建立執行個體 | Compute 執行個體管理員 (roles/compute.instanceAdmin.v1)
|
如需詳細資訊,請參閱下列指南:
設定總覽
您可以按照以下整體設定流程所述來設定內部應用程式負載平衡器。以下各個步驟編號對應至圖表中所標示的編號。
如圖所示,這個範例在 us-west1 地區的虛擬私有雲網路中建立了一個內部應用程式負載平衡器,其中具有一個後端服務和兩個後端群組。
下圖顯示下列項目:
具有兩個子網路的虛擬私人雲端網路:
一個子網路是用於後端 (執行個體群組) 和轉送規則。其主要 IP 位址範圍為
10.1.2.0/24。一個子網路是
us-west1地區中的僅限 Proxy 子網路。您必須在使用內部應用程式負載平衡器的虛擬私有雲網路的每個區域中,建立一個僅限 Proxy 的子網路。該地區的僅限 Proxy 子網路會在該地區的所有內部應用程式負載平衡器之間共用。系統會從僅限 Proxy 的子網路中,分配從內部應用程式負載平衡器傳送至服務後端之封包的來源位址。在這個範例中,該地區的僅限 Proxy 子網路的主要 IP 位址範圍為10.129.0.0/23,這是建議的子網路大小。詳情請參閱適用於 Envoy 負載平衡器的僅限 Proxy 子網路。
兩項防火牆規則:
- 允許僅限 Proxy 的子網路流量在網路中流動的防火牆規則。也就是說,新增一個規則,允許來自
10.129.0.0/23的 TCP 通訊埠80、443和8080流量 (這個範例中的僅限 Proxy 的子網路範圍)。 - 健康狀態檢查探測器的另一項防火牆規則。
- 允許僅限 Proxy 的子網路流量在網路中流動的防火牆規則。也就是說,新增一個規則,允許來自
後端 Compute Engine VM 執行個體。
Compute Engine VM 部署的代管或非代管執行個體群組。
在每個區域中,您可以根據部署需求擁有不同類型的後端群組組合。
回報後端完備性的地區健康狀態檢查。
監控後端使用情況和健康狀態的地區後端服務。
地區網址對應,這項服務會剖析要求的網址,並根據要求網址的主機和路徑,將要求轉送至特定的後端服務。
地區目標 HTTP 或 HTTPS Proxy,這項服務會接收來自使用者的要求,並將其轉送至網址對應。如為 HTTPS,請設定地區安全資料傳輸層 (SSL) 憑證資源。如果您設定了 HTTPS 負載平衡,目標 Proxy 會使用 SSL 憑證解密 SSL 流量。目標 Proxy 可透過 HTTP 或 HTTPS 將流量轉送至您的執行個體。
具有負載平衡器內部 IP 位址的轉送規則,可將每個傳入要求轉送至目標 Proxy。
與轉送規則相關聯的內部 IP 位址可來自相同網路和區域中的任何子網路。請注意下列條件:
- IP 位址可以 (但不必) 來自與後端執行個體群組相同的子網路。
- IP 位址不得來自
--purpose旗標設為REGIONAL_MANAGED_PROXY的保留僅限 Proxy 子網路。 - 如要與多個轉送規則共用內部 IP 位址,請將 IP 位址的
--purpose旗標設為SHARED_LOADBALANCER_VIP。
本頁的範例會為區域內部應用程式負載平衡器的轉送規則使用保留的內部 IP 位址,而不允許分配暫時的內部 IP 位址。建議您最好為轉送規則保留 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 範圍。
為示範全域存取權,本範例也會在不同區域和子網路中建立第二個測試用戶端 VM:
- 區域:
europe-west1 - 子網路:
europe-subnet,主要 IP 位址範圍為10.3.4.0/24
設定網路和子網路
控制台
前往 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 (名稱):
按一下 [完成]。
按一下 [新增子網路]。
建立子網路,示範全域存取。在「New subnet」(新的子網路) 區段中,輸入以下資訊:
- Name (名稱):
europe-subnet - Region (區域):
europe-west1 - IP address range (IP 位址範圍):
10.3.4.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使用
gcloud compute networks subnets create指令,在europe-west1地區的lb-network網路中建立子網路:gcloud compute networks subnets create europe-subnet \ --network=lb-network \ --range=10.3.4.0/24 \ --region=europe-west1
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",
}
對 subnetworks.insert 方法發出 POST 要求。將 PROJECT_ID 替換為專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks
{
"name": "europe-subnet",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"ipCidrRange": "10.3.4.0/24",
"region": "projects/PROJECT_ID/regions/europe-west1",
}
設定僅限 Proxy 的子網路
這個僅限 Proxy 的子網路適用於 lb-network 的 us-west1 區域中,所有區域 Envoy 型負載平衡器。
控制台
如果您使用 Google Cloud 控制台,可以稍後在「Load balancing」(負載平衡) 頁面建立僅限 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
API
使用 subnetworks.insert 方法建立僅限 Proxy 的子網路,並將 PROJECT_ID 替換為專案 ID。
POST https://compute.googleapis.com/compute/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-ssh. 輸入規則,適用於要進行負載平衡的執行個體,可在 TCP 通訊埠22上允許來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。這個範例會使用目標標記allow-ssh來辨識套用防火牆規則的 VM。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。
如果沒有這些防火牆規則,預設拒絕輸入規則將會封鎖傳入至後端執行個體的流量。
目標標記會定義後端執行個體。如果沒有目標標記,防火牆規則會套用至虛擬私有雲網路中的所有後端執行個體。建立後端 VM 時,請務必加入指定的目標標記,如「建立代管 VM 執行個體群組後端」所示。
控制台
前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。
按一下「Create firewall rule」(建立防火牆規則),以建立允許連入 SSH 連線的規則:
- Name (名稱):
fw-allow-ssh - Network (網路):
lb-network - Direction of traffic (流量方向):「Ingress」(輸入)
- 「Action on match」(相符時執行的動作):選取「Allow」(允許)
- 目標:指定的目標標記
- 「Target tags」(目標標記):
allow-ssh - Source filter (來源篩選器):「IPv4 ranges」(IPv4 範圍)
- Source IPv4 ranges (來源 IPv4 範圍):
0.0.0.0/0 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「TCP」核取方塊,然後輸入
22做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
第二次按一下「Create firewall rule」(建立防火牆規則),以建立允許Google Cloud 健康狀態檢查的規則:
- Name (名稱):
fw-allow-health-check - Network (網路):
lb-network - Direction of traffic (流量方向):「Ingress」(輸入)
- 「Action on match」(相符時執行的動作):選取「Allow」(允許)
- 目標:指定的目標標記
- 「Target tags」(目標標記):
load-balanced-backend - Source filter (來源篩選器):「IPv4 ranges」(IPv4 範圍)
- Source IPv4 ranges (來源 IPv4 範圍):
130.211.0.0/22和35.191.0.0/16 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「TCP」TCP核取方塊,然後輸入
80做為通訊埠編號。
最佳做法是將這項規則限制為只允許與健康狀態檢查所用通訊協定和通訊埠相符的通訊協定和通訊埠。如果您將通訊協定和通訊埠指定為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」(相符時執行的動作):選取「Allow」(允許)
- 目標:指定的目標標記
- 「Target tags」(目標標記):
load-balanced-backend - Source filter (來源篩選器):「IPv4 ranges」(IPv4 範圍)
- Source IPv4 ranges (來源 IPv4 範圍):
10.129.0.0/23 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「TCP」TCP核取方塊,然後輸入
80, 443, 8080做為通訊埠編號。
- Name (名稱):
點選「建立」。
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規則,允許 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
API
對 firewalls.insert 方法發出 POST 要求,建立 fw-allow-ssh 防火牆規則,並將 PROJECT_ID 替換為專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
{
"name": "fw-allow-ssh",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"sourceRanges": [
"0.0.0.0/0"
],
"targetTags": [
"allow-ssh"
],
"allowed": [
{
"IPProtocol": "tcp",
"ports": [
"22"
]
}
],
"direction": "INGRESS"
}
對 firewalls.insert 方法發出 POST 要求,建立 fw-allow-health-check 防火牆規則,並將 PROJECT_ID 替換為專案 ID。
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 防火牆規則,允許在 firewalls.insert 方法的 Proxy 子網路中傳輸 TCP 流量,並將 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"
}
保留負載平衡器的 IP 位址
根據預設,每個轉送規則會使用一個 IP 位址。您可以預留共用 IP 位址,以便透過多個轉送規則使用同一個 IP 位址。不過,如要使用 Private Service Connect 發布負載平衡器,請勿為轉送規則使用共用 IP 位址。
如要取得轉送規則的 IP 位址,請使用 backend-subnet。如果您嘗試使用僅限 Proxy 的子網路,轉送規則建立作業就會失敗。
控制台
您可以使用Google Cloud 控制台保留獨立的內部 IP 位址。
- 前往「VPC networks」(VPC 網路) 頁面。
- 按一下用於設定環境間混合連線的網路。
- 按一下「靜態內部 IP 位址」,然後按一下「保留靜態位址」。
- 在「Name」(名稱) 中輸入
l7-ilb-ip-address。 - 在「Subnet」(子網路) 中,選取
backend-subnet。 - 如要指定要保留的 IP 位址,請在「Static IP address」(靜態 IP 位址) 下方選取「Let me choose」(自行選擇),然後填入「Custom IP address」(自訂 IP 位址)。否則系統會自動從子網路中為您指派 IP 位址。
- 如要將這個 IP 位址用於多個轉送規則,請在「用途」下方選擇「共用」。
- 按一下「預訂」即可完成程序。
gcloud
使用 gcloud CLI 執行
gcloud compute addresses create指令:gcloud compute addresses create l7-ilb-ip-address \ --region=us-west1 \ --subnet=backend-subnet如要讓多個轉送規則使用相同的 IP 位址,請指定
--purpose=SHARED_LOADBALANCER_VIP。使用
gcloud compute addresses describe指令 查看已分配的 IP 位址:gcloud compute addresses describe l7-ilb-ip-address \ --region=us-west1
建立代管 VM 執行個體群組後端
本節說明如何建立執行個體群組範本和代管執行個體群組。代管執行個體群組提供的 VM 執行個體,會執行區域內部應用程式負載平衡器範例的後端伺服器。您可以為執行個體群組定義 HTTP 服務,並將通訊埠名稱對應至相關通訊埠。負載平衡器的後端服務會將流量轉送至具名通訊埠。從用戶端到後端伺服器的流量會經過負載平衡。為方便示範,後端會提供自己的主機名稱。
控制台
建立執行個體範本。前往 Google Cloud 控制台的「Instance templates」(執行個體範本) 頁面。
前往「Instance templates」(執行個體範本)
- 按一下「Create instance template」(建立執行個體範本)。
- 在「Name」(名稱) 中輸入
l7-ilb-backend-template。 - 確認「開機磁碟」設為 Debian 映像檔,例如「Debian GNU/Linux 12 (bookworm)」。這些操作說明中的指令僅適用於 Debian,例如
apt-get。 - 點選「進階選項」。
- 按一下「網路」,然後設定下列欄位:
- 在「Network tags」(網路標記),輸入
allow-ssh和load-balanced-backend。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network - Subnet (子網路):
backend-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)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
點選「建立」。
建立代管執行個體群組。前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。
- 點選「建立執行個體群組」。
- 選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))。詳情請參閱具狀態的代管執行個體群組。
- 在「Name」(名稱) 中輸入
l7-ilb-backend-example。 - 在「Location」(位置) 中選取「Single zone」(單一可用區)。
- 在「Region」(區域) 中選取
us-west1。 - 在「Zone」(區域) 中選取
us-west1-a。 - 在「Instance template」(執行個體範本) 中選取
l7-ilb-backend-template。 指定要在群組中建立的執行個體數量。
在本範例中,請在「Autoscaling」(自動調度資源) 底下指定下列選項:
- 在「Autoscaling mode」(自動調度資源模式),選取
Off:do not autoscale。 - 在「Maximum number of instances」(執行個體數量上限) 中輸入
2。
您也可以根據需要,在 UI 的「Autoscaling」(自動調度資源) 區段中,將執行個體群組設為根據執行個體 CPU 使用量自動新增或移除執行個體。
- 在「Autoscaling mode」(自動調度資源模式),選取
點選「建立」。
gcloud
本指南中的 gcloud 指示假設您使用 Cloud Shell 或已安裝 bash 的其他環境。
使用
gcloud compute instance-templates create指令,建立含有 HTTP 伺服器的 VM 執行個體範本。gcloud compute instance-templates create l7-ilb-backend-template \ --region=us-west1 \ --network=lb-network \ --subnet=backend-subnet \ --tags=allow-ssh,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-ilb-backend-example \ --zone=us-west1-a \ --size=2 \ --template=l7-ilb-backend-template
API
使用 instanceTemplates.insert 方法建立執行個體範本,並將 PROJECT_ID 替換為專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates
{
"name":"l7-ilb-backend-template",
"properties":{
"machineType":"e2-standard-2",
"tags":{
"items":[
"allow-ssh",
"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\n
vm_hostname=\"$(curl -H \"Metadata-Flavor:Google\"
\\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\n
echo \"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-ilb-backend-example",
"zone": "projects/PROJECT_ID/zones/us-west1-a",
"instanceTemplate": "projects/PROJECT_ID/global/instanceTemplates/l7-ilb-backend-template",
"baseInstanceName": "l7-ilb-backend-example",
"targetSize": 2
}
設定負載平衡器
本範例說明如何建立下列區域內部應用程式負載平衡器資源:
- HTTP 健康狀態檢查
- 後端服務,後端為代管執行個體群組
- 網址對應
- 如果為目標 HTTP(S) Proxy 定義了地區,請務必參照地區網址對應。地區網址對應會根據您為傳入網址的主機和路徑定義的規則,將要求轉送到地區後端服務。地區網址對應只能由同一地區中的地區目標 Proxy 規則所參照。
- SSL 憑證 (適用於 HTTPS)
- 目標 Proxy
- 轉送規則
Proxy 可用性
有時 Google Cloud 區域的 Proxy 容量不足,無法支援新的負載平衡器。如果發生這種情況,建立負載平衡器時,控制台會顯示 Proxy 可用性警告訊息。 Google Cloud 如要解決這個問題,請採取下列任一做法:
- 為負載平衡器選取其他區域。如果其他區域有後端,這會是實用的選項。
- 選取已分配僅限 Proxy 子網路的虛擬私有雲網路。
等待容量問題解決。
控制台
選取負載平衡器類型
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 按一下「Create load balancer」(建立負載平衡器)。
- 將「Type of load balancer」(負載平衡器類型) 設為「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後按一下「Next」(下一步)。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 在「Cross-region or single region deployment」(跨區域或單一區域部署) 部分,選取「Best for regional workloads」(最適合區域工作負載),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
l7-ilb-map。 - 在「Region」(區域) 中選取
us-west1。 - 在「Network」(網路) 中選取
lb-network。
保留僅限 Proxy 子網路
保留僅限 Proxy 的子網路:
- 按一下 [Reserve a Subnet] (保留子網路)。
- 在「Name」(名稱) 中輸入
proxy-only-subnet。 - 在「IP address range」(IP 位址範圍) 中,輸入
10.129.0.0/23。 - 按一下「新增」。
設定後端服務
- 按一下 [Backend configuration] (後端設定)。
- 在「Create or select backend services」(建立或選取後端服務) 選單中,選取 [Create a backend service] (建立後端服務)。
- 將後端服務的名稱設為
l7-ilb-backend-service。 - 將「後端類型」設為「執行個體群組」。
- 在「健康狀態檢查」清單中,按一下「建立健康狀態檢查」,然後輸入下列資訊:
- Name (名稱):
l7-ilb-basic-check - 「Protocol」(通訊協定):HTTP
- Port (通訊埠):
80
- Name (名稱):
- 點選「建立」。
- 在「New backend」(新後端) 部分:
- 將「Instance group」(執行個體群組) 設為
l7-ilb-backend-example。 - 將「Port numbers」(通訊埠編號) 設為
80。 - 將「Balancing mode」(平衡模式) 設為「Utilization」(使用率)。
- 按一下 [完成]。
- 將「Instance group」(執行個體群組) 設為
-
選用:設定預設後端安全性政策。預設安全性政策會根據使用者設定的門檻節流。如要進一步瞭解預設安全性政策,請參閱「頻率限制總覽」。
- 如要停用 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取
None。 - 如要設定 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取「Default security policy」(預設安全性政策)。
- 在「Policy name」(政策名稱) 欄位,接受系統自動產生的名稱,或輸入安全性政策的名稱。
- 在「Request count」(要求數量) 欄位,接受預設要求數量,或輸入介於
1和10,000之間的整數。 - 在「Interval」(間隔) 欄位,選取所需的間隔。
- 在「Enforce on key」(強制啟用金鑰) 欄位,選擇下列其中一個值:「All」(全部)、「IP address」(IP 位址) 或「X-Forwarded-For IP address」(X-Forwarded-For IP 位址)。如要進一步瞭解這些選項,請參閱「識別用戶端以設定頻率限制」。
- 如要停用 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取
- 點選「建立」。
設定網址對應
按一下「Host and path rules」(主機與路徑規則)。
在「模式」中,選取「簡易型主機與路徑規則」。
確認
l7-ilb-backend-service是任何不相符主機和路徑的唯一後端服務。
如要瞭解流量管理,請參閱「為內部應用程式負載平衡器設定流量管理」。
設定前端
HTTP:
- 按一下「前端設定」。
- 將轉送規則名稱設為
l7-ilb-forwarding-rule。 - 將「Protocol」(通訊協定) 設為
HTTP。 - 將「Subnetwork」(子網路) 設為
backend-subnet。 - 將「Port」(通訊埠) 設為
80。 - 從「IP address」(IP 位址) 清單中選取「
l7-ilb-ip-address」。 - 按一下 [完成]。
HTTPS:
- 按一下「前端設定」。
- 將轉送規則名稱設為
l7-ilb-forwarding-rule。 - 將「Protocol」(通訊協定) 設為
HTTPS (includes HTTP/2)。 - 將「Subnetwork」(子網路) 設為
backend-subnet。 - 確認「Port」(通訊埠) 已設為
443,以允許 HTTPS 流量。 - 從「IP address」(IP 位址) 清單中選取「
l7-ilb-ip-address」。 如要將 SSL 憑證指派給負載平衡器的目標 HTTPS Proxy,您可以使用 Compute Engine SSL 憑證或 Certificate Manager 憑證。
如要將 Certificate Manager 憑證附加至負載平衡器的目標 HTTPS Proxy,請在「選擇憑證存放區」部分選取「憑證」。
如果您已有現成的 Certificate Manager 憑證可供選取,請按照下列步驟操作:
- 按一下 [新增憑證]。
- 按一下「選取現有憑證」,然後從憑證清單中選取憑證。
- 按一下「選取」。
選取新的 Certificate Manager 憑證後,該憑證會顯示在憑證清單中。
如要建立新的 Certificate Manager 憑證,請按照下列步驟操作:
- 按一下 [新增憑證]。
- 按一下「建立新憑證」。
如要建立新憑證,請按照憑證管理工具說明文件中,下列任一設定方法中步驟 3 開始的步驟操作:
建立新的 Certificate Manager 憑證後,該憑證會顯示在憑證清單中。
如要將 Compute Engine SSL 憑證附加至負載平衡器的目標 HTTPS Proxy,請在「選擇憑證存放區」部分選取「傳統憑證」。
- 在「憑證」清單中,執行下列操作:
- 如果您已有 Compute Engine 自行管理的 SSL 憑證資源,請選取主要 SSL 憑證。
- 按一下「建立新憑證」。
- 在「Name」(名稱) 欄位中,輸入
l7-ilb-cert。 - 將 PEM 格式的檔案上傳至相對應的欄位:
- 認證
- 私密金鑰
- 點選「建立」。
- 在「Name」(名稱) 欄位中,輸入
- 選用:如要新增主要 SSL 憑證以外的憑證,請按照下列步驟操作:
- 按一下「新增憑證」。
- 如果已有憑證,請從「憑證」清單中選取。
- 選用:按一下「建立新憑證」,然後按照上一個步驟的指示操作。
- 在「憑證」清單中,執行下列操作:
從「SSL policy」(SSL 政策) 清單中選取 SSL 政策。如要建立 SSL 政策 (選用),請按照下列步驟操作:
- 在「SSL policy」(SSL 政策) 清單中,選取「Create a policy」(建立政策)。
- 輸入 SSL 政策名稱。
- 選取最低 TLS 版本。預設值為 TLS 1.0。
- 選取預先設定的 Google 代管設定檔,或選取「自訂」設定檔,個別選取 SSL 功能。畫面上會顯示「Enabled features」(已啟用的功能) 和「Disabled features」(已停用的功能)。
- 按一下 [儲存]。
如果您未建立任何 SSL 政策,系統會套用預設 Google Cloud 的 SSL 政策。
按一下 [完成]。
檢閱設定
- 按一下「檢查並完成」。
- 查看負載平衡器配置設定。
- 選用:按一下「Equivalent code」(對等程式碼),即可查看用於建立負載平衡器的 REST API 要求。
- 點選「建立」。
gcloud
使用
gcloud compute health-checks create http指令定義 HTTP 健康狀態檢查。gcloud compute health-checks create http l7-ilb-basic-check \ --region=us-west1 \ --use-serving-port使用
gcloud compute backend-services create指令定義後端服務。gcloud compute backend-services create l7-ilb-backend-service \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTP \ --health-checks=l7-ilb-basic-check \ --health-checks-region=us-west1 \ --region=us-west1使用
gcloud compute backend-services add-backend指令,將後端新增到後端服務。gcloud compute backend-services add-backend l7-ilb-backend-service \ --balancing-mode=UTILIZATION \ --instance-group=l7-ilb-backend-example \ --instance-group-zone=us-west1-a \ --region=us-west1使用
gcloud compute url-maps create指令建立網址對應。gcloud compute url-maps create l7-ilb-map \ --default-service=l7-ilb-backend-service \ --region=us-west1建立目標 Proxy。
HTTP:
如果是內部 HTTP 負載平衡器,請使用
gcloud compute target-http-proxies create指令建立目標 Proxy。gcloud compute target-http-proxies create l7-ilb-proxy \ --url-map=l7-ilb-map \ --url-map-region=us-west1 \ --region=us-west1HTTPS:
您可以建立 Compute Engine 或 Certificate Manager 憑證。您可以使用下列任一方法,透過 Certificate Manager 建立憑證:
- 區域性自行管理憑證。如要瞭解如何建立及使用區域性自行管理憑證,請參閱「部署區域性自行管理憑證」。不支援憑證對應。
區域性 Google 代管憑證。不支援憑證對應。
Certificate Manager 支援下列類型的區域性 Google 代管憑證:
- 區域性 Google 代管憑證,並提供專案 DNS 授權。詳情請參閱「使用 DNS 授權部署區域性 Google 代管憑證」。
- 透過憑證授權單位服務,使用區域性 Google 代管 (私人) 憑證。 詳情請參閱「使用憑證授權單位服務部署區域性 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-ilb-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-ilb-proxy \ --url-map=l7-ilb-map \ --region=us-west1 \ --ssl-certificates=l7-ilb-cert建立轉寄規則。
如果是自訂網路,您必須參照轉送規則中的子網路。請注意,這是 VM 子網路,而不是 Proxy 子網路。
HTTP:
使用加上正確旗標的
gcloud compute forwarding-rules create指令。gcloud compute forwarding-rules create l7-ilb-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=l7-ilb-ip-address \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1HTTPS:
使用
gcloud compute forwarding-rules create指令和正確的旗標建立轉送規則。gcloud compute forwarding-rules create l7-ilb-forwarding-rule \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=l7-ilb-ip-address \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-ilb-proxy \ --target-https-proxy-region=us-west1
API
對 regionHealthChecks.insert 方法發出 POST 要求,建立健康狀態檢查,並將 PROJECT_ID 替換為您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/{region}/healthChecks
{
"name": "l7-ilb-basic-check",
"type": "HTTP",
"httpHealthCheck": {
"portSpecification": "USE_SERVING_PORT"
}
}
對 regionBackendServices.insert 方法發出 POST 要求,建立區域後端服務,並將 PROJECT_ID 替換為您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices
{
"name": "l7-ilb-backend-service",
"backends": [
{
"group": "projects/PROJECT_ID/zones/us-west1-a/instanceGroups/l7-ilb-backend-example",
"balancingMode": "UTILIZATION"
}
],
"healthChecks": [
"projects/PROJECT_ID/regions/us-west1/healthChecks/l7-ilb-basic-check"
],
"loadBalancingScheme": "INTERNAL_MANAGED"
}
向 regionUrlMaps.insert 方法發出 POST 要求,並將 PROJECT_ID 替換為您的專案 ID,即可建立網址對應。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/urlMaps
{
"name": "l7-ilb-map",
"defaultService": "projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service"
}
HTTP:
對 regionTargetHttpProxies.insert 方法發出 POST 要求,建立目標 HTTP Proxy,並將 PROJECT_ID 替換為您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/targetHttpProxy
{
"name": "l7-ilb-proxy",
"urlMap": "projects/PROJECT_ID/global/urlMaps/l7-ilb-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-ilb-forwarding-rule",
"IPAddress": "IP_ADDRESS",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "projects/PROJECT_ID/regions/us-west1/targetHttpProxies/l7-ilb-proxy",
"loadBalancingScheme": "INTERNAL_MANAGED",
"subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"networkTier": "PREMIUM"
}
HTTPS:
您可以建立 Compute Engine 或 Certificate Manager 憑證。您可以使用下列任一方法,透過 Certificate Manager 建立憑證:
- 區域性自行管理憑證。如要瞭解如何建立及使用區域性自行管理憑證,請參閱「部署區域性自行管理憑證」。不支援憑證對應。
區域性 Google 代管憑證。不支援憑證對應。
Certificate Manager 支援下列類型的區域性 Google 代管憑證:
- 區域性 Google 代管憑證,並提供專案 DNS 授權。詳情請參閱「使用 DNS 授權部署區域性 Google 代管憑證」。
- 透過憑證授權單位服務,使用區域性 Google 代管 (私人) 憑證。 詳情請參閱「使用憑證授權單位服務部署區域性 Google 代管憑證」。
建立憑證後,請直接將憑證附加至目標 Proxy。
讀取憑證和私密金鑰檔案,然後建立 SSL 憑證。以下範例說明如何使用 Python 執行這項操作。
對 regionTargetHttpsProxies.insert 方法發出 POST 要求,建立目標 HTTPS Proxy,並將 PROJECT_ID 換成您的專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionTargetHttpsProxy
{
"name": "l7-ilb-proxy",
"urlMap": "projects/PROJECT_ID/regions/us-west1/urlMaps/l7-ilb-map",
"sslCertificates": /projects/PROJECT_ID/regions/us-west1/sslCertificates/SSL_CERT_NAME
}
對 forwardingRules.insert 方法發出 POST 要求,建立轉送規則,並將 PROJECT_ID 替換為專案 ID。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules
{
"name": "l7-ilb-forwarding-rule",
"IPAddress": "IP_ADDRESS",
"IPProtocol": "TCP",
"portRange": "80-80",
"target": "projects/PROJECT_ID/regions/us-west1/targetHttpsProxies/l7-ilb-proxy",
"loadBalancingScheme": "INTERNAL_MANAGED",
"subnetwork": "projects/PROJECT_ID/regions/us-west1/subnetworks/backend-subnet",
"network": "projects/PROJECT_ID/global/networks/lb-network",
"networkTier": "PREMIUM",
}
測試負載平衡器
如要測試負載平衡器,請建立用戶端 VM。接著,與 VM 建立 SSH 工作階段,並從 VM 將流量傳送至負載平衡器。
建立 VM 執行個體來測試連線
控制台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設定為
l7-ilb-client-us-west1-a。將「Zone」(區域) 設為
us-west1-a。點選「進階選項」。
按一下「網路」,然後設定下列欄位:
- 在「Network tags」(網路標記),輸入
allow-ssh。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network - Subnet (子網路):
backend-subnet
- Network (網路):
- 在「Network tags」(網路標記),輸入
點選「建立」。
gcloud
gcloud compute instances create l7-ilb-client-us-west1-a \
--image-family=debian-12 \
--image-project=debian-cloud \
--network=lb-network \
--subnet=backend-subnet \
--zone=us-west1-a \
--tags=allow-ssh
將流量傳送至負載平衡器
登入您剛建立的執行個體,並測試後端的 HTTP(S) 服務是否可以透過區域內部應用程式負載平衡器的轉送規則 IP 位址連線,並且在後端執行個體之間進行流量負載平衡。
使用 SSH 連線到每個用戶端執行個體
gcloud compute ssh l7-ilb-client-us-west1-a \
--zone=us-west1-a
取得負載平衡器的 IP 位址
使用 gcloud compute addresses describe
指令
查看已分配的 IP 位址:
gcloud compute addresses describe l7-ilb-ip-address \
--region=us-west1
確認 IP 位址是否提供主機名稱
將 IP_ADDRESS 替換為負載平衡器的 IP 位址。
HTTP 測試:
curl IP_ADDRESS
HTTPS 測試:
curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443
將 DOMAIN_NAME 替換為您的應用程式網域名稱,例如 test.example.com。
-k 旗標會讓 curl 略過憑證驗證。
執行 100 個要求並確認它們可達到負載平衡
將 IP_ADDRESS 替換為負載平衡器的 IP 位址。
HTTP:
{
RESULTS=
for i in {1..100}
do
RESULTS="$RESULTS:$(curl --silent IP_ADDRESS)"
done
echo "***"
echo "*** Results of load-balancing: "
echo "***"
echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
echo
}
HTTPS:
將 DOMAIN_NAME 替換為您的應用程式網域名稱,例如 test.example.com。
{
RESULTS=
for i in {1..100}
do
RESULTS="$RESULTS:$(curl -k -s 'https://DOMAIN_NAME:443' --connect-to DOMAIN_NAME:443:IP_ADDRESS:443)"
done
echo "***"
echo "*** Results of load-balancing: "
echo "***"
echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
echo
}
額外設定選項
本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選擇性的。您可以按任何順序執行這些工作。
啟用全域存取權
您可以為區域內部應用程式負載平衡器和區域內部 Proxy 網路負載平衡器啟用全域存取權,讓所有區域的用戶端都能存取這些負載平衡器。範例負載平衡器的後端仍須位於單一區域 (us-west1)。
您無法修改現有的區域轉送規則,啟用全域存取權。 您必須為此建立新的轉送規則,並刪除先前的轉送規則。此外,啟用全域存取權建立轉送規則後,就無法修改。如要停用全域存取權,您必須建立新的區域存取轉送規則,並刪除先前的全域存取轉送規則。
如要設定全域存取權,請進行下列設定變更。
控制台
為負載平衡器建立新的轉送規則:
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
在「名稱」欄中,按一下負載平衡器。
按一下「前端設定」。
按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)。
輸入新轉送規則的名稱和子網路詳細資料。
在「Subnetwork」(子網路) 中,選取「backend-subnet」。
在「IP address」(IP 位址) 部分,您可以選取與現有轉送規則相同的 IP 位址、保留新的 IP 位址,或使用臨時 IP 位址。如要讓多個轉送規則共用同一個 IP 位址,您必須在建立 IP 位址時,將 IP 位址
--purpose旗標設為SHARED_LOADBALANCER_VIP。在「Port number」(通訊埠編號) 部分輸入
110。在「全域存取權」部分,選取「啟用」。
按一下 [完成]。
按一下「Update」。
gcloud
使用
--allow-global-access旗標為負載平衡器建立新的轉送規則。HTTP:
gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=10.1.2.99 \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1 \ --allow-global-accessHTTPS:
gcloud compute forwarding-rules create l7-ilb-forwarding-rule-global-access \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=backend-subnet \ --address=10.1.2.99 \ --ports=443 \ --region=us-west1 \ --target-https-proxy=l7-ilb-proxy \ --target-https-proxy-region=us-west1 \ --allow-global-access您可以使用
gcloud compute forwarding-rules describe指令判斷轉送規則是否已啟用全域存取權。例如:gcloud compute forwarding-rules describe l7-ilb-forwarding-rule-global-access \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"啟用全域存取權後,輸出內容的轉送規則名稱和區域後面會顯示
True。
建立用戶端 VM 來測試全域存取權
控制台
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
點選「建立執行個體」。
將「Name」(名稱) 設定為
europe-client-vm。將「Zone」(區域) 設為
europe-west1-b。點選「進階選項」。
按一下「網路」,然後設定下列欄位:
- 在「Network tags」(網路標記),輸入
allow-ssh。 - 在「網路介面」中,選取下列項目:
- Network (網路):
lb-network - Subnet (子網路):
europe-subnet
- Network (網路):
- 在「Network tags」(網路標記),輸入
點選「建立」。
gcloud
在 europe-west1-b 可用區建立用戶端 VM。
gcloud compute instances create europe-client-vm \
--zone=europe-west1-b \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-ssh \
--subnet=europe-subnet
連線至 VM 用戶端並測試連線
使用
ssh連線至用戶端執行個體。gcloud compute ssh europe-client-vm \ --zone=europe-west1-b如先前在
us-west1地區所做,測試與負載平衡器的連線。vm-clientcurl http://10.1.2.99
啟用工作階段相依性
這些程序說明如何更新範例區域內部應用程式負載平衡器或跨區域內部應用程式負載平衡器的後端服務,以使後端服務使用產生的 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,將要求轉送至 NEG 中的後端 VM 或端點,並可選擇使用 --affinity-cookie-ttl 旗標。如果用戶端未在 HTTP 要求中提供 Cookie,Proxy 會產生 Cookie,並在 Set-Cookie 標頭中傳回給用戶端。只有在負載平衡區域政策為 RING_HASH 或 MAGLEV,且後端服務的穩定雜湊指定 HTTP Cookie 時,HTTP Cookie 親和性才有效。
控制台
如要啟用或變更後端服務的工作階段相依性,請按照下列步驟操作:
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 點選「後端」。
- 按一下「l7-ilb-backend-service」 (您為本範例建立的後端服務名稱),然後按一下「Edit」。
- 在「後端服務詳細資料」頁面中,按一下「進階設定」。
- 在「工作階段相依性」下方,選取所需的工作階段相依性類型。
- 按一下「Update」。
gcloud
使用下列 Google Cloud CLI 指令,將後端服務更新為不同類型的工作階段相依性:
gcloud compute backend-services update l7-ilb-backend-service \
--session-affinity=[GENERATED_COOKIE | HEADER_FIELD | HTTP_COOKIE | CLIENT_IP] \
--region=us-west1
API
如要設定工作階段相依性,請對
backendServices/patch 方法發出 `PATCH` 要求。
PATCH https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/regions/us-west1/regionBackendServices/l7-ilb-backend-service
{
"sessionAffinity": ["GENERATED_COOKIE" | "HEADER_FIELD" | "HTTP_COOKIE" | "CLIENT_IP" ]
}
限制哪些用戶端可以將流量傳送至負載平衡器
您可以在這些用戶端上設定輸出防火牆規則,限制用戶端連線至內部應用程式負載平衡器轉送規則 VIP。根據服務帳戶或標記,在特定用戶端 VM 上設定這些防火牆規則。
您無法使用防火牆規則,限制傳入特定內部應用程式負載平衡器轉送規則 VIP 的流量。一般來說,位於相同 VPC 網路且與轉送規則 VIP 位於相同區域的任何用戶端,都可以將流量傳送至轉送規則 VIP。
此外,所有對後端的要求都來自 Proxy,這些 Proxy 使用僅限 Proxy 的子網路範圍內的 IP 位址。您無法建立防火牆規則,根據用戶端使用的轉送規則 VIP,允許或拒絕這些後端的連入流量。
以下是一些範例,說明如何使用輸出防火牆規則,將流量限制在負載平衡器的轉送規則 VIP。
控制台
如要識別用戶端 VM,請為要限制的特定 VM 加上標記。這些標記是用來建立防火牆規則與標記用戶端 VM 之間的關聯。然後在後續步驟中,將標記新增至 TARGET_TAG 欄位。
您可以設定單一或多個防火牆規則。
單一輸出防火牆規則
您可以設定一項防火牆輸出規則,拒絕所有從已加上標記的用戶端 VM 傳送至負載平衡器 VIP 的輸出流量。
前往 Google Cloud 控制台的「Firewall rules」(防火牆規則) 頁面。
按一下「Create firewall rule」(建立防火牆規則),建立規則來拒絕從已加上標記的用戶端 VM 到負載平衡器 VIP 的輸出流量。
- Name (名稱):
fr-deny-access - Network (網路):
lb-network - Priority (優先順序):
100 - Direction of traffic (流量方向):「Egress」(輸出)
- 「相符時執行的動作」:選取「拒絕」
- 目標:指定的目標標記
- 「Target tags」(目標標記):
TARGET_TAG - Destination filter (目的地篩選器):「IP ranges」(IP 範圍)
- 目的地 IP 範圍:
10.1.2.99 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「tcp」tcp核取方塊,然後輸入
80做為通訊埠編號。
- Name (名稱):
點選「建立」。
多個輸出防火牆規則
如要採用更具擴充性的做法,請設定兩項規則。預設的低優先順序規則,會限制所有用戶端存取負載平衡器的 VIP。第二個優先順序較高的規則,允許部分已加上標記的用戶端存取負載平衡器的 VIP。只有標記的 VM 才能存取 VIP。
前往 Google Cloud 控制台的「Firewall rules」(防火牆規則) 頁面。
按一下「Create firewall rule」(建立防火牆規則),建立優先順序較低的規則,根據預設拒絕存取:
- Name (名稱):
fr-deny-all-access-low-priority - Network (網路):
lb-network - Priority (優先順序):
200 - Direction of traffic (流量方向):「Egress」(輸出)
- 「相符時執行的動作」:選取「拒絕」
- 目標:指定的目標標記
- 「Target tags」(目標標記):
TARGET_TAG - Destination filter (目的地篩選器):「IP ranges」(IP 範圍)
- 目的地 IP 範圍:
10.1.2.99 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「TCP」核取方塊,然後輸入
80做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
按一下「建立防火牆規則」,建立優先順序較高的規則,允許來自特定標記執行個體的流量。
- Name (名稱):
fr-allow-some-access-high-priority - Network (網路):
lb-network - Priority (優先順序):
100 - Direction of traffic (流量方向):「Egress」(輸出)
- 「Action on match」(相符時執行的動作):選取「Allow」(允許)
- 目標:指定的目標標記
- 「Target tags」(目標標記):
TARGET_TAG - Destination filter (目的地篩選器):「IP ranges」(IP 範圍)
- 目的地 IP 範圍:
10.1.2.99 - 通訊協定和通訊埠:
- 選擇「指定的通訊協定和通訊埠」。
- 勾選「TCP」核取方塊,然後輸入
80做為「Port number」(通訊埠編號)。
- Name (名稱):
點選「建立」。
gcloud
如要識別用戶端 VM,請為要限制的特定 VM 加上標記。然後按照這些步驟,將代碼新增至 TARGET_TAG 欄位。
您可以設定單一或多個防火牆規則。
單一輸出防火牆規則
您可以設定一項防火牆輸出規則,拒絕所有從已加上標記的用戶端 VM 傳送至負載平衡器 VIP 的輸出流量。
gcloud compute firewall-rules create fr-deny-access \
--network=lb-network \
--action=deny \
--direction=egress \
--rules=tcp \
--priority=100 \
--destination-ranges=10.1.2.99 \
--target-tags=TARGET_TAG
多個輸出防火牆規則
如要採用更具擴充性的做法,請設定兩項規則:一項是預設的低優先順序規則,禁止所有用戶端存取負載平衡器的 VIP;另一項是高優先順序規則,允許部分已標記的用戶端存取負載平衡器的 VIP。只有標記的 VM 才能存取 VIP。
建立優先順序較低的規則:
gcloud compute firewall-rules create fr-deny-all-access-low-priority \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp \ --priority=200 \ --destination-ranges=10.1.2.99建立優先順序較高的規則:
gcloud compute firewall-rules create fr-allow-some-access-high-priority \ --network=lb-network \ --action=allow \ --direction=egress \ --rules=tcp \ --priority=100 \ --destination-ranges=10.1.2.99 \ --target-tags=TARGET_TAG
如要使用服務帳戶而非標記來控管存取權,請在建立防火牆規則時使用 --target-service-accounts 選項,而非 --target-tags 旗標。
根據子網路,大規模限制對內部應用程式負載平衡器後端的存取權
隨著轉送規則數量增加,維護個別防火牆規則,或按照上一節所述將新的負載平衡 IP 位址新增至現有規則,都會變得不方便。如要避免這種情況,請從保留的子網路分配轉送規則 IP 位址。接著,您可以使用保留的子網路做為防火牆規則的目的地範圍,允許或封鎖來自標記執行個體或服務帳戶的流量。這樣一來,您就能有效控管一組轉送規則 VIP 的存取權,不必維護每個 VIP 的防火牆輸出規則。
以下是設定這項功能的步驟概要,假設您會另外建立所有其他必要的負載平衡器資源。
gcloud
建立地區子網路,用於為轉送規則分配負載平衡 IP 位址:
gcloud compute networks subnets create l7-ilb-restricted-subnet \ --network=lb-network \ --region=us-west1 \ --range=10.127.0.0/24建立轉送規則,從子網路取得位址。以下範例使用上一步建立的子網路中的
10.127.0.1位址。gcloud compute forwarding-rules create l7-ilb-forwarding-rule-restricted \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=l7-ilb-restricted-subnet \ --address=10.127.0.1 \ --ports=80 \ --region=us-west1 \ --target-http-proxy=l7-ilb-proxy \ --target-http-proxy-region=us-west1建立防火牆規則,限制傳送至轉送規則子網路 (
l7-ilb-restricted-subnet) 中 IP 位址範圍的流量:gcloud compute firewall-rules create restrict-traffic-to-subnet \ --network=lb-network \ --action=deny \ --direction=egress \ --rules=tcp:80 \ --priority=100 \ --destination-ranges=10.127.0.0/24 \ --target-tags=TARGET_TAG
設定後端子集
後端子集會為每個 Proxy 執行個體指派後端子集,藉此提升效能和擴充性。為後端服務啟用後端子集時,後端子集會調整每個 Proxy 執行個體使用的後端數量,如下所示:
參與負載平衡器的 Proxy 執行個體數量越多,子集大小就越小。
當網路中的後端總數超過單一 Proxy 執行個體的容量時,系統會自動縮減啟用後端子集功能的每個服務子集大小。
本範例說明如何建立區域內部應用程式負載平衡器資源,並啟用後端子集:
- 使用範例設定建立區域後端服務
l7-ilb-backend-service。 將
--subsetting-policy旗標指定為CONSISTENT_HASH_SUBSETTING,即可啟用後端子集化功能。將負載平衡架構設為INTERNAL_MANAGED。gcloud
使用下列
gcloud指令,透過後端子集更新l7-ilb-backend-service:gcloud beta compute backend-services update l7-ilb-backend-service \ --region=us-west1 \ --subsetting-policy=CONSISTENT_HASH_SUBSETTINGAPI
對
regionBackendServices/patch方法發出PATCH要求。PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/us-west1/backendServices/l7-ilb-backend-service { "subsetting": { "policy": CONSISTENT_HASH_SUBSETTING } }
您也可以設定 localityLbPolicy 政策,進一步調整後端負載平衡。詳情請參閱「流量政策」。
在多個內部轉送規則之間使用相同的 IP 位址
如要讓多個內部轉送規則共用同一個內部 IP 位址,您必須保留該 IP 位址,並將其 --purpose 旗標設為 SHARED_LOADBALANCER_VIP。
gcloud
gcloud compute addresses create SHARED_IP_ADDRESS_NAME \
--region=REGION \
--subnet=SUBNET_NAME \
--purpose=SHARED_LOADBALANCER_VIP
更新用戶端 HTTP 保持運作逾時
先前步驟中建立的負載平衡器已設定用戶端 HTTP Keep-Alive 超時的預設值。如要更新用戶端 HTTP 保持連線逾時,請按照下列操作說明操作。
控制台
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 按一下要修改的負載平衡器名稱。
- 按一下「Edit」(編輯)。
- 按一下「前端設定」。
- 展開「Advanced features」(進階功能)。在「HTTP 保持運作逾時」部分, 輸入逾時值。
- 按一下「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 秒。