為 Microsoft IIS 網路伺服器設定跨區域負載平衡


本教學課程說明如何使用外部應用程式負載平衡器,將流量分配給在不同 區域中佈建的 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

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  7. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Compute Engine, BigQuery, and Cloud Firestore APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  13. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  14. 或者,您也可以在 Google Cloud console 上使用 Cloud Shell 與 Google Cloud互動,這樣就不必安裝 Google Cloud CLI。
  15. 安裝遠端桌面通訊協定 (RDP) 用戶端。詳情請參閱「Microsoft 遠端桌面用戶端」。如果您已安裝遠端桌面協定用戶端,則可略過這項工作。
  16. 決定要佈建資源的可用區和區域。 架構圖顯示部署在美國和歐盟區域不同可用區的資源。這僅供參考。您可以在所選的任何區域/可用區部署資源。
  17. 選用:閱讀並瞭解外部應用程式負載平衡器總覽
  18. 設定後端執行個體

    在本節中,您將在不同區域建立兩個後端服務。每個後端服務都包含兩個後端執行個體,每個執行個體都在 Windows Server 2016 上執行 Microsoft IIS 網路伺服器。為避免手動設定每部伺服器,請從一部伺服器執行個體建立磁碟映像檔,然後使用這個映像檔建立其他伺服器執行個體。

    建立及設定 Compute Engine 執行個體

    如要建立做為來源映像檔的執行個體,請按照下列步驟操作:

    從 Google Cloud Marketplace 啟動 Windows Server 2016 執行個體,在您選擇的區域中,於 Compute Engine 上執行 Microsoft IIS,並設定防火牆規則,允許外部 HTTP、HTTPS 和 RDP 流量傳送至來源映像檔執行個體:

    1. 前往 Google Cloud 控制台的「ASP.NET Framework」Cloud Marketplace 頁面。

      前往 Cloud Marketplace

    2. 按一下「啟動」

    3. 在「Deployment name」(部署作業名稱) 欄位中,輸入 src-img

    4. 在「Zone」(區域) 欄位中,選取要部署映像檔的區域。

    5. 在「Windows Server OS Version」(Windows Server 作業系統版本) 欄位中,選取「2016」

    6. 在「Networking - Firewall」部分中,只選取下列選項:

      • 允許 HTTP 流量
      • 允許 HTTPS 流量
      • 允許 RDP 流量

    7. 接受服務條款,然後按一下「部署」

    8. 等待 Compute Engine 執行個體建立完成。

    設定來源映像檔執行個體

    如要設定新的來源映像檔執行個體,請在來源映像檔執行個體上建立新的 Windows 使用者,並建立 RDP 連線:

    1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

      前往 VM 執行個體

    2. 按一下來源映像檔執行個體的名稱 (src-img)。

    3. 按一下「設定 Windows 密碼」

    4. 在 [Set new Windows password] (設定新的 Windows 密碼) 對話方塊中,新增您的使用者名稱,然後按一下 [Set] (設定),在執行個體上建立使用者帳戶。

    5. 複製提供的密碼並關閉對話方塊。

    6. 按一下「RDP」下拉式選單,然後選取「Download the RDP file」(下載遠端桌面協定檔案) 選項,即可下載執行個體的遠端桌面協定檔案。使用此檔案即可透過遠端桌面通訊協定用戶端連線至執行個體。詳情請參閱「Microsoft 遠端桌面用戶端」。

    使用來源映像檔執行個體建立 RDP 連線後,請在 IIS 預設網頁目錄中新增預設首頁:

    1. 在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。

    2. 在預設 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 執行個體) 頁面

    前往 VM 執行個體

    按一下執行個體的外部 IP 位址,確認該位址提供您先前建立的首頁。

    從來源映像檔執行個體建立可重複使用的 Windows Server 2016 映像檔

    確認您的來源映像檔執行個體已正確設定且能提供內容,透過執行個體的根永久磁碟建立可重複使用的磁碟映像檔:

    1. 在您的來源映像檔執行個體上,以管理員身分開啟 PowerShell。
    2. 執行下列指令,讓您的系統進行複製的準備作業:

      GCESysprep
      

      GCESysprep 操作完成後,系統會自動中斷您的 RDP 工作階段連線。

    3. 在本機上執行下列指令,刪除來源執行個體,但保留其根永久磁碟:

      gcloud compute instances delete src-img \
         --keep-disks=boot \
         --zone=INSTANCE_ZONE
      

      INSTANCE_ZONE 替換為來源執行個體的區域。

    4. 刪除執行個體之後,透過您保留的根永久磁碟來建立新的映像檔:

      gcloud compute images create win-be-img \
         --source-disk=src-img \
         --source-disk-zone=IMAGE_ZONE
      

      IMAGE_ZONE 替換為您要在其中建立來源映像檔的區域。

    使用您的來源映像檔建立執行個體範本

    使用已設定 Windows 伺服器的磁碟映像檔,做為執行個體範本的來源映像檔。稍後,您會設定兩個代管執行個體群組,讓新執行個體使用這個範本。

    在本機上執行下列指令,建立以 win-be-img 做為來源映像檔,並以 rdp-tagwww-tag 做為執行個體標記的執行個體範本:

    gcloud compute instance-templates create win-be-tmpl \
        --tags=rdp-tag,www-tag \
        --image=win-be-img
    

    為每個地區建立代管執行個體群組

    在每個地區中,建立代管執行個體群組。建立每個執行個體群組後,系統會根據您先前定義的執行個體範本,自動填入兩個相同的執行個體。稍後,您將設定負載平衡器,將這些執行個體群組視為後端目標。

    如何建立代管執行個體群組:

    1. 在本機上執行下列指令,在您建立映像檔的區域中建立新的代管執行個體群組,並自動填入兩個相同的執行個體:

      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:要部署代管執行個體的可用區
    2. 在第二個可用區中建立代管執行個體群組:

      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:要部署代管執行個體的可用區

    確認您的後端執行個體正在執行

    1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

      前往 VM 執行個體

    2. 按一下每個後端的外部 IP 位址,確認後端是否提供您先前建立的首頁。

    建立及設定負載平衡服務

    Compute Engine 負載平衡服務包含多個元件。在本節中,您將建立這些元件,並且把元件串連在一起。

    1. 在本機上,執行下列指令以建立新的健康狀態檢查。負載平衡器會使用這項檢查來確認後端執行個體的回應速度:

      gcloud compute http-health-checks create basic-check
      
    2. 建立後端服務

      gcloud compute backend-services create BACKEND_SERVICE_NAME \
        --protocol=HTTP \
        --http-health-checks=basic-check \
        --global
      

      BACKEND_SERVICE_NAME 替換為後端服務的名稱。

    3. 將執行個體群組新增為後端服務的後端目標:

      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
      
    4. 建立預設網址對應,將所有連入要求導向您的所有執行個體:

      gcloud compute url-maps create lb-map \
         --default-service=BACKEND_SERVICE_NAME
      
    5. 建立 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:私密金鑰的檔案路徑
    6. 建立目標 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 替換成憑證名稱。
    7. 為了讓負載平衡器穩定地接收流量,您必須為負載平衡器的通用轉送規則分配全域靜態 IP 位址。

      如要建立全域靜態 IP 位址資源,請執行下列指令:

      gcloud compute addresses create lb-ip \
         --global \
         --network-tier=PREMIUM
      

      請記下 IP 位址。

    8. 建立兩個通用轉送規則來處理傳入的 HTTP 和 HTTPS 要求。每個轉送規則都會根據指定的 IP 位址、IP 通訊協定以及通訊埠,將流量傳送到您建立的其中一個目標 Proxy。

      • 如果是全域外部應用程式負載平衡器,請使用 load-balancing-scheme=EXTERNAL_MANAGED 的 gcloud CLI 指令。這項設定提供進階流量管理功能
      • 如果是傳統版應用程式負載平衡器,請使用 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
      

    在建立通用轉送規則後,您的設定可能需要幾分鐘才會傳播。如要查看傳播進度,您可以監控Google Cloud console 中的設定,或在本機執行下列指令:

    gcloud compute backend-services get-health BACKEND_SERVICE_NAME
    

    將流量傳送到後端

    您已設定負載平衡服務,可以開始向轉送規則傳送流量,並觀察流量是否分散到不同的執行個體。

    將流量傳送至後端,方法如下:

    1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

      前往「Load balancing」(負載平衡)

    2. 選取「前端」分頁標籤。

    3. 如要查看預設首頁,請按一下「Address」(地址) 欄中的 IP 位址。

    限制後端的存取權

    確認一切正常運作後,修改防火牆規則,讓 HTTP 或 HTTPS 流量只能來自您的負載平衡服務:

    1. 前往 Google Cloud 控制台的「Firewall」頁面。

      前往「Firewall」(防火牆) 頁面

    2. 按一下允許外部存取通訊埠 tcp:80 的防火牆規則名稱。

    3. 按一下「編輯」,編輯防火牆規則。

    4. 在「Source IPv4 ranges」(來源 IPv4 範圍) 欄位中,移除 0.0.0.0/0 值,然後輸入 130.211.0.0/22。這樣做會將防火牆規則允許的來源 IP 限制在 130.211.0.0/22 範圍內,也就是 HTTPS 負載平衡健康狀態檢查 IP 範圍。

    5. 按一下 [儲存]

    6. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面

      前往 VM 執行個體

    7. 按一下每個執行個體的外部 IP 位址,確認該執行個體已無法存取。

    模擬服務中斷

    如要瞭解負載在回應式執行個體間的平衡情形,您可以模擬區域中一或多個執行個體發生中斷。

    如何阻止執行個體接收其他要求:

    1. 建立 RDP 連線到執行個體。
    2. 在執行個體上,以系統管理員身分開啟 PowerShell。
    3. 執行下列指令,在執行個體上建立新的防火牆規則。此指令會封鎖來自健康狀態檢查工具的健康狀態檢查流量,並阻止從負載平衡器到執行個體的所有新 HTTP 連線:

      netsh advfirewall firewall add rule name="Outage Test" protocol=tcp dir=in localport=80 action=block remoteip=130.211.0.0/22
      
    4. 在本機電腦上,執行以下指令以確認執行個體現在會回報 UNHEALTHY 狀態:

      gcloud compute backend-services get-health BACKEND_SERVICE_NAME
      
    5. 在執行個體開始回報 UNHEALTHY 狀態後,傳送要求至負載平衡器。只有回應式執行個體必須回應。

    6. 完成模擬中斷後,您可以透過刪除防火牆規則來恢復執行個體的連線。在沒有回應的執行個體上,以管理員身分開啟 PowerShell 之後,請執行以下指令來刪除規則:

      netsh advfirewall firewall delete rule name="Outage Test"
      

    清除所用資源

    完成教學課程後,您可以清除所建立的資源,這樣資源就不會繼續使用配額,也不會產生費用。下列各節將說明如何刪除或關閉這些資源。

    刪除專案

    如要避免付費,最簡單的方法就是刪除您為了本教學課程而建立的專案。

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    刪除個別資源

    您必須個別刪除為專案建立的所有資源 (映像檔、執行個體範本、執行個體群組、健康狀態檢查、後端服務、網址對應、HTTP Proxy、位址、轉送規則)。您必須先執行下列指令,才能刪除 VM 執行個體。

    在本機電腦上執行下列指令,刪除為本教學課程建立的資源:

    1. 刪除 HTTP/S 轉送規則:
      gcloud compute forwarding-rules delete https-fwd-rule --global
      
      gcloud compute forwarding-rules delete http-fwd-rule --global
      
    2. 刪除全域靜態 IP 位址:
      gcloud compute addresses delete lb-ip --global
      
    3. 刪除 HTTP/S Proxy:
      gcloud compute target-https-proxies delete https-lb-proxy
      
      gcloud compute target-http-proxies delete http-lb-proxy
      
    4. 刪除 SSL 憑證:
      gcloud compute ssl-certificates delete SSL_CERT
      
    5. 刪除網址對應:
      gcloud compute url-maps delete lb-map
      
    6. 刪除後端服務:
      gcloud compute backend-services delete BACKEND_SERVICE_NAME --global
      
    7. 刪除 HTTP 健康狀態檢查:
      gcloud compute http-health-checks delete basic-check
      
    8. 刪除代管執行個體群組:
      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
      
    9. 刪除執行個體範本:
      gcloud compute instance-templates delete win-be-tmpl
      
    10. In the Google Cloud console, go to the Images page.

      Go to Images

    11. Select the checkbox for the image that you want to delete.
    12. To delete the image, click Delete.
    13. In the Google Cloud console, go to the Disks page.

      Go to Disks

    14. Select the checkbox for the disk that you want to delete.
    15. To delete the disk, click Delete.

    後續步驟