設定具備外部後端的傳統版應用程式負載平衡器

本指南會透過範例說明如何在全域外部應用程式負載平衡器中使用外部後端 (有時稱為「自訂來源」) 的基礎知識。外部後端是指位於 Google Cloud外部的端點。當您使用外部後端搭配全域外部應用程式負載平衡器時,可以使用 Cloud CDN 快取來提升效能。

本指南說明如何使用支援 Cloud CDN 的後端服務,設定全域外部應用程式負載平衡器,將要求轉送至外部後端伺服器。

在您依循這份指南之前,請先熟悉 Internet NEG 總覽說明文件,包括限制

下圖顯示全域外部應用程式負載平衡器前端與外部後端。

具有外部後端的全域外部應用程式負載平衡器。
圖 1. 具有外部後端的全域外部應用程式負載平衡器 (按一下可放大)。

權限

如要按照本指南操作,您必須建立網際網路 NEG,並在專案中建立或修改外部應用程式負載平衡器。您必須是專案擁有者或編輯者 (roles/ownerroles/editor),或是應具有以下兩個 Compute Engine 身分與存取權管理角色

工作 必要角色
建立及修改負載平衡器元件 Compute Network Admin
(roles/compute.networkAdmin)
建立及修改 NEG Compute 執行個體管理員
(roles/compute.instanceAdmin)

在 Google Cloud外部設定外部後端環境

如要設定環境,請參閱下列各節。

設定網路端點

設定網路端點,將外部後端公開給Google Cloud。請確認端點 (IP:Port 組合或完整網域名稱 (FQDN) 和通訊埠) 可透過網際網路存取。這個端點稍後會從網際網路 NEG 參照。

如要瞭解網際網路 NEG 端點的詳細設定需求,請參閱「網際網路 NEG 總覽」。

允許外部後端接收來自 Google Cloud的流量

如要允許來自 Google Cloud 的請求連上外部後端,您必須將 Google 用於將要求傳送至外部後端的 IP 位址範圍加入許可清單。如要查詢需要允許傳送流量至外部後端的 IP 位址,請使用 dignslookup 等工具查詢 _cloud-eoips.googleusercontent.com DNS TXT 記錄。

範例:

  • 執行下列 nslookup 指令:

    nslookup -q=TXT _cloud-eoips.googleusercontent.com 8.8.8.8
    

    輸出內容如下:

    Non-authoritative answer:
    _cloud-eoips.googleusercontent.com    text = "v=spf1 ip4:34.96.0.0/20 ip4:34.127.192.0/18 ~all"
    

    請注意 ip4: 後面的 CIDR 範圍,並確保外部後端設定的防火牆規則或雲端存取控制清單 (ACL) 允許這些範圍。

  • 執行下列 dig 指令:

    dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
    

    輸出內容包含兩個 IP 位址範圍,如下所示:

    34.96.0.0/20
    34.127.192.0/18
    

設定 Google Cloud 環境

使用網際網路 NEG 後端建立全域外部應用程式負載平衡器。

保留外部 IP 位址

預留全域靜態外部 IP 位址,供用戶端用於連線至應用程式。

主控台

  1. 在 Google Cloud 控制台中,前往「External IP addresses」(外部 IP 位址) 頁面。

    前往「外部 IP 位址」

  2. 按一下「保留外部靜態 IP 位址」,預留 IPv4 位址。

  3. 輸入名稱。

  4. 在「Network Service Tier」(網路服務級別) 部分,選取「Premium」(進階級)。

  5. 在「IP 版本」部分,選取「IPv4」

  6. 在「Type」(類型) 部分,選取「Global」(全域)

  7. 按一下「保留」

gcloud

gcloud compute addresses create LB_IP_ADDRESS_NAME \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

請注意預留的 IPv4 位址:

gcloud compute addresses describe LB_IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

設定網際網路 NEG

主控台

  1. 在 Google Cloud 控制台中,前往「Network endpoint groups」(網路端點群組) 頁面。

    前往「網路端點群組」

  2. 按一下「建立網路端點群組」

  3. 輸入名稱。

  4. 在「網路端點群組類型」部分,選取「網路端點群組 (網際網路)」

  5. 在「Default port」(預設通訊埠) 中輸入 443

  6. 在「New network endpoint」(新網路端點) 中,選取「Fully qualified domain name and port」(完整網域名稱與通訊埠)。

  7. 輸入完整網域名稱

  8. 在「Port type」(通訊埠類型) 中,選取「Default」(預設),並確認「Port number」(通訊埠號碼)443

  9. 點選「建立」

gcloud

  1. 建立網際網路 NEG,並將 --network-endpoint-type 設為 internet-fqdn-port (可存取外部後端的主機名稱和通訊埠):

    gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type="internet-fqdn-port" \
        --global
    
  2. 將端點新增至 NEG。如果未指定通訊埠,通訊埠選項會預設為通訊埠 80 (HTTP) 或 443 (HTTPS;HTTP/2),具體取決於後端服務中設定的通訊協定。請務必加入 --global 標記:

    gcloud compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME,port=443" \
        --global
    

建立負載平衡器

主控台

開始設定

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

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

  2. 點選「建立負載平衡器」
  3. 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)
  4. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  5. 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」
  6. 在「負載平衡器代別」部分,選取「Classic Application Load Balancer」,然後點選「Next」
  7. 按一下 [設定]

前端設定

  1. 按一下「前端設定」
  2. 輸入名稱。
  3. 如要建立 HTTPS 負載平衡器,您必須具備 SSL 憑證。建議使用 Google 代管的憑證。

    確認下列選項已設為指定的值。

    屬性 值 (輸入值或選取指定的選項)
    通訊協定 HTTPS
    網路服務級別 Premium
    IP 版本 IPv4
    IP 位址 選取在「保留外部 IP 位址」步驟中建立的 IP 位址。
    通訊埠 443
    憑證

    選取現有的 SSL 憑證或建立新的憑證。

    如要建立 HTTPS 負載平衡器,您必須具備要在 HTTPS Proxy 中使用的 SSL 憑證資源。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。

    如要建立 Google 代管的憑證,您必須擁有網域。網域的 A 記錄必須解析為負載平衡器的 IP 位址 (在本例中為 example-ip)。我們建議您使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如果您沒有網域,可以使用自行簽署的 SSL 憑證進行測試。

    選用:啟用從 HTTP 重新導向至 HTTPS 的功能

    使用這個核取方塊啟用從 HTTP 重新導向至 HTTPS 的功能。

    啟用這個核取方塊會建立額外的部分 HTTP 負載平衡器,該負載平衡器會使用與 HTTPS 負載平衡器相同的 IP 位址,並將 HTTP 要求重新導向至負載平衡器的 HTTPS 前端。

    只有在選取 HTTPS 通訊協定並使用預留 IP 位址時,才能勾選這個核取方塊。

    如果您想在不設定 SSL 憑證資源 (或 Google 代管憑證所需的網域) 的情況下測試這個程序,可以設定 HTTP 負載平衡器。

    如要建立 HTTP 負載平衡器,請確認下列選項已設為指定的值:

    屬性 值 (輸入值或選取指定的選項)
    通訊協定 HTTP
    網路服務級別 進階
    IP 版本 IPv4
    IP 位址 選取在「保留外部 IP 位址」步驟中建立的 IP 位址。
    通訊埠 80
  4. 按一下 [完成]

後端設定

  1. 按一下「後端設定」
  2. 按一下「後端服務和後端值區」
  3. 按一下「建立後端服務」
  4. 輸入名稱。
  5. 在「Backend type」部分,選取「Internet network endpoint group」
  6. 在「Protocol」部分,選取您要從負載平衡器傳送至網際網路 NEG 的通訊協定。在本例中,請選取「HTTP/2」
  7. 針對「Backends」,請在「New backend」視窗中選取上一個步驟中建立的網際網路 NEG。
  8. 點選「建立」

檢查並完成

  1. 按一下「檢查並完成」
  2. 如果沒有任何問題,請按一下「建立」

gcloud

  1. 建立後端服務:
      gcloud compute backend-services create BACKEND_SERVICE \
          --global
      
  2. 將網際網路 NEG 新增至後端服務:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --global-network-endpoint-group \
          --global
       
  3. 建立網址對應,將連入的要求轉送至後端服務:
      gcloud compute url-maps create URL_MAP_NAME \
          --default-service=BACKEND_SERVICE \
          --global
      
  4. 只有在您要建立 HTTPS 負載平衡器時,才執行這個步驟。但 HTTP 負載平衡器不需要執行這個步驟。

    如要建立 HTTPS 負載平衡器,您必須具備要在 HTTPS 目標 Proxy 中使用的 SSL 憑證資源。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。我們建議您使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。

    如要建立 Google 代管的憑證,您必須擁有網域。如果您沒有網域,可以使用自行管理的 SSL 憑證進行測試。

    建立 Google 代管的 SSL 憑證資源:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --domains DOMAIN
      
    如要建立自行管理的 SSL 憑證資源:
      gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
          --certificate CRT_FILE_PATH \
          --private-key KEY_FILE_PATH
      
  5. 建立目標 HTTP(S) Proxy,將要求轉送至您的網址對應。

    針對 HTTP 負載平衡器,請建立 HTTP 目標 Proxy:

      gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

    針對 HTTPS 負載平衡器,請建立 HTTPS 目標 Proxy。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡的 SSL 憑證,因此您還可以在此步驟中載入憑證。

      gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --ssl-certificates=SSL_CERTIFICATE_NAME \
          --url-map=URL_MAP_NAME \
          --global
      

    更改下列內容:

    • TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱。
    • TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱。
    • SSL_CERTIFICATE_NAME:SSL 憑證的名稱。
    • URL_MAP_NAME:網址對應項目的名稱。
  6. 建立轉送規則,將傳入要求轉送至 Proxy。

    針對 HTTP 負載平衡器:

      gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
          --address=LB_IP_ADDRESS_NAME \
          --target-http-proxy=TARGET_HTTP_PROXY_NAME \
          --global \
          --ports=80
      

    針對 HTTPS 負載平衡器:

      gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \
          --address=LB_IP_ADDRESS_NAME \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --global \
          --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 供應商,請參閱「新增、修改及刪除記錄」。

測試負載平衡器

負載平衡器已設定完成,您可以開始將流量傳送至負載平衡器的 IP 位址。如果您已設定網域,也可以將流量傳送至網域名稱。不過,DNS 更新可能需要一段時間才能完成,因此您可以先使用 IP 位址進行測試。

主控台

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

    前往「負載平衡」

  2. 點選剛剛建立的負載平衡器。

  3. 記下負載平衡器的 IP 位址。

  4. 將流量傳送至負載平衡器。

    • 如果您建立了 HTTP 負載平衡器,請前往 http://IP_ADDRESS 測試負載平衡器。請將 IP_ADDRESS 替換為負載平衡器的 IP 位址。系統應會將您導向在外部後端執行的應用程式。

    • 如果您建立了 HTTPS 負載平衡器,請前往 https://IP_ADDRESS 測試負載平衡器。請將 IP_ADDRESS 替換為負載平衡器的 IP 位址。系統應會將您導向在外部後端執行的應用程式。

    如果問題仍未解決,且您使用的是 Google 代管的憑證,請確認憑證資源狀態為「ACTIVE」(有效)。如需詳細資訊,請參閱 Google 代管 SSL 憑證資源狀態

    或者,您也可以使用本機電腦指令列中的 curl。請將 IP_ADDRESS 替換為負載平衡器的 IPv4 位址。如果您使用 Google 代管的憑證,請測試指向負載平衡器 IP 位址的網域。例如:

    curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
    

  5. 選用:如果您使用的是自訂網域,可能需要等待更新的 DNS 設定傳播。然後在網路瀏覽器中測試網域。

    如需疑難排解說明,請參閱「排解外部後端和網際網路 NEG 問題」。

額外設定

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

啟用 Cloud CDN

啟用 Cloud CDN 後,外部應用程式負載平衡器只會在 Cloud CDN 快取失敗時,將要求傳送至網際網路 NEG 後端。

主控台

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

    前往「負載平衡」

  2. 按一下要修改的負載平衡器名稱。

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

  5. 如果後端服務使用網際網路 NEG 後端,請按一下 「編輯」

  6. 選取「啟用 Cloud CDN」

  7. 選用:修改快取模式TTL 設定。

  8. 按一下「更新」

  9. 如要查看變更內容,請依序按一下「Review and finalize」和「Update」

gcloud

  • 如要在後端服務中啟用 Cloud CDN,請使用下列指令:
      gcloud compute backend-services update BACKEND_SERVICE \
          --global \
          --enable-cdn \
          --cache-mode=CACHE_MODE
      

    CACHE_MODE 替換為下列任一值,藉此設定快取模式

    • CACHE_All_STATIC:自動快取靜態內容
    • USE_ORIGIN_HEADERS (預設):要求來源設定有效的快取標頭,以便快取內容。
    • FORCE_CACHE_ALL:快取所有內容,忽略 Cache-Control 回應標頭中的任何 privateno-storeno-cache 指令。

使用自訂標頭驗證要求

如要驗證傳送至外部後端的要求,您可以設定自訂標頭,指出要求來自 Google Cloud 負載平衡器。舉例來說,您可以設定外部後端,讓後端預期 HTTP 要求的 Host 標頭為特定值,並設定後端服務,將 Host 標頭設為該預期值。

請按照下列步驟設定後端服務,為每項要求新增自訂 Host 標頭。

主控台

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

    前往「負載平衡」

  2. 按一下要修改的負載平衡器名稱。

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

  5. 如果後端服務使用網際網路 NEG 後端,請按一下 「編輯」

  6. 按一下 [Advanced configurations] (進階設定)

  7. 在「Custom request headers」(自訂要求標頭) 中,按一下「Add header」(新增標頭)

    1. 在「Header name」 中輸入 Host
    2. 在「Header value」中輸入 FQDN_NEG_ENDPOINT
  8. 按一下「更新」

  9. 如要查看變更內容,請依序按一下「Review and finalize」和「Update」

gcloud

  • 請使用下列指令設定後端服務,以便在每項要求中加入自訂的 `Host` 標頭。
      gcloud compute backend-services update BACKEND_SERVICE \
          --custom-request-header "Host: HEADER_VALUE" \
          --global
      

請務必也將外部後端設定為預期 Host 標頭,以便驗證傳入的要求。

如需自訂要求標頭的一般資訊,請參閱「設定自訂要求標頭」。如要瞭解其他驗證方法,請參閱「驗證外部後端的要求」。

在外部應用程式負載平衡器上啟用 IAP

注意:IAP 與 Cloud CDN 不相容。

您可以設定 IAP 是否啟用 (預設)。如果啟用,您必須提供 oauth2-client-idoauth2-client-secret 的值。

如要啟用 IAP,請更新後端服務,以便在 oauth2-client-idoauth2-client-secret 中納入 --iap=enabled 旗標。

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --iap=enabled,oauth2-client-id=ID,oauth2-client-secret=SECRET \
    --global

您也可以使用 Google Cloud 控制台、gcloud CLI 或 API,為 Compute Engine 資源啟用 IAP

後續步驟