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

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

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

在按照本指南操作之前,請先詳閱 Internet NEG 總覽說明文件,包括限制

下方的架構圖顯示全域外部應用程式負載平衡器前端,以及外部後端。

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

權限

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

工作 必要角色
建立及修改負載平衡器元件 Compute 網路管理員
(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 位址) 頁面。

    前往「External IP addresses」(外部 IP 位址)

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

  3. 輸入名稱。

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

  5. 在「IP version」(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. 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)
  6. 在「Load balancer generation」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)
  7. 按一下 [設定]

前端設定

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

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

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

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

    如要建立 HTTPS 負載平衡器,您必須具備SSL 憑證資源,才能在 HTTPS Proxy 中使用。您可以使用 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. 在「通訊協定」部分,選取負載平衡器與網際網路 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 負載平衡器,您必須具備SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。建議使用 Google 代管的憑證,因為 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」(負載平衡)頁面。

    前往「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」(負載平衡)頁面。

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

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

  3. 按一下「編輯」

  4. 按一下「後端設定」

  5. 針對具有網際網路 NEG 後端的後端服務,按一下「編輯」

  6. 選取「啟用 Cloud CDN」

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

  8. 按一下「更新」

  9. 如要檢查變更,請依序按一下「檢查並完成」和「更新」

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」(負載平衡)頁面。

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

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

  3. 按一下「編輯」

  4. 按一下「後端設定」

  5. 針對具有網際網路 NEG 後端的後端服務,按一下「編輯」

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

  7. 如要新增自訂要求標頭,請按一下「新增標頭」

    1. 在「Header name」(標題名稱) 中輸入 Host
    2. 在「Header value」(標頭值) 中,輸入 FQDN_NEG_ENDPOINT
  8. 按一下「更新」

  9. 如要檢查變更,請依序按一下「檢查並完成」和「更新」

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,請更新後端服務,加入 --iap=enabled 旗標和 oauth2-client-idoauth2-client-secret

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

後續步驟