簡介
在本文實作練習中,將會透過 Set Up Network and HTTP Load Balancers | Google Cloud Skills Boost 主題,學習如何在 GCP 雲端環境中,了解「網路負載平衡器」(Network Load Balancer) 也就是 Layer 4 (TCP) 層級的負載平衡器,以及「HTTP 負載平衡器」(HTTP Load Balancer) 也就是 Layer 7 (HTTP) 層級的負載平衡器,這兩者之間有什麼差異,以及如何為 Compute Engine 虛擬主機 (VM) 中執行的應用程式,組態設定使用 L4 (TCP) 或 L7 (HTTP) 負載平衡器。啟用 Cloud Shell (gcloud)
本次實作時間給予 1.5
小時也是非常充裕。同樣的,啟動實作環境後,系統提供暫用的使用者帳號、密碼、Project
ID…等資訊。
在 Cloud Console 畫面中,點選右上角圖示後,準備啟用 Cloud Shell (gcloud),稍後也會使用到。簡單來說,Cloud Shell 是個已經載入了開發工具的極小型 VM
虛擬主機,並且提供 5 GB 儲存空間,以便管理人員可以透過 Cloud Shell 對 Google Cloud 資源進行存取等管理動作。
順利啟用 Cloud Shell 之後,可以嘗試執行「gcloud auth list」、「gcloud config list project」指令,了解目前運作環境的相關系統資訊。詳細資訊請參考 gcloud CLI overview | Google Cloud CLI Documentation 官方文件。
設定採用的 Region 和 Zone
在開始實作之前,應該先了解有哪一些 Google Compute Engine 資源,可供使用。簡單來說,「區域」(Region) 是執行資源的特定地理位置,每個區域當中則會有一或多個「可用區」(Zone)。舉例來說,「asia-east1」表示東亞區域,在這個區域中有「asia-east1-a、asia-east1-b、asia-east1-c」 可用區。有關 Region 和
Zone 的詳細資訊,請參考 Regions and zones | Compute Engine Documentation
| Google Cloud 官方文件。下表列出各個可用區和所屬區域:
透過下列指令,可以組態設定 Region 為「us-west4」,並將 Zone 設定為「us-west4-c」,組態設定完成後,記得透過指令確認組態設定是否套用生效。
部署 3 台 VM 虛擬主機並擔任網頁伺服器
在實作負載平衡機制之前,先部署 3 台 Compute Engine VM 虛擬主機,並安裝
Apache 網頁伺服器服務。在下列指令中,可以看到部署的 VM 虛擬主機名稱為
www1、www2、www3。
gcloud compute instances create www1 \
--zone= \
--tags=network-lb-tag \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
<h3>Web Server: www1</h3>" | tee /var/www/html/index.html'
gcloud compute instances create www2 \
--zone= \
--tags=network-lb-tag \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
<h3>Web Server: www2</h3>" | tee /var/www/html/index.html'
gcloud compute instances create www3 \
--zone= \
--tags=network-lb-tag \
--machine-type=e2-medium \
--image-family=debian-11 \
--image-project=debian-cloud \
--metadata=startup-script='#!/bin/bash
apt-get update
apt-get install apache2 -y
service apache2 restart
echo "
<h3>Web Server: www3</h3>" | tee /var/www/html/index.html'
接著,透過指令「gcloud compute firewall-rules create www-firewall-network-lb --target-tags network-lb-tag --allow tcp:80」新增 HTTP 流量,並允許傳送至這 3 台網頁伺服器的防火牆規則。然後執行「gcloud compute instances list」指令,列出 3 台網頁伺服器使用的 EXTERNAL_IP。
確認每台網頁伺服器的 Public IP 位址之後,使用 curl 指令確認網頁伺服器服務正常運作。
組態設定 Layer 4 (TCP) 負載平衡機制
在組態設定 L4 負載平衡服務時,VM 虛擬機器會收到預定傳送至您所設定的靜態外部 IP 位址的封包,並透過 Compute Engine 映像檔建立的執行個體會自動設定為處理這個 IP 位址。詳細資訊請參考 External passthrough Network Load Balancer overview | Load Balancing | Google Cloud 官方文件。
依序執行下列指令,建立 Layer 4 (TCP) 負載平衡機制:
- 為 L4 負載平衡器建立靜態外部 IP 位址
- gcloud compute addresses create network-lb-ip-1 --region us-west4
- 建立目標集區 www-pool 並啟用健康狀態檢查功能
- gcloud compute target-pools create www-pool --region us-west4 --http-health-check basic-check
- 將 3 台網頁伺服器加入集區 www-pool 當中
- gcloud compute target-pools add-instances www-pool --instances www1,www2,www3
- 新增 HTTP 封包轉送規則
- gcloud compute forwarding-rules create www-rule --region us-west4 --ports 80 --address network-lb-ip-1 --target-pool www-pool
測試封包轉送規則是否正確運作
現在,L4 負載平衡服務已經設定完成。先執行「gcloud compute forwarding-rules describe www-rule --region us-west4」指令,確認 L4 負載平衡服務的 Public IP 位址,本文實作為「34.125.40.173」。
接著,定義名稱為 IPADDRESS 的變數,內容為「IPADDRESS=$(gcloud compute forwarding-rules describe www-rule --region us-west4 --format="json" | jq -r .IPAddress)」,定義完成後先執行「echo $IPADDRESS」,確認是否顯示為 L4 負載平衡服務的 Public IP 位址,然後使用 curl 指令「while true; do curl -m1 $IPADDRESS; done」存取 L4 負載平衡服務的 Public IP 位址。
此時,便可以看到隨機傳回 3 台網頁伺服器的 IP 位址,表示 L4 負載平衡服務封包轉送規則正確運作,按下 Ctrl + C 組合鍵即可停止測試。值得注意的是,若一開始發生回應失敗情況的話,請等待 30 秒之後再次測試。
事實上,也可以從 Google Console 管理介面,查看 L4 負載平衡服務的組態設定內容。
組態設定 Layer 7 (HTTP) 負載平衡機制
在 Google Cloud 運作架構中,Layer 7 (HTTP) 負載平衡機制,是由 GFE (Google Front End) 所負責。GFE 遍布全球各地,透過 Google 的全球網路和控制層互相搭配運作,所以管理人員可以設定網址規則,將部分網址轉送至某一組 VM 虛擬主機,並將其他網址轉送至其他 VM 虛擬主機。
GFE 一律會將網頁請求轉送至距離使用者最近的 VM 虛擬主機群組,但前提是該群組已經具備足夠的處理能力且適合該要求。倘若距離最近的群組處理能力不足,系統會將要求傳送至距離較近且具備充足處理能力的群組進行回應。因此,當管理人員需要組態設定 L7 負載平衡服務時,VM 虛擬主裝必須先屬於某個執行個體群組,然後群組內的 VM 虛擬主機必須運作網頁伺服器擔任後端伺服器才行。
首先,執行下列指令建立 Layer 7 (HTTP) 負載平衡機制範本,透過 MIGs (Managed Instance Groups) 機制,管理人員可以自動調度資源、自動修復、區域 (多可用區) 部署以及自動更新等自動化 MIG 服務,讓工作負載具有可擴充性和高可用性。有關 MIGs 的詳細資訊請參考 Instance groups | Compute Engine Documentation | Google Cloud 官方文件。
gcloud compute instance-templates create lb-backend-template \
--region=us-west4 \
--network=default \
--subnet=default \
--tags=allow-health-check \
--machine-type=e2-medium \
--image-family=debian-11 \
--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://169.254.169.254/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
依據上述建立的範本,建立名稱為「lb-backend-group」的 MIGs,並建立名稱為「fw-allow-health-check」的防火牆規則。其中,在 Ingress 的部份允許來自 Google Cloud 健康狀態檢查系統的流量 (130.211.0.0/22 和 35.191.0.0/16)
gcloud compute instance-groups managed create lb-backend-group \
--template=lb-backend-template --size=2 --zone=us-west4
gcloud compute firewall-rules create fw-allow-health-check \
--network=default \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80
- 組態設定全域靜態外部 IP 位址
- gcloud compute addresses create lb-ipv4-1 --ip-version=IPV4 --global
- gcloud compute addresses describe lb-ipv4-1 --format="get(address)" --global
- 建立健康狀態檢查機制
- gcloud compute health-checks create http http-basic-check --port 80
- 建立後端服務
- gcloud compute backend-services create web-backend-service --protocol=HTTP --port-name=http --health-checks=http-basic-check --global
- 將 VM 虛擬主機加入至後端服務
- gcloud compute backend-services add-backend web-backend-service --instance-group=lb-backend-group --instance-group-zone=us-west4-c --global
- 建立網址對應,以便將連線請求轉送至後端服務
- gcloud compute url-maps create web-map-http --default-service web-backend-service
- 建立目標 HTTP Proxy 將連線請求轉送至網址對應
- gcloud compute target-http-proxies create http-lb-proxy --url-map web-map-http
- 建立全域轉送規則,將連線請求轉送至 HTTP Proxy
- gcloud compute forwarding-rules create http-content-rule --address=lb-ipv4-1 --global --target-http-proxy=http-lb-proxy --ports=80
測試封包轉送規則是否正確運作
現在,L7 負載平衡機制已經設定完成。同樣的,管理人員可以透過 Google Console 管理介面,查看 L7 負載平衡服務的組態設定內容。
同樣的,在完成實作練習結束前,記得確認是否通過所有的檢查程序,才能確保獲得這個實作課程的積分。
由於這個實作是 Google Cloud Essentials 系列的最後一個實戰項目,所以系統回應你已經完成並取得 Google Cloud Essentials Badge。