建立 HTTPS 負載平衡器

本指南會說明如何建立 Google Cloud Platform (GCP) HTTPS 負載平衡器,讓此負載平衡器可依據要求網址路徑 (以內容為基礎的負載平衡) 挑選後端服務,並且將要求轉送至靠近用戶端的後端 (跨地區負載平衡)。

在開始之前,請確定您嫻熟 HTTP(S) 負載平衡的整體概念。

總覽

本指南提供建立負載平衡器的操作說明。您可從中學習如何讓負載平衡器依據要求網址的路徑引導流量,並平衡多個地區間的流量。首先建立四個 Compute Engine 執行個體,二個位於美國地區 (us-central1-b 區域),二個位於歐盟地區 (eu-west1-b 區域)。接下來建立負載平衡器,將流量轉送至上述執行個體。

完成操作說明的步驟後,負載平衡器的設定會如下所示:

  • 流量若包含開頭為 /video 的網址路徑,會轉送至一個後端服務。
  • 流量包含的網址路徑若不符合此模式,會轉送至其他後端服務。

在此教學文件中,需建立如下圖所示的設定:

以內容為基礎的 HTTPS 負載平衡,以及跨地區的 HTTPS 負載平衡 (按一下可放大)
以內容為基礎的 HTTPS 負載平衡,以及跨地區的 HTTPS 負載平衡 (按一下可放大)

圖表中的事件順序如下:

  1. 用戶端存取 https://www.example.com/video/concert 網址,傳送內容要求至轉送規則所定義的外部 IP 位址。該要求可以使用 IPv4 或 IPv6,兩種通訊協定皆有適用的轉送規則。
  2. 轉送規則將要求導向目標 HTTPS Proxy。
  3. 目標 Proxy 使用網址對應中設定的規則,判斷哪個後端服務會收到要求。包含 /video 的要求 (例如 https://www.example.com/video/concert) 會傳送到 video-backend-service。其他任何網址路徑都會傳送到預設服務 web-backend-service
  4. 負載平衡器依據要求的負載以及和用戶端的距離,判斷應由哪個後端服務的執行個體群組處理要求,並將要求導向該群組中的執行個體。
  5. 執行個體處理每個使用者的內容要求。video 執行個體處理影片內容,而 www 執行個體則處理所有其他內容。

事前準備

這些操作說明需要有專案才能進行。如果您還沒有專案,請現在建立一個。這些操作說明會引導您建立自訂模式的私人虛擬雲端網路。您也必須建立自訂的防火牆規則,才能讓流量連上執行個體。

如果您希望透過指令列操作,請先安裝 gcloud 指令列工具。如需該工具的概念與安裝資訊,請參閱 gcloud 概覽

如果您先前沒有執行過 gcloud 指令列工具,請先執行 gcloud init,以初始化您的 gcloud 目錄。

在此範例中,負載平衡器會接受用戶端的 HTTPS 要求,並將這些要求變成 HTTP 轉送至後端。您也可以將負載平衡器設為接受 HTTP 要求,並且在將要求轉送成至後端時使用 HTTPS。

權限

為了完成本指南中的步驟,您必須具有在專案中建立 Compute Engine 執行個體的權限。您必須具有專案擁有者或編輯者角色,或者具有下列 Compute Engine IAM 角色

工作 必要角色
建立執行個體 執行個體管理員
新增與移除防火牆規則 安全管理員
建立負載平衡器元件 網路管理員
建立專案 (選用) 專案建立者

設定

選用:建立新專案

建議具備 resourcemanager.projects.create 權限的使用者先建立新專案,再繼續進行本教學接下來的步驟。如此可以簡化指南最後清除所用資源的工作。

設定網路與子網路

在此範例中,請使用下列虛擬私人雲端網路、地區與子網路:

  • 網路:網路為名為 lb-network自訂模式虛擬私人雲端網路

  • 位於兩個不同地區的子網路:

    • us-subnet 使用 10.1.10.0/24 做為其主要 IP 範圍,位於 us-central1 地區
    • eu-subnet 使用 10.1.11.0/24 做為其主要 IP 範圍,位於 europe-west1 地區

如要建立範例網路與子網路,請依照下列步驟操作:

Console


  1. 前往 Google Cloud Platform Console 的「VPC networks」(VPC 網路) 頁面。
    前往「VPC networks」(VPC 網路) 頁面
  2. 按一下 [Create VPC network] (建立 VPC 網路)
  3. 在「Name」(名稱) 欄位中輸入 lb-network
  4. 在「Subnets」(子網路) 區段,建立第一個子網路:
    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • 「Name」(名稱)us-subnet
      • 「Region」(地區):us-central1
      • 「IP address range」(IP 位址範圍)10.1.10.0/24
      • 按一下 [Done] (完成)
  5. 請繼續在「Subnets」(子網路) 區段中建立「Add subnet」(新增子網路),並建立第二個子網路:
    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • 「Name」(名稱)eu-subnet
      • 「Region」(地區):europe-west1
      • 「IP address range」(IP 位址範圍)10.1.11.0/24
      • 按一下 [Done] (完成)
  6. 按一下 [Create] (建立)。

gcloud


  1. 建立自訂虛擬私人雲端網路:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 建立 us-subnet

    gcloud compute networks subnets create us-subnet \
      --network=lb-network \
      --range=10.1.10.0/24 \
      --region=us-central1
    
  3. 建立 eu-subnet

    gcloud compute networks subnets create eu-subnet \
      --network=lb-network \
      --range=10.1.11.0/24 \
      --region=europe-west1
    

設定防火牆規則

預設拒絕輸入會封鎖後端執行個體收到的流量,包含來自負載平衡器與 GCP 健康狀態檢查系統的流量。您必須建立新的防火牆規則,才能覆寫預設規則,讓流量連上您的執行個體。

在此範例中,您會建立下列防火牆規則:

  • fw-allow-ssh:輸入規則,適用於要進行負載平衡的執行個體,可在 TCP 通訊埠 22 上允許來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍;例如,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。本範例使用目標標記 allow-ssh 來識別應該適用此規則的 VM。

  • fw-allow-health-check-and-proxy:輸入規則,適用於要進行負載平衡的執行個體,可允許來自 GCP 健康狀態檢查系統 (130.211.0.0/2235.191.0.0/16) 的流量。此範例使用目標標記 allow-hc-and-proxy 來識別應該適用此規則的執行個體。

Console


  1. 前往 Google Cloud Platform Console 的「Firewalls」(防火牆) 頁面。
    前往「Firewalls」(防火牆) 頁面
  2. 按一下 [Create firewall rule] (建立防火牆規則),建立第一個防火牆規則:
    1. 在「Name」(名稱) 欄位中輸入 fw-allow-ssh
    2. 在「Network」(網路) 下方選取 lb-network
    3. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    4. 在「Target tags」(目標標記) 欄位填入 allow-ssh
    5. 將「Source filter」(來源篩選器) 設為 IP ranges
    6. 將「Source IP ranges」(來源 IP 範圍) 設為 0.0.0.0/0
    7. 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取 [Specified protocols and ports] (指定的通訊協定與通訊埠)
    8. 勾選「tcp」旁的核取方塊,通訊埠編號請輸入 22
    9. 按一下 [Create] (建立)。
  3. 按一下 [Create firewall rule] (建立防火牆規則),建立第二個防火牆規則:
    1. 在「Name」(名稱) 欄位中輸入 fw-allow-health-check-and-proxy
    2. 在「Network」(網路) 下方選取 lb-network
    3. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)
    4. 在「Target tags」(目標標記) 欄位填入 allow-hc-and-proxy
    5. 將「Source filter」(來源篩選器) 設為 IP ranges
    6. 將「Source IP ranges」(來源 IP 範圍) 設為 130.211.0.0/2235.191.0.0/16
    7. 在「Protocols and ports」(通訊協定與通訊埠) 下方,選取 [Specified protocols and ports] (指定的通訊協定與通訊埠)
    8. 選取「tcp」旁的核取方塊,通訊埠編號請輸入 80,443
    9. 按一下 [Create] (建立)。

gcloud


  1. 建立 fw-allow-ssh 防火牆規則以允許與具有 allow-ssh 網路標記的 VM 建立 SSH 連線。若省略 source-ranges,GCP 會將規則解讀為任何來源

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  2. 建立 fw-allow-health-check-and-proxy 規則,以允許負載平衡器與 GCP 健康檢查在 TCP 通訊埠 80443 上與後端執行個體通訊:

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

執行個體設定

在此範例中,您要建立八個虛擬機器執行個體:四個用於處理影片內容,另外四個則用於處理其他所有內容。您可以使用開機指令碼安裝 Apache 網路伺服器軟體,提供不重複的首頁給每個執行個體。

Console


建立後端 VM

  1. 前往 Google Cloud Platform Console 中的「VM instances」(VM 執行個體) 頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 重複下列步驟,並使用以下的名稱、地區與子網路組合,來建立八個 VM。
    • 名稱:www-us-01、地區:us-central1、子網路:us-subnet
    • 名稱:www-us-02、地區:us-central1、子網路:us-subnet
    • 名稱:video-us-01、地區:us-central1、子網路:us-subnet
    • 名稱:video-us-02、地區:us-central1、子網路:us-subnet
    • 名稱:www-eu-01、地區:europe-west1、子網路:eu-subnet
    • 名稱:www-eu-02、地區:europe-west1、子網路:eu-subnet
    • 名稱:video-eu-01、地區:europe-west1、子網路:eu-subnet
    • 名稱:video-eu-02、地區:europe-west1、子網路:eu-subnet
  3. 按一下 [Create instance] (建立執行個體)
  4. 如步驟 2 所示,建立「Name」(名稱) 與「Region」(地區)。您可以選擇該地區中的任何區域,此範例使用的是 us-central1 中的 us-central1-b,與 europe-west1 中的 europe-west1-b
  5. 在「Boot disk」(開機磁碟) 區段中,確認所選映像檔為「Debian GNU/Linux 9 Stretch」。如有需要,請按一下 [Choose] (選擇),以變更映像檔。
  6. 按一下 [Management, security, disks, networking, sole tenancy] (管理、安全性、磁碟、網路、單獨租用),然後進行以下變更:

    • 按一下 [Networking] (網路),並新增下列網路標記allow-sshallow-hc-and-proxy
    • 按一下「Network interfaces」(網路介面) 下方的 [Edit] (編輯) 按鈕,進行下列變更,然後按一下 [Done] (完成)
      • 「Network」(網路)lb-network
      • 「Subnet」(子網路):選擇步驟 2 所示的子網路。
      • 「Primary internal IP」(主要內部 IP):臨時 (自動)
      • External IP (外部 IP):臨時
    • 按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中,複製並貼上下列指令碼內容。八個 VM 的指令碼內容皆相同:

      #! /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
      echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
      tee /etc/apache2/conf-enabled/video.conf
      systemctl restart apache2
      
  7. 按一下 [Create] (建立)。

建立執行個體群組

  1. 前往 Google Cloud Platform Console 的「Instance groups」(執行個體群組) 頁面。
    前往「Instance groups」(執行個體群組) 頁面
  2. 重複下列步驟,使用下列組合建立四個非代管的執行個體群組,每個群組都有兩個 VM:
    • 執行個體群組:ig-www-us、地區:us-central1、區域:us-central1-b、子網路:us-subnet、VM:www-us-01www-us-02
    • 執行個體群組:ig-video-us、地區:us-central1、區域:us-central1-b、子網路:us-subnet、VM:video-us-01video-us-02
    • 執行個體群組:ig-www-eu、地區:europe-west1、區域:europe-west1-b、子網路:eu-subnet、VM:www-eu-01www-eu-02
    • 執行個體群組:ig-video-eu、地區:europe-west1、區域:europe-west1-b、子網路:eu-subnet、VM:video-eu-01video-eu-02
  3. 按一下 [Create instance group] (建立執行個體群組),並選取 [New unmanaged instance group] (新增非代管的執行個體群組)。
  4. 按照步驟 2 指定的名稱設定「Name」(名稱)
  5. 在「Location」(位置) 區段中,選取 [Single-zone] (單一區域),然後依照步驟 2 的說明,選取地區與區域。
  6. 在「Network」(網路) 中輸入 lb-network
  7. 在「Subnetwork」(子網路) 中依照步驟 2 輸入子網路。
  8. 在「VM instances」(VM 執行個體) 區段,依照步驟 2 新增 VM。
  9. 按一下 [Create] (建立)。

gcloud


  1. 重複下列指令,並使用以下的名稱、地區與子網路組合,來建立八個 VM。請依照下列資訊,替換「VM_NAME」、「ZONE」與「SUBNET」

    • 名稱:www-us-01、區域:us-central1-b、子網路:us-subnet
    • 名稱:www-us-02、區域:us-central1-b、子網路:us-subnet
    • 名稱:video-us-01、區域:us-central1-b、子網路:us-subnet
    • 名稱:video-us-02、區域:us-central1-b、子網路:us-subnet
    • 名稱:www-eu-01、區域:europe-west1-b、子網路:eu-subnet
    • 名稱:www-eu-02、區域:europe-west1-b、子網路:eu-subnet
    • 名稱:video-eu-01、區域:europe-west1-b、子網路:eu-subnet
    • 名稱:video-eu-02、區域:europe-west1-b、子網路:eu-subnet
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-hc-and-proxy \
        --subnet=SUBNET \
        --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
    echo "AliasMatch /video(.*)$ /var/www/html/index.html" | \
    tee /etc/apache2/conf-enabled/video.conf
    systemctl restart apache2'
    
  2. 重複以下指令,並使用以下的名稱和區域組合,建立四個非代管的執行個體群組。請依照下列資訊,替換「INSTANCE_GROUP_NAME」(執行個體群組) 與「ZONE」(區域)

    • 執行個體群組:ig-www-us、區域:us-central1-b
    • 執行個體群組:ig-video-us、區域:us-central1-b
    • 執行個體群組:ig-www-eu、區域:europe-west1-b
    • 執行個體群組:ig-video-eu、區域:europe-west1-b
    gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME \
        --zone=ZONE
    
  3. 重複執行下列指令四次,並依照下列組合,新增兩個 VM 到各個執行個體群組。請依照下列資訊,替換「INSTANCE_GROUP_NAME」(執行個體群組名稱)、「ZONE」(區域) 與「INSTANCES」(執行個體)

    • 執行個體群組:ig-www-us、區域:us-central1-b、執行個體:www-us-01www-us-02
    • 執行個體群組:ig-video-us、區域:us-central1-b、執行個體:video-us-01video-us-02
    • 執行個體群組:ig-www-eu、區域:europe-west1-b、執行個體:www-eu-01www-eu-02
    • 執行個體群組:ig-video-eu、區域:europe-west1-b、執行個體:video-eu-01video-eu-02
    gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
        --zone=ZONE \
        --instances=INSTANCES
    

    舉例來說,新增兩個執行個體到第一個執行個體群組的指令如下:

    gcloud compute instance-groups unmanaged add-instances ig-www-us \
        --zone=us-central1-b \
        --instances=www-us-01,www-us-02
    

保留外部 IP 位址

現在已設定好執行個體並開始執行,請設定負載平衡所需的服務。在本節中,您要建立兩個通用靜態外部 IP 位址,供您的客戶使用,以連上您的負載平衡器。

Console


  1. 前往 Google Cloud Platform Console 的「External IP addresses」(外部 IP 位址) 頁面。
    前往「External IP addresses」(外部 IP 位址) 頁面
  2. 按一下 [Reserve static address] (預約靜態位址) 以預留 IPv4 位址。
  3. 將「Name」(名稱) 指定為 lb-ipv4-1
  4. 將「Network tier」(網路級別) 設為「Premium」(進階)。
  5. 將「IP version」(IP 版本) 設為「IPv4」
  6. 將「Type」(類型) 設為「Global」(通用)
  7. 按一下 [Reserve] (預約)
  8. 再按一下 [Reserve static address] (預約靜態位址) 以預留 IPv6 位址。
  9. 將「Name」(名稱) 指定為 lb-ipv6-1
  10. 將「Network tier」(網路級別) 設為「Premium」(進階)
  11. 將「IP version」(IP 版本) 設為 IPv6
  12. 確定「Type」(類型) 已設為「Global」(通用)。

    在此範例中,負載平衡器會使用進階級網路。使用標準級網路的負載平衡器會改為使用地區 IP 位址。標準層級無法使用 IPv6 位址。

  13. 按一下 [Reserve] (預約)

gcloud


gcloud compute addresses create lb-ipv4-1 \
    --ip-version=IPV4 \
    --global

請注意預留的 IPv4 位址:

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global
gcloud compute addresses create lb-ipv6-1 \
    --ip-version=IPV6 \
    --global

請注意預留的 IPv6 位址:

gcloud compute addresses describe lb-ipv6-1 \
    --format="get(address)" \
    --global

設定負載平衡資源

負載平衡器的功能,涉及到多種連線資源。在本節中,您將設定這些資源並為其建立連線。如下所示:

  • 已命名的通訊埠,負載平衡器會使用這項服務來將流量導向您的執行個體群組。
  • 健康狀態檢查,這項服務會輪詢您的執行個體,並查看其健康狀態是否良好。負載平衡器只會將流量傳送至健康狀態良好的執行個體。
  • 後端服務,可以追蹤能力、工作階段相依性與健康狀態檢查。後端服務會依據能力與執行個體健康狀態,將要求導向後端 VM 或端點。
  • 網址對應,可讓負載平衡器依據要求網址的主機與路徑,將要求導向特定的後端服務。
  • SSL 憑證資源,SSL 憑證資源含有 SSL 憑證資訊,負載平衡器在 HTTPS 用戶端與其連結後,會使用此資訊來用來終止 TLS。您可以使用多個 SSL 憑證,也就是任何代管或自行管理的 SSL 憑證組合。您必須為您使用的每個憑證建立一個 SSL 憑證資源。
  • 目標 HTTPS Proxy,負載平衡器會使用此 Proxy,建立起網址對應和 SSL 憑證與全域轉送規則之間的關聯。
  • 兩個全域轉送規則,分別用於 IPv4 和 IPv6,可保存全域外部 IP 位址資源。全域轉送規則可將傳入要求轉送至目標 Proxy。

Console


為負載平衡器命名

  1. 前往 Google Cloud Platform Console 的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 在「HTTP(S) load balancing」(HTTP(S) 負載平衡) 之下,按一下 [Start configuration] (啟動設定)
  3. 負載平衡器的名稱請輸入 web-map
  4. 將視窗保持開啟,以便繼續操作。

設定 www 執行個體的後端服務與健康狀態檢查

負載平衡器需要兩個後端服務,以及供這兩個服務使用的一項健康狀態檢查。在此範例中,負載平衡器會終止用戶端的 HTTPS 要求,並使用 HTTP 與後端通訊。為達到此目標,請指定後端通訊協定與健康狀態檢查的 HTTP。

設定 www 執行個體的後端服務

  1. 按一下 [Backend configuration] (後端設定)
  2. 在「Create or select a backend service」(建立或選取後端服務) 下拉式選單中,選取 [Create a backend service] (建立後端服務)。
  3. 將後端服務的「Name」(名稱) 設為 web-backend-service
  4. 按一下「Timeout」(逾時) 欄位旁的「Edit」(編輯) 圖示,即可編輯通訊協定。選取您的負載平衡器與後端之間要使用的通訊協定。
  5. 在「Named port」(已命名通訊埠) 欄位輸入 http
  6. 請確定Backend type」(後端類型) 已設定為「Instance groups」(執行個體群組)。
  7. 在「Backends」(後端) 下方,將「Instance group」(執行個體群組) 設為 ig-www-us
  8. 對於負載平衡器與執行個體間的流量,請將「Port numbers」(通訊埠編號) 設為 80
  9. 保留其餘欄位的預設值。
  10. 按一下「New-backend」(新增後端) 視窗底部的 [Done] (完成)。
  11. 按一下「Add backend」(新增後端),並重複上述步驟,但選取執行個體群組 ig-www-eu
  12. 將視窗保持開啟,以便繼續操作。

設定 www 執行個體的健康狀態檢查

  1. 在「Health check」(健康狀態檢查) 下方的「Backend configuration」(後端設定) 視窗中,選取 [Create a health check] (建立健康狀態檢查) 或 [Create another health check] (建立另一個健康狀態檢查)。
  2. 如要建立 HTTP 健康狀態檢查,請設定下列健康狀態檢查參數:
    • 「Name」(名稱)http-basic-check
    • 「Protocol」(通訊協定)HTTP
    • 「Port」(通訊埠)80
  3. 按一下 [Save and Continue] (儲存並繼續)
  4. 按一下 [Create] (建立)。

設定 www-video 執行個體的後端與健康狀態檢查

  1. 請重複上述步驟,但將第二個後端服務命名為 video-backend-service,並指派 video-resources-usvideo-resources-eu 執行個體群組至此後端服務。
  2. 請依照同樣的步驟建立健康狀態檢查。

設定主機與路徑規則

主機與路徑規則會設定負載平衡器的網址對應資源。

  1. 在畫面的左欄中,按一下 [Host and path rules] (主機與路徑規則)
  2. 第一列的右欄中已填入 web-backend-service,且「Hosts」(主機) 與「Paths」(路徑) 已按照預設規則 Any unmatched (default) 填妥。
  3. 確定右欄中有包含 video-backend-service 的第二列。若不存在,請按一下 [Add host and path rule] (新增主機與路徑規則),然後從右欄的下拉式選單中選取「video-backend-service」。請依照下列資訊填寫其他欄位:[...]
    1. 將「Hosts」(主機) 設定為 *
    2. 在「Paths」(路徑) 欄位中,請輸入 /video,按一下 Tab 鍵,然後輸入 /video/*,再按一下 Tab 鍵。

設定前端

您可在前端設定區段中,設定負載平衡器的多項資源,包含轉送規則與 SSL 憑證。此外,您也可以在此區段中,選取用戶端與負載平衡器間使用的通訊協定。

在此範例中,您在用戶端與負載平衡器間使用的是 HTTPS,因此您需要有一個或多個 SSL 憑證資源才能設定 Proxy。關於如何建立 SSL 憑證資源的資訊,請參閱 SSL 憑證。建議使用 Google 代管的憑證。

  1. 在「New HTTP(S) load balancer」(新增 HTTP(S) 負載平衡器) 頁面的左側面板上,按一下 [Frontend configuration] (前端設定)
  2. 在「Name」(名稱) 欄位中輸入 https-content-rule
  3. 在Protocol」(通訊協定) 欄位中選取 HTTPS
  4. 將視窗保持開啟,以便繼續操作。

設定 IPv4 轉送規則

  1. 將「IP version」(IP 版本) 設為 IPv4
  2. 在「IP address」(IP 位址) 中,選取您先前建立的 lb-ipv4-1
  3. 確認「Port」(通訊埠) 已設為 443,以允許 HTTPS 流量。
  4. 按一下 [Certificate] (憑證) 下拉式清單。
    1. 如果您已擁有自行管理的 SSL 憑證資源,且想要做為主要 SSL 憑證使用,請在下拉式選單中選取所需資源。
    2. 否則,請選取 [Create a new certificate] (建立新憑證)
    3. 選取 [Upload my certificate] (上傳我的憑證) 或 [Create Google managed certificate] (建立 Google 代管憑證)
    4. 如果您選取 [Upload my certificate] (上傳我的憑證),請完成下列步驟。
      1. 名稱請填寫 www-ssl-cert
      2. 在正確的欄位中上傳您的公用金鑰憑證 (.crt 檔案)、憑證鏈結 (.csr 檔案) 與私密金鑰 (.key 檔案)。
      3. 按一下 [Create] (建立)。
    5. 如果您選擇 [Create Google managed certificate] (建立 Google 代管憑證),請輸入網域
  5. 如要新增主要安全資料傳輸層 (SSL) 憑證資源以外的憑證資源,請按照下列指示操作:
    1. 按一下 [Add certificate] (新增憑證)
    2. 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下 [Create a new certificate] (建立新憑證) 並按照上述指示操作。
  6. 按一下 [Done] (完成)
  7. 將視窗保持開啟,以便繼續操作。

設定 IPv6 轉送規則

  1. 按一下 [Add frontend IP and port] (新增前端 IP 和通訊埠)
  2. 在「Name」(名稱) 欄位中輸入 https-content-ipv6-rule
  3. 若您想要在用戶端與負載平衡器間使用 HTTPS,請在「Protocol 」(通訊協定) 欄位中選取 HTTPS。如果您想要在用戶端與負載平衡器間使用 HTTP,請選取 HTTP
  4. 將「IP version」(IP 版本) 設為 IPv6
  5. 在「IP」中,選取您先前建立的 lb-ipv6-1
  6. 預設的通訊埠必須設定為 443
  7. 如果您已經有想要使用的 SSL 憑證資源,請在「Certificate」(憑證) 下拉式選單中選取所需資源。如果沒有,請選取 [Create a new certificate] (建立新憑證)
    1. 名稱請填寫 www-ssl-cert
    2. 在正確的欄位中上傳您的公用金鑰憑證 (.crt 檔案)、憑證鏈結 (.csr 檔案) 與私密金鑰 (.key 檔案)。
    3. 按一下 [Create] (建立)。
  8. 如何新增主要 SSL 憑證資源外的憑證資源:
    1. 按一下 [Add certificate] (新增憑證)
    2. 從「Certificates」(憑證) 清單中選取所需憑證,或是按一下 [Create a new certificate] (建立新憑證) 並按照上述指示操作。
  9. 按一下 [Done] (完成)

檢查並完成

  1. 在「New HTTP(S) load balancer」(新增 HTTP(S) 負載平衡器) 頁面的左側面板中,按一下 [Review and finalize] (檢查並完成)
  2. 將您的設定與您打算建立的內容進行比較。
  3. 若一切正確,請按一下 [Create] (建立),即可建立您的 HTTPS 負載平衡器。

gcloud


  1. 針對每個執行個體群組定義一個 HTTP 服務,並將通訊埠名稱對應至相關的通訊埠:設定完成後,負載平衡服務會將流量轉送至該具名連接埠。

    gcloud compute instance-groups unmanaged set-named-ports ig-video-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-us \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-video-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
    gcloud compute instance-groups unmanaged set-named-ports ig-www-eu \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. 建立健康狀態檢查。如果您在負載平衡器與後端之間使用 HTTP,請使用 gcloud 指令。

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. 為每個內容供應商建立一項後端服務。將「--protocol」欄位設定為 HTTP,因為我們要使用 HTTP 前往執行個體。請使用我們先前建立的 http-basic-check 健康狀態檢查做為健康狀態檢查。

    gcloud compute backend-services create video-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
    gcloud compute backend-services create web-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    
  4. 將您的執行個體群組新增至後端服務,以做為後端使用。後端內執行個體群組的能力 (CPU 使用率上限或每秒查詢次數上限),由後端決定。在此範例中,請將 balancing-mode 的值設為 UTILIZATIONmax-utilization 設為 0.8,再將 capacity-scaler 設為 1。如果您想要耗盡後端服務,請將 capacity-scaler 設為 0

    新增 ig-video-us 執行個體群組:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-us \
        --instance-group-zone=us-central1-b \
        --global
    

    新增 ig-video-eu 執行個體群組:

    gcloud compute backend-services add-backend video-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-video-eu \
        --instance-group-zone=europe-west1-b \
        --global
    

    新增 ig-www-us 執行個體群組:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-us \
        --instance-group-zone=us-central1-b \
        --global
    

    新增 ig-www-eu 執行個體群組:

    gcloud compute backend-services add-backend web-backend-service \
        --balancing-mode=UTILIZATION \
        --max-utilization=0.8 \
        --capacity-scaler=1 \
        --instance-group=ig-www-eu \
        --instance-group-zone=europe-west1-b \
        --global
    
  5. 建立網址對應,將收到的要求轉送至正確的後端服務。在此情況下,由 --path-rules 旗標定義的要求路徑對應,會根據您網站上各要求的網址路徑來分割流量。與 --path-rules 清單項目不相符的流量會傳送至 --default-service flag 中的項目。

    1. 建立網址對應:

      gcloud compute url-maps create web-map \
          --default-service web-backend-service
      
    2. 新增路徑比對器至您的網址對應,並定義您的要求路徑對應:

      gcloud compute url-maps add-path-matcher web-map \
          --default-service web-backend-service \
          --path-matcher-name pathmap \
          --path-rules="/video=video-backend-service,/video/*=video-backend-service"
      
  6. 建立要在 HTTPS Proxy 中使用的自行簽署 SSL 憑證資源

    我們使用自行簽署的憑證當做示範,但在實際部署時,請使用憑證授權單位簽署的憑證來設定負載平衡器。在此案例中,您可以使用自行管理的憑證,也就是由您自行提供 SSL 憑證;或是由 Google 代管的憑證,也就是 Google 為您的網域發放憑證。如需更多資訊,請參閱 SSL 憑證類型。如果您要使用多個 SSL 憑證,您必須建立各個憑證的 SSL 憑證資源。

    進一步瞭解在 GCP 中建立 SSL 憑證資源的資訊。

    建立自行管理的 SSL 憑證資源:

    gcloud compute ssl-certificates create www-ssl-cert \
        --certificate [CRT_FILE_PATH] \
        --private-key [KEY_FILE_PATH]
    

    建立 Google 代管的 SSL 憑證資源:

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]
    
  7. 建立目標 HTTPS Proxy 以轉送要求至您的網址對應。Proxy 是負載平衡器的一部分,為 HTTPS 負載平衡保留 SSL 憑證,因此您也可以在此步驟中載入您的憑證。

    gcloud compute target-https-proxies create https-lb-proxy \
        --url-map web-map --ssl-certificates www-ssl-cert
    
  8. 建立兩個全域轉送規則,以將傳入要求轉送至 Proxy,一個用於 IPv4,另一個則用於 IPv6。

    gcloud compute forwarding-rules create https-content-rule \
        --address=lb-ipv4-1\
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    
    gcloud compute forwarding-rules create https-content-ipv6-rule \
        --address=lb-ipv6-1 \
        --global \
        --target-https-proxy=https-lb-proxy \
        --ports=443
    

建立全域轉送規則後,可能需等待數分鐘時間,才能讓您的設定傳播到全世界。

將流量傳送至您的執行個體

您已設定好負載平衡器服務,現在可以開始傳送流量至轉送規則,您會看到流量發布至不同的執行個體。

Console/網路瀏覽器


  1. 前往 Google Cloud Platform Console 的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 按一下 [web-map],即可展開您剛建立的負載平衡器。
  3. 在「Backend」(後端) 區段,確認執行個體健康狀態良好。「Healthy」(健康) 欄應已填妥,顯示四個執行個體中的執行個體健康狀態均良好。如看到其他資訊,請先嘗試重新載入頁面。GCP Console 可能需要一段時間才能顯示執行個體的健康狀態良好。如果幾分鐘後,後端仍未顯示為健康,請檢查指派到您後端執行個體的防火牆設定與網路標記設定。
  4. 如果您使用的是 Google 代管的憑證,請確認憑證的資源狀態為「ACTIVE」(有效)。詳情請參閱 Google 代管的安全資料傳輸層 (SSL) 憑證資源狀態一節。
  5. 在 GCP Console 顯示後端執行個體健康後,您可以前往 https://<var>IP_Address</var>,使用網路瀏覽器測試負載平衡器,IP_Address 請填入負載平衡器的 IP 位址。若您使用自行簽署的憑證進行測試,您的瀏覽器會出現警告。您必須明確指示瀏覽器接受自行簽署的憑證。您的瀏覽器應該會顯示另一個頁面,其中內容會顯示提供該頁面的執行個體名稱,以及其所屬區域 (例如:Page on www-us-02 in us-central1-b)。
  6. 在您的瀏覽器中前往 https://<var>IP_Address</var>/video,「IP_Address」 填入負載平衡器的 IP 位址。您的瀏覽器應該會顯示另一個頁面,其中內容會顯示提供該頁面的 video 執行個體名稱,以及其所屬區域 (例如:Page on video-us-02 in us-central1-b)。

gcloud/使用 curl


  1. 如果您使用的是 Google 代管的憑證,在繼續前,請確認您的憑證資源狀態為「ACTIVE」(有效)。如需詳細資訊,請參閱 Google 代管 SSL 憑證資源狀態

     gcloud beta compute ssl-certificates list
    
  2. 使用 curl 指令來測試這些網址的的回覆。請將「IP_Address」改為負載平衡器的 Ipv4 位址

    curl -k https://IP_Address
    curl -k https://IP_Address/video/
    
  3. 使用 curl 指令來測試這些網址的的回覆。請將「IP_Address」改為負載平衡器的 Ipv6 位址。針對 IPv6,您必須在位址周圍放上方括號 ([]),並使用 -g 標記停用 glob (例如:curl -g -6 "https://[2001:DB8::]/")。

    curl -k -g -6 https://[IP_Address]
    curl -k -g -6 https://[IP_Address]/video/
    

測試跨地區功能

如要模擬不同地理區域內的使用者,您可以連結至自己位於其他地區的虛擬機器執行個體,再從該執行個體執行 curl 指令,您會看到要求前往該地區中距離最近的執行個體。

您會看到 HTML 輸出 <!doctype html><html><body><h1>www-us</h1></body></html>

請重複上述步驟,但這一次請連結至 www-eu-1。輸出結果現在為 <!doctype html><html><body><h1>www-eu</h1></body></html>

您可以用世界任一處的用戶端系統進行測試。若地區中的後端變得不健康,或達到能力上限,HTTPS 負載平衡器會自動傳送流量至下一個距離最近的地區

選用:從後端 VM 移除外部 IP 位址

GCP HTTP(S) 負載平衡會使用其內部 IP 位址,與特殊的負載平衡器路徑與後端通訊。後端執行個體不需要外部 IP 位址也可以與負載平衡器通訊。您可以從後端服務移除外部 IP 位址以增加安全性。

若要從後端執行個體移除外部 IP 位址,請依照這些指示操作。

如果需要讓 SSH 連結至沒有外部 IP 位址的後端執行個體,請參閱連結沒有外部 IP 位址的執行個體

清除所用資源

完成此 HTTP(S) 負載平衡教學課程後,您可以將製作好的雲端負載平衡資源刪除,以免您之後需為這些資源付費。如果是在資源專屬的專案中建立資源,可以刪除整個專案。如果並非如此,則可個別刪除資源。

刪除專案

Console


  1. 前往 Google Cloud Platform Console 的「Projects」(專案) 頁面。
    前往「Project」(專案) 頁面
  2. 在專案清單中選取您要刪除的專案,並按一下 [Delete] (刪除)
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shute down] (關閉) 以刪除專案。

gcloud


執行下列指令,將 project_id 改成您的專案 ID:

gcloud projects delete project_id

刪除個別資源

Console


刪除負載平衡器

  1. 前往 Google Cloud Platform Console 的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 選取 web-map 旁邊的核取方塊。
  3. 點選頁面頂端的 [Delete] (刪除) 按鈕。
  4. 選取所有其他資源旁的核取方塊,包含後端服務、健康檢查狀態與 SSL 憑證。
  5. 按一下 [Delete load balancer and the selected resources] (刪除負載平衡器和選取的資源)

刪除執行個體群組

  1. 前往 Google Cloud Platform Console 的「Instance groups」(執行個體群組) 頁面。
    前往「Instance groups」(執行個體群組) 頁面
  2. 勾選頂端位於「Name」(名稱) 旁的核取方塊,並選取所有執行個體群組。
  3. 按一下 [Delete] (刪除)。
  4. 按一下確認視窗中的 [Delete] (刪除)。

釋出外部 IP 位址

  1. 前往 Google Cloud Platform Console 的「External IP addresses」(外部 IP 位址) 頁面。
    前往「External IP addresses」(外部 IP 位址) 頁面
  2. 選取 lb-ipv4-1lb-ipv6-1 旁邊的核取方塊。
  3. 按一下 [Delete] (刪除)。
  4. 按一下確認視窗中的 [Delete] (刪除)。

刪除防火牆規則

  1. 前往 Google Cloud Platform Console 的「Firewalls」(防火牆) 頁面。
    前往「Firewalls」(防火牆) 頁面
  2. 選取 fw-allow-health-check-and-proxyfw-allow-ssh 旁邊的核取方塊。
  3. 按一下 [Delete] (刪除)。
  4. 按一下確認視窗中的 [Delete] (刪除)。

刪除 VM 執行個體

  1. 前往 Google Cloud Platform Console 中的「VM instances」(VM 執行個體) 頁面。
    前往「VM instances」(VM 執行個體) 頁面
  2. 選取頂部位於「Name」(名稱) 旁的核取方塊,並選取所有執行個體群組。
  3. 按一下 [Delete] (刪除)。
  4. 按一下確認視窗中的 [Delete] (刪除)。

刪除虛擬私人雲端網路

  1. 前往 Google Cloud Platform Console 的「VPC networks」(VPC 網路) 頁面。
    前往「VPC networks」(VPC 網路) 頁面
  2. 按一下 [lb-network]。
  3. 在網路詳細資料頁面上,按一下 [Delete VPC network] (刪除 VPC 網路)。
  4. 按一下確認視窗中的 [Delete] (刪除)。

gcloud


刪除負載平衡器

如要刪除負載平衡器,您需要刪除其個別元件。

  1. 刪除轉送規則:

    gcloud compute forwarding-rules delete https-content-rule \
        --global
    gcloud compute forwarding-rules delete https-content-ipv6-rule \
        --global
    
  2. 刪除通用外部 IP 位址:

    gcloud compute addresses delete lb-ipv4-1 \
        --global
    gcloud compute addresses delete lb-ipv6-1 \
        --global
    
  3. 刪除目標 Proxy:

    gcloud compute target-https-proxies delete https-lb-proxy
    
  4. 刪除 SSL 憑證:

    gcloud compute ssl-certificates delete www-ssl-cert
    
  5. 刪除網址對應:

    gcloud compute url-maps delete web-map
    
  6. 刪除後端服務:

    gcloud compute backend-services delete web-backend-service \
        --global
    gcloud compute backend-services delete video-backend-service \
        --global
    
  7. 刪除健康狀態檢查:

    gcloud compute health-checks delete http-basic-check
    

您已刪除所有負載平衡器資源。

刪除執行個體群組

重複以下指令,並使用以下的名稱和區域組合,建立四個非代管的執行個體群組。請依照下列資訊,替換「INSTANCE_GROUP_NAME」(執行個體群組名稱) 與「ZONE」(區域)

  • 名稱:ig-www-us、區域:us-central1-b
  • 名稱:ig-video-us、區域:us-central1-b
  • 名稱:ig-www-eu、區域:europe-west1-b
  • 名稱:ig-video-eu、區域:europe-west1-b
gcloud compute instance-groups unmanaged delete INSTANCE_GROUP_NAME \
   --zone=ZONE

刪除 VM 執行個體

重複下列指令,並使用以下的名稱與區域組合,刪除八個 VM。請依照下列資訊,替換「VM_NAME」與「ZONE」

  • 名稱:www-us-01、區域:us-central1-b
  • 名稱:www-us-02、區域:us-central1-b
  • 名稱:video-us-01、區域:us-central1-b
  • 名稱:video-us-02、區域:us-central1-b
  • 名稱:www-eu-01、區域:europe-west1-b
  • 名稱:www-eu-02、區域:europe-west1-b
  • 名稱:video-eu-01、區域:europe-west1-b
  • 名稱:video-eu-02、區域:europe-west1-b
gcloud compute instance delete VM_NAME \
   --zone=ZONE

刪除防火牆規則

刪除下列兩個防火牆規則:

gcloud compute firewall-rules delete fw-allow-health-check-and-proxy
gcloud compute firewall-rules delete fw-allow-ssh

刪除虛擬私人雲端網路

首先,請刪除 us-subnet

gcloud compute networks subnets delete us-subnet \
    --region=us-central1

接著,請刪除 eu-subnet

gcloud compute networks subnets delete eu-subnet \
    --region=europe-west1

最後,請刪除虛擬私人雲端網路:

gcloud compute networks delete lb-network

您已刪除此專案中設定的所有資源。

後續步驟