使用 VM 執行個體群組後端設定全域外部 Proxy 網路負載平衡器 (SSL Proxy)

本文件說明如何設定具備目標 SSL Proxy 和 VM 執行個體群組後端的全域外部 Proxy 網路負載平衡器。在開始之前,請先參閱外部 Proxy 網路負載平衡器總覽,瞭解這些負載平衡器的運作方式。

設定總覽

這個範例說明如何為同時存在於區域 A 和區域 B 的服務設定外部 Proxy 網路負載平衡器。您將會設定下列項目:

  1. 散布於兩個地區的四個執行個體
  2. 用於容納執行個體的執行個體群組
  3. 後端元件,包括:
    • 健康狀態檢查:用於監控執行個體的健康狀態
    • 後端服務:可監控執行個體群組,避免用量超過設定值
    • 後端:可容納執行個體群組
  4. 前端元件,包括:
    • SSL 憑證資源。您可以使用自行管理的憑證 (須提供自有安全資料傳輸層 (SSL) 憑證) 或 Google 代管的憑證 (Google 會為您的所有網域核發憑證)。詳情請參閱「安全資料傳輸層 (SSL) 憑證類型」。
    • 安全資料傳輸層 (SSL) Proxy 本身及其安全資料傳輸層 (SSL) 憑證
    • 外部靜態 IPv4 位址,以及將使用者流量傳送至 Proxy 的轉送規則
    • 外部靜態 IPv6 位址,以及將使用者流量傳送至 Proxy 的轉送規則
  5. 允許流量從負載平衡器和健康狀態檢查工具傳送至執行個體的防火牆規則
  6. (選用) 安全資料傳輸層 (SSL) 政策,可控管安全資料傳輸層 (SSL) Proxy 負載平衡器與用戶端交涉的安全資料傳輸層 (SSL) 功能

接著,您會測試設定結果。

權限

如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色

工作 必要角色
建立網路、子網路和負載平衡器元件 網路管理員
新增與移除防火牆規則 安全性管理員
建立執行個體 Compute 執行個體管理員

詳情請參閱下列指南:

設定網路和子網路

如要建立範例網路和子網路,請按照以下步驟操作。

主控台

如要同時支援 IPv4 和 IPv6 流量,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」

  3. 輸入網路的 [Name] (名稱)

  4. 選用:如要為這個網路中的子網路設定內部 IPv6 位址範圍,請完成下列步驟:

    1. 在「虛擬私有雲網路 ULA 內部 IPv6 範圍」部分,選取「已啟用」
    2. 在「Allocate internal IPv6 range」(分配內部 IPv6 範圍) 部分,選取「自動」或「手動」

      如果您選取「手動」,請在 fd20::/20 範圍內輸入 /48 範圍。如果範圍已在使用中,系統會提示您提供其他範圍。

  5. 在「子網路建立模式」中,選擇「自訂」

  6. 在「New subnet」(新子網路) 區段中,設定下列欄位:

    1. 在「Name」欄位中,輸入子網路的名稱。
    2. 在「Region」欄位中選取區域。
    3. 在「IP 堆疊類型」中,選取「IPv4 和 IPv6 (雙重堆疊)」
    4. 在「IP 位址範圍」欄位中輸入 IP 位址範圍。這是子網路的主要 IPv4 範圍

      雖然您可以為子網路設定 IPv4 位址範圍,但無法選擇子網路的 IPv6 位址範圍。Google 提供固定大小 (/64) 的 IPv6 CIDR 區塊。

    5. 在「IPv6 存取權類型」部分,選取「外部」

  7. 按一下「完成」

  8. 如要在其他區域新增子網路,請按一下「新增子網路」,然後重複上述步驟。

  9. 按一下 [建立]。

如要僅支援 IPv4 流量,請按照下列步驟操作:

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」

  3. 在「Name」欄位中,輸入網路的名稱。

  4. 在「子網路建立模式」中,選擇「自訂」

  5. 在「New subnet」(新的子網路) 區段中,設定下列項目:

    1. 在「Name」欄位中,輸入子網路的名稱。
    2. 在「Region」欄位中選取區域。
    3. 在「IP 堆疊類型」中,選取「IPv4 (單一堆疊)」
    4. 在「IP 位址範圍」欄位中,輸入子網路的「主要 IPv4 範圍」
  6. 按一下「完成」

  7. 如要在其他區域新增子網路,請按一下「新增子網路」,然後重複上述步驟。

  8. 按一下 [建立]。

gcloud

  1. 建立自訂模式虛擬私有雲網路:

    gcloud compute networks create NETWORK \
        [ --enable-ula-internal-ipv6 [ --internal-ipv6-range=ULA_IPV6_RANGE ]] \
        --switch-to-custom-subnet-mode
    
  2. 在網路中為後端建立子網路。

    針對 IPv4 和 IPv6 流量,請使用下列指令更新子網路:

    gcloud compute networks subnets create SUBNET \
       --stack-type=IPV4_IPv6 \
       --ipv6-access-type=EXTERNAL \
       --network=NETWORK \
       --region=REGION_A
    
    gcloud compute networks subnets create SUBNET_B \
       --stack-type=IPV4_IPv6 \
       --ipv6-access-type=EXTERNAL \
       --network=NETWORK \
       --region=REGION_B
    

    如要只測試 IPv4 流量,請使用下列指令:

    gcloud compute networks subnets create SUBNET \
       --network=NETWORK \
       --stack-type=IPV4_ONLY \
       --range=10.1.2.0/24 \
       --region=REGION_A
    
    gcloud compute networks subnets create SUBNET_B \
       --stack-type=IPV4_ONLY \
       --ipv6-access-type=EXTERNAL \
       --network=NETWORK \
       --region=REGION_B
    

更改下列內容:

  • NETWORK:虛擬私有雲網路的名稱

  • ULA_IPV6_RANGE:Google 用於內部 IPv6 子網路範圍的 fd20::/20 範圍內 /48 前置碼。如果您未使用 --internal-ipv6-range 旗標,Google 會為網路選取 /48 前置字串

  • SUBNET:子網路名稱

  • REGION_AREGION_B:區域名稱

設定執行個體和執行個體群組

本節說明如何建立執行個體和執行個體群組,以及如何將執行個體新增至執行個體群組。正式上線的系統通常會依據執行個體範本使用代管執行個體群組,但這項設定可以讓您在更短時間內進行初始測試。

建立執行個體

請使用標記 ssl-lb 來建立這些執行個體,防火牆規則稍後會使用這個標記。

主控台

建立執行個體

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

    前往 VM 執行個體

  2. 點選「建立執行個體」

  3. 將「Name」(名稱) 設定為 vm-a1

  4. 將「可用區」設為 ZONE_A

  5. 點選「進階選項」

  6. 按一下「Networking」,然後設定下列欄位:

    • 在「Network tags」(網路標記) 欄位中輸入 ssl-lballow-health-check-ipv6
  7. 在「Network interfaces」區段中,按一下「Edit」,然後進行以下變更:

    • 選取網路。
    • 選取子網路。

    • 在「IP 堆疊類型」欄位中,選取「IPv4 和 IPv6 (雙重堆疊)」

    • 按一下 [完成]

  8. 按一下 [Management] (管理)。在「Startup script」(開機指令碼) 欄位中輸入下列指令碼。

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. 其他欄位則保留預設值。

  10. 按一下 [建立]。

  11. 使用相同的設定建立 vm-a2,但將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. 使用相同的設定建立 vm-b1,但請將「Zone」(區域) 設為 ZONE_B,並將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. 使用相同的設定建立 vm-b2,但請將「Zone」(區域) 設為 ZONE_B,並將「Startup script」(開機指令碼) 設為以下內容:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud

  1. 在區域 ZONE_A 中建立 vm-a1

    gcloud compute instances create vm-a1 \
       --image-family debian-12 \
       --image-project debian-cloud \
       --tags ssl-lb \
       --zone ZONE_A \
       --metadata startup-script="#! /bin/bash
         sudo apt-get update
         sudo apt-get install apache2 -y
         sudo a2ensite default-ssl
         sudo a2enmod ssl
         sudo service apache2 restart
         echo '<!doctype html><html><body><h1>vm-a1</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  2. 在區域 ZONE_A 中建立 vm-a2

    gcloud compute instances create vm-a2 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_A \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-a2</h1></body></html>' | sudo tee /var/www/html/index.html
         EOF"
    
  3. 在區域 ZONE_B 中建立 vm-b1

    gcloud compute instances create vm-b1 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_B \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-b1</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    
  4. 在區域 ZONE_B 中建立 vm-b2

    gcloud compute instances create vm-b2 \
      --image-family=debian-12 \
      --image-project=debian-cloud \
      --tags=ssl-lb \
      --zone=ZONE_B \
      --metadata=startup-script="#! /bin/bash
        sudo apt-get update
        sudo apt-get install apache2 -y
        sudo a2ensite default-ssl
        sudo a2enmod ssl
        sudo service apache2 restart
        echo '<!doctype html><html><body><h1>vm-b2</h1></body></html>' | sudo tee /var/www/html/index.html
        EOF"
    

為每個區域建立執行個體群組,並新增執行個體

主控台

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組)

  2. 點選「建立執行個體群組」

  3. 將「Name」(名稱) 設為 instance-group-a

  4. 將「可用區」設為 ZONE_A

  5. 在「Port mapping」(通訊埠對應) 下方,按一下「Add port」(新增通訊埠)。負載平衡器會透過已命名的通訊埠將流量傳送至執行個體群組。建立已命名的通訊埠,以便將連入流量對應至特定通訊埠編號。

    1. 在「Port name」(通訊埠名稱) 欄位中輸入 ssl-lb,並在「Port numbers」(通訊埠編號) 欄位中輸入 443
  6. 按一下「Instance definition」(執行個體定義) 下方的 [Select existing instances] (選取現有的執行個體)

  7. 在「VM instances」(VM 執行個體) 中選取 vm-a1vm-a2

  8. 保留其他預設設定。

  9. 按一下 [建立]。

  10. 重複執行上述步驟,但請設定下列欄位:

    • Name (名稱):instance-group-b
    • Zone (可用區):ZONE_B
    • ssl-lb 的「Port name」(通訊埠名稱)443 的「Port numbers」(通訊埠編號)
    • 「Instances」(執行個體)vm-b1vm-b2
  11. 確認您現已建立兩個執行個體群組,而且每個群組中都有兩個執行個體。

gcloud

  1. 建立 instance-group-a 執行個體群組。

    gcloud compute instance-groups unmanaged create instance-group-a --zone ZONE_A
    
  2. 設定執行個體群組的已命名通訊埠。

    gcloud compute instance-groups set-named-ports instance-group-a \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_A
    
  3. vm-a1vm-a2 新增至 instance-group-a

    gcloud compute instance-groups unmanaged add-instances instance-group-a \
        --instances=vm-a1,vm-a2 \
        --zone=ZONE_A
    
  4. 建立 instance-group-b 執行個體群組。

    gcloud compute instance-groups unmanaged create instance-group-b --zone ZONE_B
    
  5. 設定執行個體群組的已命名通訊埠。

    gcloud compute instance-groups set-named-ports instance-group-b \
        --named-ports=ssl-lb:443 \
        --zone=ZONE_B
    
  6. vm-b1vm-b2 新增至 instance-group-b

    gcloud compute instance-groups unmanaged add-instances instance-group-b \
        --instances=vm-b1,vm-b2 \
        --zone=ZONE_B
    

您的兩個地區中目前各有一個執行個體群組,而且每個執行個體群組中都有兩個執行個體。

建立安全資料傳輸層 (SSL) 負載平衡器的防火牆規則

設定防火牆,藉此允許流量從負載平衡器和健康狀態檢查工具傳送至執行個體。

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」

  2. 點按「建立防火牆規則」

  3. 在「Name」(名稱) 欄位中輸入 allow-ssl-lb-and-health

  4. 選取網路。

  5. 在「Targets」(目標) 下方,選取 [Specified target tags] (指定的目標標記)

  6. 將「Target tags」(目標標記) 設為 ssl-lb

  7. 將「Source filter」(來源篩選器) 設為「IPv4 ranges」(IPv4 範圍)

  8. 將「Source IPv4 ranges」(來源 IPv4 範圍) 設為 130.211.0.0/2235.191.0.0/16

  9. 在「Protocols and ports」(通訊協定和通訊埠) 下方,將「Specified protocols and ports」(指定的通訊協定和通訊埠) 設為 tcp:443

  10. 按一下 [建立]。

gcloud

gcloud compute firewall-rules create allow-ssl-lb-and-health \
  --source-ranges=130.211.0.0/22,35.191.0.0/16 \
  --target-tags=ssl-lb \
  --allow=tcp:443

如果您使用的是 Google 代管的憑證,請確認憑證的資源狀態為「ACTIVE」(有效)。詳情請參閱 Google 代管的安全資料傳輸層 (SSL) 憑證資源狀態一節。

gcloud compute ssl-certificates list

建立 IPv6 健康狀態檢查防火牆規則

請確認您有適用於要進行負載平衡的執行個體,且允許來自 Google Cloud健康狀態檢查系統 (2600:2d00:1:b029::/64) 的流量。這個範例會使用目標標記 allow-health-check-ipv6 來辨識套用此規則的 VM 執行個體。

如果沒有這個防火牆規則,預設拒絕輸入規則會封鎖傳入至後端執行個體的 IPv6 流量。

主控台

  1. 在 Google Cloud 控制台中,前往「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」

  2. 如要允許 IPv6 子網路流量,請再次按一下「Create firewall rule」(建立防火牆規則),然後輸入以下資訊:

    • Name (名稱):fw-allow-lb-access-ipv6
    • Network (網路):NETWORK
    • Priority (優先順序):1000
    • 流量方向ingress
    • 目標指定的目標標記
    • 在「Target tags」欄位中輸入 allow-health-check-ipv6
    • Source filter (來源篩選器):IPv6 範圍
    • 來源 IPv6 範圍2600:2d00:1:b029::/642600:2d00:1:1::/64
    • 「Protocols and ports」(通訊協定和通訊埠)「Allow all」(全部允許)
  3. 按一下 [建立]。

gcloud

建立 fw-allow-lb-access-ipv6 防火牆規則,允許與子網路進行通訊:

gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
  --network=NETWORK \
  --action=allow \
  --direction=ingress \
  --target-tags=allow-health-check-ipv6 \
  --source-ranges=2600:2d00:1:b029::/64,2600:2d00:1:1::/64 \
  --rules=all

設定負載平衡器

控制台

開始設定

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

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

  2. 點選「建立負載平衡器」
  3. 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」
  4. 在「直通或使用 Proxy」部分,選取「Proxy load balancer」,然後點選「Next」
  5. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  6. 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」
  7. 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external proxy Network Load Balancer」(全域外部 Proxy 網路負載平衡器),然後點選「Next」(下一步)
  8. 按一下 [設定]

基本設定

將「Name」(名稱) 設為 my-ssl-lb

後端設定

  1. 按一下「後端設定」
  2. 在「Backend type」下方,選取「Instance groups」
  3. 將「Protocol」設為「SSL」
  4. 在「IP 位址選擇政策」清單中,選取「偏好使用 IPv6」
  5. 在「Named port」(已命名通訊埠) 輸入 ssl-lb
  6. 保留「Timeout」的預設值。
  7. 保留「Backend type」(後端類型) 的「Instance groups」(執行個體群組) 預設值。
  8. 設定第一個後端:
    1. 在「New backend」(新增後端) 下方,選取執行個體群組 instance-group-a
    2. 將「Port numbers」(通訊埠編號) 設為 443
    3. 保留其餘預設值。
  9. 設定第二個後端:
    1. 點選「新增後端」
    2. 選取執行個體群組 instance-group-b
    3. 將「Port numbers」(通訊埠編號) 設為 443
    4. 按一下 [完成]
  10. 設定健康狀態檢查:
    1. 在「Health check」(健康狀態檢查) 下方,選取 [Create health check] (建立健康狀態檢查)
    2. 將健康狀態檢查的「Name」(名稱) 設為 my-ssl-health-check
    3. 在「Protocol」下方,選取「SSL」
    4. 保留其餘預設值。
    5. 按一下 [儲存並繼續]
  11. 在 Google Cloud 控制台中,確認「後端設定」旁有勾號。如未顯示,請重新檢查一遍,確認是否已完成所有步驟。

前端設定

  1. 按一下「前端設定」
    1. 新增第一個轉送規則:
    2. 輸入 my-ssl-lb-forwarding-rule 的「Name」
    3. 在「Protocol」下方,選取「SSL」
    4. 在「IP 位址」下方,選取「建立 IP 位址」
      1. 輸入 ssl-lb-static-ipv4 的「Name」
      2. 按一下「保留」
    5. 在「Certificate」(憑證) 下方,選取 [Create a new certificate] (建立新憑證)
    6. 輸入 my-ssl-cert 的「Name」
    7. 如果您是選擇「Upload my certificate」(上傳我的憑證),請完成下列步驟:
      1. 貼上憑證,或點選「上傳」,前往憑證檔案。
      2. 貼上私密金鑰,或按一下「上傳」,前往私密金鑰檔案。
    8. 如果您選擇「Create Google managed certificate」(建立 Google 代管憑證),請輸入「Domain」(網域)
      1. 如要輸入其他網域,請按一下「新增網域」
      2. 按一下 [建立]。
    9. 如要新增主要安全資料傳輸層 (SSL) 憑證資源以外的憑證資源,請按一下「Additional certificates」。接著,從「Certificates」選單中選取其他憑證,或是點選「Create a new certificate」並按照上述指示操作。
      1. (選用) 如何建立安全資料傳輸層 (SSL) 政策:
      2. 在「SSL policy」(安全資料傳輸層 (SSL) 政策) 下方,選取「Create a policy」(建立政策)
      3. 輸入 my-ssl-policy 的「Name」
      4. 在「Minimum TLS Version」部分,選取「TLS 1.0」
      5. 在「Profile」(設定檔) 部分,選取「Modern」(當前版本)。接著,系統會顯示「已啟用的功能」和「已停用的功能」
      6. 按一下 [儲存]
    10. 選用:開啟「Proxy 通訊協定」
    11. 按一下 [完成]
  2. 確認 Google Cloud 控制台的「Frontend configuration」(前端設定) 旁顯示綠色勾號。如未顯示,請重新檢查一遍,確認您是否已完成上述所有步驟。
  3. 按一下 [完成]

檢查並完成

  1. 按一下「檢查並完成」
  2. 查看負載平衡器設定。
  3. 選用:按一下「等效程式碼」,查看用於建立負載平衡器的 REST API 要求。
  4. 按一下 [建立]。

gcloud

  1. 建立健康狀態檢查。
       gcloud compute health-checks create ssl my-ssl-health-check --port=443
       
  2. 建立後端服務。
       gcloud beta compute backend-services create my-ssl-lb \
           --load-balancing-scheme EXTERNAL_MANAGED \
           --global-health-checks \
           --protocol=SSL \
           --port-name=ssl-lb \
           --ip-address-selection-policy=PREFER_IPV6 \
           --health-checks=my-ssl-health-check \
           --timeout=5m \
           --global
       

    或者,您也可以使用 --protocol=TCP 設定從負載平衡器傳送至執行個體的未加密通訊內容。

  3. 將執行個體群組新增至後端服務。

       gcloud compute backend-services add-backend my-ssl-lb \
           --instance-group=instance-group-a \
           --instance-group-zone=ZONE_A \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
       gcloud compute backend-services add-backend my-ssl-lb \
           --instance-group=instance-group-b \
           --instance-group-zone=ZONE_B \
           --balancing-mode=UTILIZATION \
           --max-utilization=0.8 \
           --global
       
  4. 設定 SSL 憑證資源。

    如果您使用的是自行管理的憑證,則至少須上傳一組安全資料傳輸層 (SSL) 憑證。如未上傳,請參閱安全資料傳輸層 (SSL) 憑證總覽。使用多組安全資料傳輸層 (SSL) 憑證時,您必須一次建立一組憑證。

    如果您使用的是自行管理的安全資料傳輸層 (SSL) 憑證,卻未具備私密金鑰和經過簽署的憑證,您可以建立並使用自行簽署的憑證來進行測試。

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

       gcloud compute ssl-certificates create my-ssl-cert \
           --certificate=CRT_FILE_PATH \
           --private-key=KEY_FILE_PATH
       

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

       gcloud compute ssl-certificates create www-ssl-cert \
           --domains=DOMAIN_1,DOMAIN_2
       
  5. 設定目標 SSL Proxy。

    外部 Proxy 網路負載平衡器支援建立目標 SSL Proxy,且單一 Proxy 可含有一至十五組 SSL 憑證。執行這個指令之前,您必須為各組憑證建立安全資料傳輸層 (SSL) 憑證資源。

    如要啟用 Proxy 標頭,請將其設為 PROXY_V1 (而非 none)。您可以選擇將安全資料傳輸層 (SSL) 政策附加至目標 Proxy。首先,請建立政策。

       gcloud compute ssl-policies create my-ssl-policy \
           --profile=MODERN \
           --min-tls-version=1.0
       

    接著,將政策附加至目標 Proxy。

       gcloud beta compute target-ssl-proxies create my-ssl-lb-target-proxy \
           --backend-service=my-ssl-lb \
           --ssl-certificates=[SSL_CERT_1][,[SSL_CERT_2],...] \
           --ssl-policy=my-ssl-policy \
           --proxy-header=NONE
       
  6. 預留全域靜態 IP 位址。

    您的客戶會使用這些 IP 位址來存取已平衡工作負載的服務。

       gcloud compute addresses create ssl-lb-static-ipv4 \
           --ip-version=IPV4 \
           --global
       
       gcloud compute addresses create ssl-lb-static-ipv6 \
           --ip-version=IPV6 \
           --global
       
  7. 設定通用轉送規則。

    建立與目標 Proxy 相關聯的通用轉送規則。請將 LB_STATIC_IPLB_STATIC_IPV6 替換為您在保留全域靜態 IP 位址時產生的 IP 位址。

       gcloud beta compute forwarding-rules create my-ssl-lb-forwarding-rule \
           --load-balancing-scheme EXTERNAL_MANAGED \
           --global \
           --target-ssl-proxy=my-ssl-lb-target-proxy \
           --address=LB_STATIC_IP \
           --ports=443
       

將網域連結至負載平衡器

建立負載平衡器後,請記下與負載平衡器相關聯的 IP 位址,例如 30.90.80.100。如要將網域指向負載平衡器,請使用網域註冊服務建立 A 記錄。如果您在 SSL 憑證中新增了多個網域,則必須為每個網域新增 A 記錄,並全部指向負載平衡器的 IP 位址。舉例來說,如要為 www.example.comexample.com 建立 A 記錄,請使用以下方法:

NAME                  TYPE     DATA
www                   A        30.90.80.100
@                     A        30.90.80.100

如果您使用 Cloud DNS 做為 DNS 供應商,請參閱「新增、修改及刪除記錄」。

測試負載平衡器

在網路瀏覽器中使用 HTTPS 連線至您的靜態 IP 位址。在這項測試設定作業中,執行個體會使用自行簽署的憑證。因此,在您首次存取網頁時,瀏覽器會顯示警告訊息。此時,只要按一下警告訊息即可查看實際頁面。請將 IP_ADDRESS 替換為您先前建立的 IPv4 或 IPv6 位址。

https://IP_ADDRESS

您應該會看見一個主機,而且該主機位於與您最相近的地區。請重新載入頁面,直到您看見該地區中的其他執行個體為止。如要查看位於其他地區的執行個體,請停止最鄰近地區中的執行個體。

或者,您也可以使用本機電腦指令列中的 curl。如要在安全資料傳輸層 (SSL) Proxy 中使用自行簽署的憑證,您必須一併指定 -k。即便您使用的是自行簽署的憑證或完全沒有憑證,curl -k 選項還是可以讓 curl 指令正常運作。如果您使用的是一般憑證,則可移除該項參數。請注意,-k 參數只能用來測試您自己的網站。在一般情況下,有效的憑證是相當重要的安全防護措施,您也不應忽略憑證警告。

IP_ADDRESS 替換為您先前建立的 IPv4 或 IPv6 位址。

curl -k https://IP_ADDRESS

如果無法連上負載平衡器,請嘗試「排解設定問題」一節所述的步驟。

其他設定選項

本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選填項目。您可以按任何順序執行這些工作。

保留用戶端連線資訊的 Proxy 通訊協定

Proxy 網路負載平衡器會終止來自用戶端的 TCP 連線,並建立與執行個體的新連線。根據預設,系統不會保留原本的用戶端 IP 和通訊埠資訊。

如要保留原始連線資訊並傳送至您的執行個體,請啟用 Proxy 通訊協定第 1 版。這個通訊協定會將另一個標頭 (當中包含來源 IP 位址、目的地 IP 位址和通訊埠編號) 做為要求的一部分傳送給執行個體。

請確認 Proxy Network Load Balancer 的後端執行個體正在執行支援 Proxy 通訊協定標頭的伺服器。如果伺服器未設定為支援 Proxy 通訊協定標頭,後端執行個體會傳回空白回應。

如果您為使用者流量設定了 PROXY 通訊協定,那麼您也可以設定用於健康檢查的 Proxy 通訊協定。如要在同一個通訊埠上提供流量及檢查健康狀態,請將健康狀態檢查的 --proxy-header 設為與負載平衡器設定相符。

Proxy 通訊協定標頭通常是一行使用者可以理解的文字,格式如下:

PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n

以下範例顯示 PROXY 通訊協定:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

在上例中,用戶端 IP 為 192.0.2.1,負載平衡 IP 為 198.51.100.1,用戶端通訊埠為 15221,目標通訊埠則為 110

如果系統無法取得用戶端的 IP 位址,負載平衡器就會產生下列格式的 Proxy 通訊協定標頭:

PROXY UNKNOWN\r\n

更新目標 Proxy 的 Proxy 通訊協定標頭

本頁負載平衡器設定範例說明如何在建立 Proxy Network Load Balancer 時啟用 Proxy 通訊協定標頭。請按照下列步驟,變更現有目標 Proxy 的 Proxy 通訊協定標頭。

控制台

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

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

  2. 按一下負載平衡器的 「Edit」
  3. 按一下「前端設定」
  4. 將「Proxy protocol」欄位的值變更為「On」
  5. 按一下 [Update] (更新),儲存您所做的變更。

gcloud

在下列指令中,編輯 --proxy-header 欄位,並視需求將其設為 NONEPROXY_V1

gcloud compute target-ssl-proxies update TARGET_PROXY_NAME \
    --proxy-header=[NONE | PROXY_V1]

設定工作階段相依性

這些程序會說明如何更新範例安全資料傳輸層 (SSL) Proxy 負載平衡器的後端服務,以便後端服務使用用戶端 IP 相依性。

啟用用戶端 IP 相依性後,負載平衡器會根據從用戶端 IP 位址和負載平衡器 IP 位址 (外部轉送規則的外部 IP 位址) 建立的雜湊,將特定用戶端的要求導向至同一個後端 VM。

控制台

如何啟用用戶端 IP 工作階段相依性:

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

    前往「負載平衡」

  2. 點選「後端」

  3. 按一下「my-ssl-lb」 (您為本範例建立的後端服務名稱),然後按一下「Edit」

  4. 在「後端服務詳細資料」頁面中,按一下「進階設定」

  5. 在「Session affinity」(工作階段相依性) 下方,從選單中選取「Client IP」(用戶端 IP)

  6. 按一下 [Update]

gcloud

使用以下指令更新 my-ssl-lb 後端服務,並指定用戶端 IP 工作階段相依性:

gcloud compute backend-services update my-ssl-lb \
    --global \
    --session-affinity=CLIENT_IP

API

如要設定用戶端 IP 工作階段相依性,請向 backendServices/patch 方法提出 PATCH 要求。

PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-ssl-lb
{
  "sessionAffinity": "CLIENT_IP"
}

啟用連線排除功能

您可以啟用後端服務的連線排除功能,確保提供流量的執行個體在停止運作、遭到手動移除或由自動配置器移除時,使用者經歷的干擾可降至最低程度。如要進一步瞭解連線排除功能,請參閱啟用連線排除功能說明文件。

後續步驟