本指南會透過範例說明在外部應用程式負載平衡器中使用外部後端 (有時稱為「自訂來源」) 的基本概念。外部後端是指外部 Google Cloud的端點。當您使用外部後端搭配外部應用程式負載平衡器時,可以使用 Cloud CDN 快取來改善效能。
本指南將逐步說明如何設定全域外部應用程式負載平衡器,並啟用 Cloud CDN 的後端服務,以便將 Proxy 連線至 backend.example.com 的外部後端伺服器。
在這個範例中,負載平衡器會接受用戶端的 HTTPS 要求,並將這些要求以 HTTPS 形式轉送至外部後端。此範例假設外部後端支援 HTTPS。
其他選項包括將負載平衡器設為接受 HTTP 或 HTTPS 要求,並在將要求轉送至外部後端時使用 HTTPS。
本指南假設您已設定負載平衡器,並且要新增外部後端。詳情請參閱「設定傳統應用程式負載平衡器,並使用代管執行個體群組做為後端」。
圖 1 顯示架構範例。
在圖表中,www.example.com 有一個負載平衡器前端,其 IP 位址為 120.1.1.1。當快取失敗時,系統會透過 HTTPS 從外部後端擷取使用者對 /cart/id/1223515 的要求。所有其他傳入流量都會根據網址對應,導向具有 Compute Engine VM 的 Google Cloud 後端服務或後端值區。
事前準備
在您依循這份指南操作之前,請先熟悉以下概念:
網際網路端點群組總覽,其中包含限制。
權限
如要按照本指南操作,您必須建立網際網路網路端點群組 (NEG),並在專案中建立或修改外部應用程式負載平衡器。因此您必須是專案擁有者或編輯者,或是應具有以下兩個 Compute Engine 身分與存取權管理角色:
| 工作 | 必要角色 |
|---|---|
| 建立及修改負載平衡器元件 | 網路管理員 |
| 建立及修改 NEG | Compute 執行個體管理員 |
設定具備外部後端的負載平衡器
本節說明如何設定及測試網路 NEG。
設定總覽
設定網際網路 NEG 的步驟如下:
- 在網際網路 NEG 中定義網際網路端點。
- 將網際網路 NEG 新增為後端服務的後端。
- 設定外部應用程式負載平衡器的網址對應,定義要將哪些使用者流量對應至此後端服務。
- 將必要的 IP 範圍加入許可清單。
這個範例會建立下列資源:
- 含有
120.1.1.1IP 位址的轉送規則會將傳入要求導向至目標 Proxy。 - 轉送規則的
networkTier必須為PREMIUM。 - 目標 Proxy 會根據網址對應檢查每個要求,以決定適合要求的後端服務。
- 對於外部後端,目標 Proxy 必須為
TargetHttpProxy或TargetHttpsProxy。本範例使用TargetHttpsProxy。 - 後端服務啟用 Cloud CDN (選用) 後,可快取 Cloud CDN 快取的回應,並提供這些回應。
- 這個範例包含自訂標頭,當外部後端預期 HTTP 要求的
Host標頭具有特定值時,就需要這個標頭。
設定方式如下所示。
建立 NEG 和網際網路端點
主控台
- 在 Google Cloud 控制台中,前往「Network endpoint groups」(網路端點群組) 頁面。
- 按一下「建立網路端點群組」。
- 輸入網路端點群組的名稱:
example-fqdn-neg。 - 在「網路端點群組類型」部分,選取「網路端點群組 (網際網路)」。
- 在「Default port」(預設通訊埠) 中輸入
443。 - 在「New network endpoint」(新網路端點) 中,選取「Fully qualified domain name and port」(完整網域名稱與通訊埠)。
- 在 FQDN 中輸入
backend.example.com。 - 在「Port type」(通訊埠類型) 中,選取「Default」(預設),並確認「Port number」(通訊埠號碼) 為
443。 - 按一下 [建立]。
gcloud
建立網際網路 NEG,並將
--network-endpoint-type設為internet-fqdn-port(可存取外部後端的主機名稱和通訊埠):gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global將端點新增至 NEG。如果未指定通訊埠,通訊埠選項會預設為通訊埠
80(HTTP) 或443(HTTPS;HTTP/2),具體取決於後端服務中設定的通訊協定。請務必加入--global標記:gcloud compute network-endpoint-groups update example-fqdn-neg \ --add-endpoint="fqdn=backend.example.com,port=443" \ --global列出已建立的網際網路 NEG:
gcloud compute network-endpoint-groups list --global
輸出:
NAME LOCATION ENDPOINT_TYPE SIZE example-fqdn-neg global INTERNET_FQDN_PORT 1
列出該 NEG 中的端點:
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global輸出:
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
在負載平衡器中新增外部後端
以下範例會更新現有的負載平衡器。
在現有的負載平衡器中,預設服務是 Google Cloud服務。這個範例會新增路徑比對器,藉此修改現有的網址對應,將 cart/id/1223515 的所有要求傳送至與網路 NEG 相關聯的 images 後端服務。
主控台
建立後端服務並新增網際網路 NEG
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 如要將後端服務新增至現有負載平衡器,請選取傳統的應用程式負載平衡器,然後按一下 「Menu」,再選取「Edit」。
- 按一下「後端設定」。
- 在「Backend services & backend buckets」(後端服務和後端值區) 選單中,選取「Create a backend service」(建立後端服務)。
- 將後端服務的名稱設為
images。 - 在「Backend type」部分,選取「Internet network endpoint group」。
- 選取從負載平衡器到網際網路 NEG 要使用的通訊協定。在本示例中,請選取「HTTPS」HTTPS。
- 在「New backend > Internet network endpoint group」(新增後端 > 網際網路網路端點群組) 下方,選取
example-fqdn-neg,然後按一下「Done」(完成)。 - 選取「啟用 Cloud CDN」。
- 選用:修改快取模式和 TTL 設定。
- 在「進階設定」的「自訂要求標頭」下方,按一下「新增標頭」。
- 在「Header name」 中輸入
Host。 - 在「Header value」中輸入
backend.example.com。
- 在「Header name」 中輸入
- 按一下 [建立]。
- 將視窗保持開啟,以便繼續操作。
將後端服務附加至現有的網址對應
- 按一下「Host and path rules」(主機與路徑規則)。
- 第一列或多列的右欄中已填入 Google Cloud 服務,其中一個已填入「Hosts」和「Paths」的預設規則
Any unmatched (default)。 - 確認右欄中有選取
images的資料列。如果不存在,請按一下「Add host and path rule」(新增主機與路徑規則),然後選取images。請依照下列資訊填入其他欄位:- 在「Hosts」中輸入
*。 - 在「Paths」中輸入
/cart/id/1223515。
- 在「Hosts」中輸入
檢查並完成
- 按一下「檢查並完成」。
- 將您的設定與您打算建立的內容進行比較。
- 如果沒有任何問題,請按一下「更新」。
gcloud
為 NEG 建立新的後端服務:
gcloud compute backend-services create images \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE \ --protocol=HTTP2
將 CACHE_MODE 替換為下列任一項目,藉此設定快取模式:
設定後端服務,將自訂要求標頭
Host: backend.example.com新增至要求:gcloud compute backend-services update images \ --custom-request-header "Host: backend.example.com" --global
使用
backend-services add-backend指令將網路 NEG 新增至後端服務:gcloud compute backend-services add-backend images \ --network-endpoint-group "example-fqdn-neg" \ --global-network-endpoint-group \ --global
建立新的比對規則,將新後端服務附加至負載平衡器的網址對應,將要求導向該後端:
gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \ --default-service=GCP_SERVICE_EXAMPLE \ --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \ --backend-service-path-rules=/CART/ID/1223515=IMAGES
更改下列內容:
EXAMPLE_URL_MAP:現有網址對應表的名稱GCP_SERVICE_EXAMPLE:現有預設後端服務的名稱CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE:這個新路徑規則的名稱/CART/ID/1223515:路徑IMAGES:附加網際網路 NEG 的新後端服務名稱
將必要的 IP 範圍加入許可清單
如要允許外部應用程式負載平衡器將要求傳送至網際網路 NEG,您必須使用 dig 或 nslookup 等工具查詢 _cloud-eoips.googleusercontent.com DNS TXT 記錄。
例如,執行下列 dig 指令:
dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
輸出內容包含兩個 IP 範圍,如下所示:
34.96.0.0/20
34.127.192.0/18
請記下 IP 範圍,並確認防火牆或雲端存取控制清單 (ACL) 允許這些範圍。
詳情請參閱「驗證要求」。
將網域連結至負載平衡器
建立負載平衡器後,請記下與負載平衡器相關聯的 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 位址。系統應會將您導向helloworld服務首頁。如果您建立了 HTTPS 負載平衡器,可以使用
https://IP_ADDRESS中的網路瀏覽器測試負載平衡器。請將IP_ADDRESS替換為負載平衡器的 IP 位址。系統應會將您導向helloworld服務首頁。如果問題仍未解決,且您使用的是 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 設定傳播。然後在網路瀏覽器中測試您的網域 (例如
backend.example.com)。如需疑難排解說明,請參閱「排解外部後端和網際網路 NEG 問題」。
停用 Cloud CDN
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
按一下要修改的負載平衡器名稱。
按一下「編輯」圖示 。
按一下「後端設定」。
如果後端服務使用網際網路 NEG 後端,請按一下 「編輯」。
取消勾選「Enable Cloud CDN」核取方塊。
如要查看變更內容,請依序按一下「Review and finalize」和「Update」。
gcloud
gcloud compute backend-services update BACKEND_SERVICE_NAME \
--no-enable-cdn
停用 Cloud CDN 並不會撤銷或清除快取內容。如果您在停用 Cloud CDN 後重新啟用這項服務,原有的大部分或所有快取內容應仍會保留在快取中。如果您不希望快取使用這些內容,則必須撤銷快取內容。