本指南使用範例,說明如何搭配全域外部應用程式負載平衡器使用外部後端 (有時也稱為「自訂來源」) 的基本知識。外部後端是指 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」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
前端設定
- 按一下「前端設定」。
- 輸入名稱。
如要建立 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 按一下 [完成]。
後端設定
- 按一下「後端設定」。
- 按一下「後端服務和後端值區」。
- 按一下「建立後端服務」。
- 輸入名稱。
- 在「Backend type」(後端類型) 部分,選取「Internet network endpoint group」(網際網路網路端點群組)。
- 在「通訊協定」部分,選取負載平衡器與網際網路 NEG 之間要使用的通訊協定。在本範例中,請選取「HTTP/2」。
- 在「Backends」(後端) 的「New backend」(新增後端) 視窗中,選取上一個步驟建立的網際網路 NEG。
- 點選「建立」。
檢查並完成
- 按一下「檢查並完成」。
- 確認一切無誤後,請按一下「建立」。
gcloud
- 建立後端服務:
gcloud compute backend-services create BACKEND_SERVICE \ --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 憑證資源: 如要建立自行管理的 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
:網址對應表名稱。
建立轉送規則,將連入要求轉送至 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.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 \ --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" \ --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。
後續步驟
- 如要確認 Cloud CDN 是否從快取提供回應,請參閱查看記錄。
- 如要瞭解哪些內容可快取或不可快取,請參閱快取總覽。
- 如要瞭解 Cloud CDN 的連接點,請參閱「快取位置」。
- 清除負載平衡器設定。