本指南使用範例,說明如何搭配全域外部應用程式負載平衡器使用外部後端 (有時也稱為「自訂來源」) 的基本知識。外部後端是指 Google Cloud外部的端點。使用全域外部應用程式負載平衡器搭配外部後端時,您可以透過 Cloud CDN 快取提升效能。
本指南說明如何設定全域外部應用程式負載平衡器,並使用啟用 Cloud CDN 的後端服務,將要求 Proxy 至外部後端伺服器。
在按照本指南操作之前,請先詳閱 Internet NEG 總覽說明文件,包括限制。下方的架構圖顯示全域外部應用程式負載平衡器前端,以及外部後端。
權限
如要按照本指南操作,您必須在專案中建立網際網路 NEG,以及建立或修改外部應用程式負載平衡器。因此您必須是專案擁有者或編輯者 (roles/owner 或 roles/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 位址,請使用 dig 或 nslookup 等工具查詢 _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 位址,供用戶端連上應用程式。
主控台
- 前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。 
- 按一下「保留外部靜態位址」,預留 IPv4 位址。 
- 輸入名稱。 
- 在「Network Service Tier」(網路服務級別) 部分,選取「Premium」(進階級)。 
- 在「IP version」(IP 版本) 部分,選取「IPv4」。 
- 在「Type」(類型) 部分,選取「Global」(全域)。 
- 按一下「保留」。 
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
主控台
- 前往 Google Cloud 控制台的「Network endpoint groups」(網路端點群組) 頁面。 
- 按一下「建立網路端點群組」。 
- 輸入名稱。 
- 在「網路端點群組類型」部分,選取「網路端點群組 (網際網路)」。 
- 在「Default port」(預設通訊埠) 欄中,輸入 - 443。
- 在「New network endpoint」(新的網路端點) 中,選取「Fully qualified domain name and port」(完整網域名稱與通訊埠)。 
- 輸入完整網域名稱。 
- 在「Port type」(通訊埠類型) 欄中,選取「Default」(預設),並確認「Port number」(通訊埠編號) 為 - 443。
- 點選「建立」。 
gcloud
- 建立網際網路 NEG,並將 - --network-endpoint-type設為- internet-fqdn-port(可連線至外部後端的主機名稱和通訊埠):- gcloud compute network-endpoint-groups create INTERNET_NEG_NAME \ --network-endpoint-type="internet-fqdn-port" \ --global
- 將端點新增至 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
建立負載平衡器
主控台
選取負載平衡器類型
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型) 部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external Application Load Balancer」(全域外部應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
前端設定
- 按一下「前端設定」。
- 輸入名稱。
- 如要建立 HTTPS 負載平衡器,您必須擁有 SSL 憑證。 建議使用 Google 代管的憑證。 - 確認下列選項已設為指定的值。 - 屬性 - 值 (按照指示輸入值或選取選項) - 通訊協定 - HTTPS - 網路服務級別 - 進階版 - IP 版本 - IPv4 - IP 位址 - 選取在「保留外部 IP 位址」步驟中建立的 IP 位址。 - 通訊埠 - 443 - 選用:HTTP 保持運作逾時 - 請輸入介於 5 到 1200 秒之間的逾時值。預設值為 610 秒。 - 憑證 - 選取現有 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 - 選用:HTTP 保持運作逾時 - 請輸入介於 5 到 1200 秒之間的逾時值。預設值為 610 秒。 
- 按一下 [完成]。 
後端設定
- 按一下「後端設定」。
- 按一下「後端服務和後端值區」。
- 按一下「建立後端服務」。
- 輸入名稱。
- 在「Backend type」(後端類型) 部分,選取「Internet network endpoint group」(網際網路網路端點群組)。
- 在「通訊協定」部分,選取負載平衡器與網際網路 NEG 之間要使用的通訊協定。在本範例中,請選取「HTTP/2」。
- 在「Backends」(後端) 的「New backend」(新增後端) 視窗中,選取上一個步驟建立的網際網路 NEG。
- 點選「建立」。
檢查並完成
- 按一下「檢查並完成」。
- 確認一切無誤後,請按一下「建立」。
gcloud
- 建立後端服務:
  
  
  gcloud compute backend-services create BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
- 將網際網路 NEG 新增至後端服務:
  gcloud compute backend-services add-backend BACKEND_SERVICE \ --network-endpoint-group=INTERNET_NEG_NAME \ --global-network-endpoint-group \ --global
- 建立網址對應,將連入要求轉送至後端服務:
  gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE \ --global
- 只有在想建立 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- gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
- 建立目標 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:網址對應表名稱。
 - --http-keep-alive-timeout-sec選項設定用戶端 HTTP 持續連線逾時。逾時值必須介於 5 至 1200 秒之間。預設值為 610 秒。
- 建立轉送規則,將連入要求轉送至 Proxy。 - 如果是 HTTP 負載平衡器: - gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --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 \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --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.com 和 example.com 建立 A 記錄,請使用下列指令:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果您使用 Cloud DNS 做為 DNS 供應商,請參閱「新增、修改及刪除記錄」。
測試負載平衡器
負載平衡器設定完成後,即可開始將流量傳送至負載平衡器的 IP 位址。如果您已設定網域,也可以將流量傳送至網域名稱。不過,DNS 傳播可能需要一段時間才能完成,因此您可以先使用 IP 位址進行測試。
主控台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 點選剛剛建立的負載平衡器。 
- 記下負載平衡器的 IP 位址。 
- 將流量傳送至負載平衡器。 - 如果您建立的是 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 
- 選用:如果您使用自訂網域,可能需要等待更新後的 DNS 設定傳播完畢。接著,在網路瀏覽器中測試網域。 - 如需疑難排解說明,請參閱「排解外部後端和網際網路 NEG 問題」。 
額外設定
本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選擇性的。您可以按任何順序執行這些工作。
啟用 Cloud CDN
啟用 Cloud CDN 後,只有在 Cloud CDN 快取失敗時,外部應用程式負載平衡器才會將要求傳送至網際網路 NEG 後端。
主控台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 按一下要修改的負載平衡器名稱。 
- 按一下「編輯」。 
- 按一下「後端設定」。 
- 針對具有網際網路 NEG 後端的後端服務,按一下「編輯」。 
- 選取「啟用 Cloud CDN」。 
- 按一下「更新」。 
- 如要檢查變更,請依序按一下「檢查並完成」和「更新」。 
gcloud
- 如要在後端服務上啟用 Cloud CDN,請使用下列指令:
  
  
  gcloud compute backend-services update BACKEND_SERVICE \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE將 CACHE_MODE替換為下列其中一個選項,設定快取模式:
使用自訂標頭驗證要求
如要驗證傳送至外部後端的要求,可以設定自訂標頭,指出要求來自 Google Cloud 負載平衡器。舉例來說,您可以設定外部後端,讓 HTTP 要求的 Host 標頭採用特定值,並設定後端服務,將 Host 標頭設為該預期值。
請按照下列步驟設定後端服務,為每個要求新增自訂 Host 標頭。
主控台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 按一下要修改的負載平衡器名稱。 
- 按一下「編輯」。 
- 按一下「後端設定」。 
- 針對具有網際網路 NEG 後端的後端服務,按一下「編輯」。 
- 按一下 [Advanced configurations] (進階設定)。 
- 如要新增自訂要求標頭,請按一下「新增標頭」: - 在「Header name」(標題名稱) 中輸入 Host。
- 在「Header value」(標頭值) 中,輸入 FQDN_NEG_ENDPOINT。
 
- 在「Header name」(標題名稱) 中輸入 
- 按一下「更新」。 
- 如要檢查變更,請依序按一下「檢查並完成」和「更新」。 
gcloud
- 使用下列指令設定後端服務,為每個要求新增自訂 `Host` 標頭。
  
  
  gcloud compute backend-services update BACKEND_SERVICE \ --custom-request-header "Host: HEADER_VALUE" \ --load-balancing-scheme=EXTERNAL_MANAGED \ --global
請務必一併設定外部後端,預期會收到 Host 標頭,以便驗證傳入的要求。
如需自訂要求標頭的一般資訊,請參閱「設定自訂要求標頭」。如要瞭解其他驗證方法,請參閱驗證對外部後端的要求。
在外部應用程式負載平衡器上啟用 IAP
注意:IAP 與 Cloud CDN 不相容。您可以設定啟用或停用 IAP (預設為停用)。啟用這項功能後,您必須提供 oauth2-client-id 和 oauth2-client-secret 的值。
如要啟用 IAP,請更新後端服務,加入 --iap=enabled 旗標和 oauth2-client-id 和 oauth2-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。
更新用戶端 HTTP 保持運作逾時
先前步驟中建立的負載平衡器已設定 用戶端 HTTP 保持連線逾時的預設值。如要更新用戶端 HTTP 保持連線逾時,請按照下列操作說明操作。
控制台
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 按一下要修改的負載平衡器名稱。
- 按一下「編輯」。
- 按一下「前端設定」。
- 展開「進階功能」。在「HTTP 保持運作逾時」部分, 輸入逾時值。
- 按一下「更新」。
- 如要檢查變更,請依序按一下「檢查並完成」和「更新」。
gcloud
如果是 HTTP 負載平衡器,請使用 gcloud compute target-http-proxies update 指令更新目標 HTTP Proxy:
      gcloud compute target-http-proxies update TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --global
    如果是 HTTPS 負載平衡器,請使用 gcloud compute target-https-proxies update 指令更新目標 HTTPS Proxy:
      gcloud compute target-https-proxies update TARGET_HTTPS_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --global
    更改下列內容:
- TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱。
- TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱。
- HTTP_KEEP_ALIVE_TIMEOUT_SEC:HTTP 保持運作逾時值,範圍為 5 到 600 秒。
後續步驟
- 如要確認 Cloud CDN 是否從快取提供回應,請參閱查看記錄。
- 如要瞭解哪些內容可快取或不可快取,請參閱快取總覽。
- 如要瞭解 Cloud CDN 的連接點,請參閱「快取位置」。
- 清除負載平衡器設定。
- 如要瞭解如何停用 Cloud CDN,請參閱「停用 Cloud CDN」。