本教學課程說明如何使用外部應用程式負載平衡器,將流量分配給在不同 地區的 Compute Engine VM 上執行的 Microsoft Internet Information Services (IIS) 網路伺服器。
目標
本教學課程將說明如何為網站 www.example.com
負載平衡流量,並確保:
- 傳入的要求會轉送至最近的區域。
- 如果執行個體發生故障或達到容量上限,負載平衡器會將要求轉送至位於相同或不同地區的其他回應執行個體。
此情況的設定會使用外部應用程式負載平衡器,透過單一全域 IP 位址接收要求。這個 IP 位址可根據連線類型 (HTTP 或 HTTPS) 將每個傳入要求轉送至對應的路徑。對於 HTTPS 要求,負載平衡器會在傳送要求的用戶端和負載平衡器之間實作 SSL/TLS 加密。
下圖顯示負載平衡器架構:
請注意,為達到最佳配置,負載平衡器包含多個元件。如需各個元件的功能說明,請參閱 外部應用程式負載平衡器總覽。
本教學課程將說明如何完成下列工作以達成目標:
- 設定後端執行個體。
- 建立並設定負載平衡服務。
- 將流量傳送至後端。
- 限制後端存取權。
- 模擬服務中斷情形。
費用
在本文件中,您會使用 Google Cloud的下列計費元件:
- Compute Engine virtual machine (VM) instances
- Compute Engine persistent disks
- Optional: Google-managed SSL certificate
- Windows Server 2016 machine images
您可以使用 Pricing Calculator 根據預測用量產生預估費用。
完成本文件所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱「清除所用資源」。
事前準備
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- 安裝遠端桌面通訊協定 (RDP) 用戶端。詳情請參閱 Microsoft 遠端桌面用戶端。如果您已安裝遠端桌面協定用戶端,可以略過這項工作。
- 決定要為資源配置的區域和區域。架構圖顯示在美國和歐盟地區的不同可用區中部署的資源。這項資訊僅供參考。您可以在任何所選區域/可用區部署資源。
- 選用:閱讀並瞭解外部應用程式負載平衡器總覽。
設定後端執行個體
在本節中,您將在不同區域中建立兩個後端服務。每個後端服務都包含兩個後端執行個體,每個執行個體都會在 Windows Server 2016 上執行 Microsoft IIS 網路伺服器。為避免手動設定每部伺服器,請從一個伺服器執行個體建立磁碟映像檔,然後使用此映像檔建立其他伺服器執行個體。
建立及設定 Compute Engine 執行個體
如要建立要用來做為來源映像檔的執行個體,請按照下列步驟操作:
請在 Google Cloud Marketplace 中,在您選擇的區域中,透過 Compute Engine 啟動執行 Microsoft IIS 的 Windows Server 2016 執行個體,並設定防火牆規則,允許外部 HTTP、HTTPS 和 RDP 流量傳送至來源映像檔執行個體:
前往 Google Cloud 控制台的「ASP.NET Framework」 Cloud Marketplace 頁面。
按一下「啟動」。
在「Deployment name」欄位中輸入「src-img」。
在「Zone」欄位中,選取要部署映像檔的區域。
在「Windows Server OS Version」欄位中,選取「2016」。
在「Networking - Firewall」部分中,只選取下列選項:
- 允許 HTTP 流量
- 允許 HTTPS 流量
- 允許 RDP 流量
接受服務條款,然後按一下「部署」。
等待 Compute Engine 執行個體建立完成。
設定來源映像檔執行個體
如要設定新的來源映像檔執行個體,請在來源映像檔執行個體上建立新的 Windows 使用者,並建立 RDP 連線:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下來源映像檔執行個體的名稱 (
src-img
)。按一下「設定 Windows 密碼」。
在 [Set new Windows password] (設定新的 Windows 密碼) 對話方塊中,新增您的使用者名稱,然後按一下 [Set] (設定),在執行個體上建立使用者帳戶。
複製提供的密碼並關閉對話方塊。
按一下「RDP」下拉式選單,然後選取「Download the RDP file」選項,即可下載執行個體的 RDP 檔案。使用此檔案即可透過 RDP 用戶端連線至執行個體。詳情請參閱 Microsoft 遠端桌面用戶端。
在您使用來源映像檔執行個體建立 RDP 連線後,請在 IIS 預設網頁目錄中新增預設首頁:
在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。
在預設 IIS 網路目錄
C:\inetpub\wwwroot
中建立新的首頁:Echo '<!doctype html><html><body><h1>Hello World!</h1></body></html>' > C:\inetpub\wwwroot\index.html
確認來源映像檔執行個體可提供內容
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下執行個體的外部 IP 位址,確認執行個體是否提供您先前建立的首頁。
從來源映像檔執行個體建立可重複使用的 Windows Server 2016 映像檔
確認您的來源映像檔執行個體已正確設定且能提供內容,透過執行個體的根永久磁碟建立可重複使用的磁碟映像檔:
- 在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。
執行下列指令,讓您的系統進行複製的準備作業:
GCESysprep
GCESysprep
作業完成後,系統會自動中斷您的 RDP 工作階段連線。在本機上,執行以下指令以刪除來源執行個體,而保留其根永久磁碟:
gcloud compute instances delete src-img \ --keep-disks=boot \ --zone=INSTANCE_ZONE
將
INSTANCE_ZONE
替換為來源執行個體的區域。刪除執行個體之後,透過您保留的根永久磁碟來建立新的映像檔:
gcloud compute images create win-be-img \ --source-disk=src-img \ --source-disk-zone=IMAGE_ZONE
將
IMAGE_ZONE
替換為您要建立來源圖片的區域。
使用您的來源映像檔建立執行個體範本
使用已設定 Windows 伺服器的磁碟映像檔,做為執行個體範本的來源映像檔。稍後,您將設定兩個代管執行個體群組,以便為新執行個體使用這個範本。
在本機上,執行以下指令以建立執行個體範本,使用 win-be-img
做為來源映像檔,並使用 rdp-tag
和 www-tag
做為執行個體標記:
gcloud compute instance-templates create win-be-tmpl \ --tags=rdp-tag,www-tag \ --image=win-be-img
為每個地區建立代管執行個體群組
在每個地區中建立代管執行個體群組。建立各個執行個體群組後,群組會根據先前定義的執行個體範本,自動填入兩個相同的執行個體。稍後,您會設定負載平衡器,將這些執行個體群組視為後端目標。
如何建立代管執行個體群組:
在本機上,執行以下指令,即可在您建立映像檔的區域中建立新的代管執行個體群組,並自動納入兩個相同的執行個體:
gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_1 \ --base-instance-name=BASE_INSTANCE_NAME_1 \ --size=2 \ --zone=ZONE_1 \ --template=win-be-tmpl
更改下列內容:
MANAGED_INSTANCE_GROUP_NAME_1
:受管理的執行個體名稱BASE_INSTANCE_NAME_1
:基礎執行個體的名稱ZONE_1
:要部署代管執行個體的可用區
在第二個可用區中建立代管執行個體群組:
gcloud compute instance-groups managed create MANAGED_INSTANCE_GROUP_NAME_2 \ --base-instance-name=BASE_INSTANCE_NAME_2 \ --size=2 \ --zone=ZONE_2 \ --template=win-be-tmpl
更改下列內容:
MANAGED_INSTANCE_GROUP_NAME_2
:受管理的執行個體名稱BASE_INSTANCE_NAME_2
:基礎執行個體的名稱ZONE_2
:要部署代管執行個體的可用區
確認您的後端執行個體正在執行
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下每個後端的外部 IP 位址,確認後端是否正在提供您先前建立的首頁。
建立及設定負載平衡服務
Compute Engine 負載平衡服務包含多個元件。在本節中,您將建立這些元件,並且把元件串連在一起。
在本機上,執行下列指令以建立新的健康狀態檢查。負載平衡器會使用這項檢查,檢查後端執行個體的回應速度:
gcloud compute http-health-checks create basic-check
建立後端服務:
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --protocol=HTTP \ --http-health-checks=basic-check \ --global
將
BACKEND_SERVICE_NAME
替換為後端服務的名稱。將執行個體群組新增為後端服務的後端目標:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=MANAGED_INSTANCE_GROUP_NAME_1 \ --instance-group-zone=ZONE_1 gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=MANAGED_INSTANCE_GROUP_NAME_2 \ --instance-group-zone=ZONE_2
建立預設網址對應,將所有連入要求導向您的所有執行個體:
gcloud compute url-maps create lb-map \ --default-service=BACKEND_SERVICE_NAME
建立 SSL 憑證來源。您的負載平衡器會使用此資源對流量進行加密及解密。
如果您已擁有來自憑證授權單位的私密金鑰和 SSL 憑證,您可以執行以下指令使用上述內容來建立新的
SSLCertificate
資源。否則,您可以建立並使用Google 代管的 SSL 憑證或自行簽署的憑證來進行測試。詳情請參閱「SSL 憑證」。執行下列指令來建立 SSL 憑證資源:
gcloud compute ssl-certificates create www-cert \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
更改下列內容:
CRT_FILE_PATH
:憑證的本機檔案路徑KEY_FILE_PATH
:私密金鑰的檔案路徑
建立目標 HTTP 和 HTTPS Proxy,將要求轉送至您的網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡的 SSL 憑證,因此您還可以在此步驟中載入憑證:
gcloud compute target-http-proxies create http-lb-proxy \ --url-map=lb-map gcloud compute target-https-proxies create https-lb-proxy \ --url-map lb-map \ --ssl-certificate SSL_CERT
請根據下列資訊替換 SSL_CERT:
- 如果您已使用 SSL 憑證和私密金鑰建立 SSLCertificate 資源,請將
SSL_CERT
替換為 www-cert。 - 如果您使用的是 Google 代管的或自行簽署的 SSL 憑證,請將
SSL_CERT
替換為憑證名稱。
- 如果您已使用 SSL 憑證和私密金鑰建立 SSLCertificate 資源,請將
為了讓負載平衡器穩定地接收流量,您必須為負載平衡器的通用轉送規則分配全域靜態 IP 位址。
如要建立全域靜態 IP 位址資源,請執行下列指令:
gcloud compute addresses create lb-ip \ --global \ --network-tier=PREMIUM
請記下 IP 位址。
建立兩個通用轉送規則來處理傳入的 HTTP 和 HTTPS 要求。每個轉送規則都會根據指定的 IP 位址、IP 通訊協定以及通訊埠,將流量傳送至您建立的其中一個目標 Proxy。
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
load-balancing-scheme=EXTERNAL_MANAGED
。這項設定提供進階流量管理功能。 - 如果是傳統版應用程式負載平衡器,請使用
load-balancing-scheme=EXTERNAL
。
gcloud compute forwarding-rules create http-fwd-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ip \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80 gcloud compute forwarding-rules create https-fwd-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ip \ --global \ --target-https-proxy=https-lb-proxy \ --ports=443
-
如為全域外部應用程式負載平衡器,請使用 gcloud CLI 指令搭配
在建立通用轉送規則後,您的設定可能需要幾分鐘才會傳播。如要查看傳播作業的進度,您可以監控Google Cloud console 中的設定,也可以在本機電腦上執行下列指令:
gcloud compute backend-services get-health BACKEND_SERVICE_NAME
將流量傳送到後端
您已設定負載平衡服務,可以開始向轉送規則傳送流量,並觀察流量是否分散到不同的執行個體。
將流量傳送至後端,如下所示:
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
選取「前端」分頁標籤。
如要查看預設首頁,請按一下「Address」欄中的 IP 位址。
限制後端的存取權
確認一切正常運作後,請修改防火牆規則,讓 HTTP 或 HTTPS 流量只能來自負載平衡服務:
在 Google Cloud 控制台中,前往「Firewall」頁面。
按一下允許外部存取通訊埠
tcp:80
的防火牆規則名稱。點選「編輯」即可編輯防火牆規則。
在「Source IPv4 ranges」欄位中,移除值
0.0.0.0/0
,然後輸入 130.211.0.0/22。這會將防火牆規則的允許來源 IP 限制在130.211.0.0/22
範圍內,也就是 HTTPS 負載平衡健康狀態檢查 IP 範圍。按一下 [儲存]。
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
按一下每個執行個體的外部 IP 位址,確認該執行個體已無法存取。
模擬服務中斷
如要查看負載如何在回應式執行個體之間平衡,您可以模擬區域中一或多個執行個體的服務中斷情形。
如何阻止執行個體接收其他要求:
- 建立 RDP 連線到執行個體。
- 在執行個體上,以系統管理員身分開啟 PowerShell。
執行下列指令,在執行個體上建立新的防火牆規則。此指令會封鎖來自健康狀態檢查工具的健康狀態檢查流量,並阻止從負載平衡器到執行個體的所有新 HTTP 連線:
netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
在本機電腦上,執行以下指令以確認執行個體現在會回報
UNHEALTHY
狀態:gcloud compute backend-services get-health BACKEND_SERVICE_NAME
在執行個體開始回報
UNHEALTHY
狀態後,傳送要求至負載平衡器。只有回應式執行個體才會回應。完成模擬中斷後,您可以透過刪除防火牆規則來恢復執行個體的連線。在無回應的執行個體上,以管理員身分開啟 PowerShell 之後,請執行以下指令來刪除規則:
netsh advfirewall firewall delete rule name="Outage Test"
清除所用資源
完成教學課程後,您可以清除所建立的資源,這樣資源就不會占用配額並產生費用。下列各節將說明如何刪除或關閉這些資源。
刪除專案
如要避免付費,最簡單的方法就是刪除您為了本教學課程而建立的專案。
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
刪除個別資源
您必須個別刪除為專案建立的所有資源 (映像檔、執行個體範本、執行個體群組、健康狀態檢查、後端服務、網址對應、HTTP Proxy、位址、轉送規則)。您必須執行下列指令,才能刪除 VM 執行個體。
在本機上執行下列指令,刪除為教學課程建立的資源:
- 刪除 HTTP/S 轉送規則:
gcloud compute forwarding-rules delete https-fwd-rule --global
gcloud compute forwarding-rules delete http-fwd-rule --global
- 刪除全域靜態 IP 位址:
gcloud compute addresses delete lb-ip --global
- 刪除 HTTP/S Proxy:
gcloud compute target-https-proxies delete https-lb-proxy
gcloud compute target-http-proxies delete http-lb-proxy
- 刪除 SSL 憑證:
gcloud compute ssl-certificates delete SSL_CERT
- 刪除網址對應:
gcloud compute url-maps delete lb-map
- 刪除後端服務:
gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
- 刪除 HTTP 健康狀態檢查:
gcloud compute http-health-checks delete basic-check
- 刪除代管執行個體群組:
gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_1 --zone=ZONE_1
gcloud compute instance-groups managed delete MANAGED_INSTANCE_GROUP_NAME_2 --zone=ZONE_2
- 刪除執行個體範本:
gcloud compute instance-templates delete win-be-tmpl
-
刪除圖片:
gcloud compute images delete IMAGE_NAME
-
刪除磁碟:
gcloud compute disks delete DISK_NAME
後續步驟
- 完成部署負載平衡 IIS 網路伺服器教學課程。
- 請參閱Google Cloud 良好架構架構的最佳做法。
- 探索 Google Cloud 的參考架構、圖表和最佳做法。歡迎瀏覽我們的雲端架構中心。