使用外部 HTTP(s) 混合型負載平衡器連上網路端點群組

1. 簡介

混合型策略是務實的解決方案,可讓您因應瞬息萬變的市場需求並逐步翻新應用程式。Google Cloud 外部和內部 HTTP(s) 負載平衡器的混合型支援可將雲端負載平衡延伸至地端部署和其他雲端環境中的後端,同時是混合策略的關鍵驅動。這可能是暫時的,讓您有辦法遷移至現代化的雲端解決方案,或貴機構的 IT 基礎架構的永久裝置。

3312e69c63b02f73.png

在本研究室中,您將瞭解如何使用可透過外部 HTTP (s) 全域負載平衡器存取的兩部虛擬機器來建立網路端點群組(NEG)。雖然研究室的 NEG 位於 GCP 中,但透過相同程序與具備 IP 可連性的公開或內部部署資源進行通訊。

課程內容

  • 建立自訂虛擬私有雲
  • 建立兩個要做為網路端點群組 (NEG) 的虛擬機器 (VM)
  • 建立混合式負載平衡器、後端服務和相關聯的健康狀態檢查
  • 建立允許存取負載平衡器的防火牆規則
  • 系統將建立 Cloud Router 和 NAT,以允許從網際網路更新套件
  • 驗證網路端點群組可連性

軟硬體需求

  • 負載平衡器相關知識

自修環境設定

  1. 登入 Cloud 控制台建立新專案,或是重複使用現有專案。如果您還沒有 Gmail 或 Google Workspace 帳戶,請先建立帳戶

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • 專案名稱是這項專案的個人 ID。您只要遵守命名慣例,即可任意使用,並隨時更新。
  • 所有 Google Cloud 專案的專案 ID 均不得重複,且設定後即無法變更。Cloud 控制台會自動產生一個不重複的字串。但通常是在乎它何在在大部分的程式碼研究室中,您必須參照專案 ID (通常稱為 PROJECT_ID),因此如果您不喜歡的話,可以再隨機產生一個,或者,您也可以自行嘗試看看是否可用。是「凍結」建立專案後
  1. 接下來,您需要在 Cloud 控制台中啟用計費功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室並不會產生任何費用,如果有的話。請務必依照「清除所用資源」一節指示本節將說明如何關閉資源,這樣您就不會產生本教學課程結束後產生的費用。Google Cloud 的新使用者符合 $300 美元免費試用計畫的資格。

啟動 Cloud Shell

雖然 Google Cloud 可以從筆記型電腦遠端操作,但在本程式碼研究室中,您將使用 Google Cloud Shell,這是一種在 Cloud 中執行的指令列環境。

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

bce75f34b2c53987.png

佈建並連線至環境的作業只需幾分鐘的時間。完成後,您應該會看到類似下方的內容:

f6ef2b5f13479f3a.png

這部虛擬機器都裝載了您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提高網路效能和驗證能力。這個研究室中的所有工作都可以透過瀏覽器完成。

2. 事前準備

在 Cloud Shell 中,確認您已設定專案 ID

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]

Perform setting your projectID:
projectid=YOUR-PROJECT-ID
echo $projectid

3. 建立新的自訂模式虛擬私有雲網路

在這項工作中,您要建立虛擬私有雲 (VPC) 網路的基礎。

虛擬私有雲網路

透過 Cloud Shell

gcloud compute networks create hybrid-network-lb --subnet-mode custom

建立子網路

透過 Cloud Shell

gcloud compute networks subnets create network-endpoint-group-subnet --network hybrid-network-lb --range 192.168.10.0/24 --region us-west1

建立 Cloud NAT 執行個體

雖然這不是混合式網路的需求,但運算執行個體需要網際網路連線才能下載應用程式和更新。

在這項工作中,您會建立 Cloud Router 和 NAT 執行個體,允許網際網路連線至 VM 執行個體。

建立 Cloud Router

透過 Cloud Shell

gcloud compute routers create crnat --network hybrid-network-lb --region us-west1

建立 Cloud NAT

透過 Cloud Shell

gcloud compute routers nats create cloudnat --router=crnat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west1

4. 建立兩個 VM 執行個體

在這項工作中,您將在研究室的後續階段建立兩個執行 Apache 的 VM 執行個體,這些 VM 執行個體會成為網路端點群組 (NEG)。

透過 Cloud Shell 建立第一個地端部署執行個體:on-prem-neg-1

gcloud compute instances create on-prem-neg-1 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

透過 Cloud Shell 建立第一個地端部署執行個體:on-prem-neg-2

gcloud compute instances create on-prem-neg-2 \
    --zone=us-west1-a \
    --tags=allow-health-check \
    --image-family=debian-9 \
    --image-project=debian-cloud \
    --subnet=network-endpoint-group-subnet --no-address \
    --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)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

5. 建立含有地端部署端點的 NEG

首先,建立名為 on-prem-neg-1 和 on-prem-neg-2 的 NEG您也應指定 LB 考量到 IP 位址範圍,由於轉送和負載平衡時,這些端點位於 us-west1-a GCP 可用區。建議您根據互連網路連結/VPN 閘道,與互連網路連結/VPN 閘道所屬區域相關聯的任何可用區相對應,藉此進行負載平衡作業,以執行負載平衡作業。

透過 Cloud Shell 建立「on-prem-neg-1

gcloud compute network-endpoint-groups create on-prem-neg-1 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

透過 Cloud Shell 建立「on-prem-neg-2

gcloud compute network-endpoint-groups create on-prem-neg-2 \
    --network-endpoint-type NON_GCP_PRIVATE_IP_PORT \
    --zone "us-west1-a" \
    --network hybrid-network-lb

在程式碼研究室中,網路端點群組是在 GCP 中執行 Apache 的 GCE 執行個體。或者,您也可以將地端部署或網際網路端點指定為網路端點

透過 Cloud Shell 找出 GCE IP 位址

gcloud compute instances list | grep -i on-prem

將網路端點群組連結至先前在上一步中找到的 GCE 執行個體 IP 位址。每個否定,on-prem-neg-1 & on-prem-neg-2.

將 Cloud Shell 連結 on-prem-neg-1,將 x.x.x.x 更新為您辨識的 IP

gcloud compute network-endpoint-groups update on-prem-neg-1 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

將 Cloud Shell 連結 on-prem-neg-2,將 x.x.x.x 更新為您辨識的 IP

gcloud compute network-endpoint-groups update on-prem-neg-2 \
    --zone="us-west1-a" \
    --add-endpoint="ip=x.x.x.x,port=80"

6. 建立 http 健康狀態檢查、後端服務,防火牆

在這個步驟中,您將建立名為 on-prem-backend-service 的全域後端服務。這項後端服務會定義資料層將流量傳送至 NEG 的方式。

首先,請建立名為 on-prem-health-check 的健康狀態檢查,藉此監控屬於這個 NEG 的所有端點 (也就是你的地端部署端點) 的健康狀態。

透過 Cloud Shell

gcloud compute health-checks create http on-prem-health-check

請建立名為 on-prem-backend-service 的後端服務,並將其與健康狀態檢查建立關聯。

透過 Cloud Shell

gcloud compute backend-services create on-prem-backend-service \
    --global \
    --load-balancing-scheme=EXTERNAL \
    --health-checks on-prem-health-check

HTTP(S) 外部負載平衡器和後端會執行源自 35.191.0.0/16 和 130.211.0.0/22 子網路的健康狀態檢查;因此,您必須要有防火牆規則,才能允許負載平衡器向後端轉送。

透過 Cloud Shell

gcloud compute firewall-rules create fw-allow-health-check \
    --network=hybrid-network-lb \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --target-tags=allow-health-check \
    --rules=tcp:80

7. 建立 NEG 與後端服務的關聯

將 on-prem-neg-1 NEG 新增至這個後端服務

透過 Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-1 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

將 on-prem-neg-2 NEG 新增至這個後端服務

透過 Cloud Shell

gcloud compute backend-services add-backend on-prem-backend-service \
    --global \
    --network-endpoint-group on-prem-neg-2 \
    --network-endpoint-group-zone us-west1-a \
    --balancing-mode RATE \
    --max-rate-per-endpoint 5

保留用於存取網路端點的 IPv4 靜態 IP 位址

透過 Cloud Shell

gcloud compute addresses create hybrid-lb-ip --project=$projectid --global

我們完成了 CLI 設定讓我們透過 Cloud 控制台完成設定。

8. 建立外部 HTTP 負載平衡器,連結後端服務

從 Cloud 控制台前往「Load Balancing」,然後選取「建立負載平衡器」

找出 HTTP(S) 負載平衡,然後點選「開始設定」

70ccd168957e89d9.png

選取「從網際網路到我的 VM」請參考下方的螢幕截圖,瞭解如何公開 VM 存取權

a55cd31dbeadfecc.png

提供「xlb」做為負載平衡器的名稱,然後選取先前建立的後端服務「on-prem-backend-service」然後「確定」根據您提供的螢幕截圖

f1589df43bf9e3e8.png

選取前端設定,更新名稱「xlb-fe」然後選取先前建立的靜態 IPv4 位址,請務必以鏡像方式顯示螢幕截圖 b47cd48c7c1ccfc3.png

選取「檢查並完成」並選取「建立」

bfa39f7dc3ad91e1.png

後端健康狀態驗證

透過 Cloud 控制台確保後端「xlb」健康狀態良好,根據提供的螢幕截圖顯示綠色

131bbfc955d6166c.png

9. 驗證 NEG 可透過網際網路連上

請回想一下,建立負載平衡器時使用的外部靜態 IP 位址,現在是網路端點的前端 IP。在執行最終測試之前,先驗證 IP 位址。

透過 Cloud Shell

gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:

輸出內容 (IP 位址不同)

Cloud Shell 的輸出內容

$ gcloud compute forwarding-rules describe xlb-fe --global | grep -i IPAddress:
IPAddress: 34.96.103.132

只要使用全域負載平衡器前端 IP 位址,即可存取網路端點後端。請注意,在程式碼研究室中,端點是 GCE 執行個體,不過您可以搭配內部部署端點使用。

從「本機工作站」啟動終端機,並執行 curl 對負載平衡器 IP 位址執行 curl 指令

從工作站對前端 IP 位址執行 curl 指令。請觀察 200 點,並且查看包含否定執行個體的名稱和區域的網頁詳細資料。

myworkstation$ curl -v 34.96.103.132

* Trying 34.96.103.132...

* TCP_NODELAY set

* Connected to 34.96.103.132 (34.96.103.132) port 80 (#0)

> GET / HTTP/1.1

> Host: 34.96.103.132

> User-Agent: curl/7.64.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Tue, 10 Aug 2021 01:21:54 GMT

< Server: Apache/2.4.25 (Debian)

< Last-Modified: Tue, 10 Aug 2021 00:35:41 GMT

< ETag: "24-5c929ae7384f4"

< Accept-Ranges: bytes

< Content-Length: 36

< Content-Type: text/html

< Via: 1.1 google

<

Page on on-prem-neg-2 in us-west1-a

* Connection #0 to host 34.96.103.132 left intact

* Closing connection 0

恭喜!您已成功部署具備 NEG 的 L7 混合型負載平衡器

恭喜您完成本程式碼研究室!

涵蓋內容

  • 建立自訂虛擬私有雲
  • 建立兩個要做為網路端點群組 (NEG) 的虛擬機器 (VM)
  • 建立混合式負載平衡器、後端服務和相關聯的健康狀態檢查
  • 建立允許存取負載平衡器的防火牆規則
  • 驗證網路端點群組可連性

10. 清除步驟

在 Cloud 控制台 UI 中,找出並勾選「xlb」並選取「透過網路服務刪除」→「負載平衡」。選取後,勾選「on-prem-backend Service」&amp;‘on-premise-health-check&#39;然後選取「刪除」

53d7463fe354fe66.png

在 Cloud 控制台的 UI 中,依序前往「Compute Engine」→「網路端點群組」。選取後,勾選「on-prem-neg-1」&amp;‘on-prem-neg-2&#39;然後選取「刪除」

4d8f04264b44d03c.png

透過 Cloud Shell 刪除研究室元件

gcloud compute routers nats delete cloudnat --router=crnat --region us-west1 --quiet

gcloud compute routers delete crnat  --region us-west1 --quiet

gcloud compute instances delete on-prem-neg-1 --zone=us-west1-a --quiet

gcloud compute instances delete on-prem-neg-2 --zone=us-west1-a --quiet

gcloud compute firewall-rules delete fw-allow-health-check --quiet

gcloud compute networks subnets delete network-endpoint-group-subnet --region=us-west1 --quiet

gcloud compute networks delete hybrid-network-lb --quiet

gcloud compute addresses delete hybrid-lb-ip --global --quiet