使用網際網路 NEG 設定外部後端

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

本指南會逐步說明如何設定全域外部應用程式負載平衡器,並啟用 Cloud CDN 的後端服務,將 Proxy 連線至位於 backend.example.com 的外部後端伺服器。

在本範例中,負載平衡器會接受用戶端的 HTTPS 要求,並以 HTTPS 形式轉送至外部後端。這個範例假設外部後端支援 HTTPS。

其他選項包括將負載平衡器設為接受 HTTP 或 HTTPS 要求,並在透過 Proxy 將要求轉送至外部後端時使用 HTTPS。

本指南假設您已設定負載平衡器,並且要新增外部後端。詳情請參閱「設定後端為代管執行個體群組的傳統版應用程式負載平衡器」。

圖 1 顯示範例架構。

圖 1. 外部後端的典型用途。
圖 1. 外部後端的典型用途。

在圖表中,www.example.com 有一個負載平衡器前端,IP 位址為 120.1.1.1。快取失敗時,系統會透過 HTTPS 從外部後端擷取使用者對 /cart/id/1223515 的要求。所有其他傳入流量都會根據網址對應,導向後端 bucket 或具有 Compute Engine VM 的 Google Cloud 後端服務。

事前準備

按照本指南操作之前,請先熟悉以下內容:

權限

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

工作 必要角色
建立及修改負載平衡器元件 網路管理員
建立及修改 NEG Compute 執行個體管理員

設定具備外部後端的負載平衡器

本節說明如何設定及測試網際網路 NEG。

設定總覽

設定網際網路 NEG 的步驟如下:

  • 在網際網路 NEG 中定義網際網路端點。
  • 將網際網路 NEG 新增為後端服務的後端。
  • 設定外部應用程式負載平衡器的網址對應,定義要將哪些使用者流量對應至這個後端服務。
  • 將必要的 IP 範圍加入許可清單。

此範例會建立下列資源:

  • 具有 120.1.1.1 IP 位址的轉送規則會將傳入要求導向至目標 Proxy。
    • 轉送規則的 networkTier 必須是 PREMIUM
  • 目標 Proxy 會根據網址對應檢查每個要求,決定適合要求的後端服務。
    • 如果是外部後端,目標 Proxy 必須是 TargetHttpProxyTargetHttpsProxy。此範例使用 TargetHttpsProxy
  • 後端服務啟用 Cloud CDN (選用) 後,就能快取及提供 Cloud CDN 快取的回應。
  • 此範例包含自訂標頭,如果外部後端預期 HTTP 要求的 Host 標頭具有特定值,就需要這個標頭。

設定方式如下所示。

圖 2. 使用地端部署後端的 Cloud CDN。
圖 2. 使用地端部署後端的 Cloud CDN。

建立 NEG 和網際網路端點

控制台

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

    前往「Network endpoint groups」(網路端點群組)

  2. 按一下「Create network endpoint group」(建立網路端點群組)
  3. 輸入網路端點群組的名稱:example-fqdn-neg
  4. 在「Network endpoint group type」(網路端點群組類型) 部分,選取「Network endpoint group (Internet)」(網路端點群組 (網際網路))
  5. 在「Default port」(預設通訊埠) 部分,輸入 443
  6. 在「New network endpoint」(新網路端點) 部分,選取「Fully qualified domain name and port」(完整網域名稱與通訊埠)
  7. 在 FQDN 部分,輸入 backend.example.com
  8. 在「Port type」(通訊埠類型) 部分,選取「Default」(預設),並確認「Port number」(通訊埠編號)443
  9. 按一下「Create」(建立)

gcloud

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

    gcloud compute network-endpoint-groups create example-fqdn-neg \
        --network-endpoint-type="internet-fqdn-port" --global
    
  2. 將端點新增至 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
    
  3. 列出已建立的網際網路 NEG:

    gcloud compute network-endpoint-groups list --global
    

    輸出內容:

    NAME                LOCATION   ENDPOINT_TYPE        SIZE
    example-fqdn-neg    global     INTERNET_FQDN_PORT   1
    

  4. 列出該 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

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

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

  2. 如要將後端服務新增至現有負載平衡器,請選取傳統版應用程式負載平衡器,然後按一下 「Menu」(選單) ,再選取「Edit」(編輯)
  3. 按一下「Backend configuration」(後端設定)
  4. 在「Backend services & backend buckets」(後端服務和後端 bucket) 選單中,選取「Create a backend service」(建立後端服務)
  5. 將後端服務的名稱設為 images
  6. 在「Backend type」(後端類型) 部分,選取「Internet network endpoint group」(網際網路的網路端點群組)
  7. 選取負載平衡器與網際網路 NEG 之間要使用的通訊協定。在此範例中,請選取「HTTPS」
  8. 在「New backend > Internet network endpoint group」(新增後端 > 網際網路的網路端點群組) 下方,選取 example-fqdn-neg,然後按一下「Done」(完成)
  9. 選取「Enable Cloud CDN」(啟用 Cloud CDN)
  10. 選用:修改快取模式存留時間設定。
  11. 在「Advanced configurations」(進階設定) 的「Custom request headers」(自訂要求標頭) 下方,按一下「Add header」(新增標頭)
    1. 「Header name」(標頭名稱) 請輸入 Host
    2. 「Header value」(標頭值) 請輸入 backend.example.com
  12. 按一下「Create」(建立)
  13. 不要關閉視窗,以便繼續操作。

將後端服務附加至現有網址對應

  1. 按一下「Host and path rules」(主機與路徑規則)
  2. 第一個資料列或多個資料列的右欄中已填入 Google Cloud 服務,其中一個已填入「Hosts」(主機) 與「Paths」(路徑) 的預設規則 Any unmatched (default)
  3. 確認右欄中已選取包含 images 的資料列。如果此資料列不存在,請按一下「Add host and path rules」(新增主機與路徑規則),然後選取 images。請依照下列資訊填入其他欄位:
    1. 在「Hosts」(主機) 中輸入 *
    2. 在「Paths」(路徑) 中輸入 /cart/id/1223515

檢查並完成

  1. 按一下「Review and finalize」(檢查並完成)
  2. 比較設定與打算建立的內容。
  3. 如果沒有任何問題,請按一下「Update」(更新)

gcloud

  1. 為 NEG 建立新的後端服務:

    gcloud compute backend-services create images \
       --global \
       --enable-cdn \
       --cache-mode=CACHE_MODE \
       --protocol=HTTP2
    

    CACHE_MODE 替換為下列其中一項,設定快取模式

    • CACHE_ALL_STATIC:自動快取靜態內容

    • USE_ORIGIN_HEADERS (預設):來源必須設定有效快取標頭,才能快取內容

    • FORCE_CACHE_ALL:快取所有內容,忽略 Cache-Control 回應標頭中的任何 privateno-storeno-cache 指令

  2. 設定後端服務,將自訂要求標頭 Host: backend.example.com 新增至要求:

    gcloud compute backend-services update images \
       --custom-request-header "Host: backend.example.com" --global
    
  3. 使用 backend-services add-backend 指令,將網際網路 NEG 新增至後端服務:

    gcloud compute backend-services add-backend images \
      --network-endpoint-group "example-fqdn-neg" \
      --global-network-endpoint-group \
      --global
    
  4. 建立新的比對規則,將新的後端服務附加至負載平衡器的網址對應,將要求導向該後端:

    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,必須使用 dignslookup 等工具查詢 _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.comexample.comA 記錄,請使用以下方法:

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 位址。系統會自動導向 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
    

  5. 選用:如果使用自訂網域,可能需要等待更新的 DNS 設定傳播完畢,再於網路瀏覽器中測試網域 (例如 backend.example.com)。

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

停用 Cloud CDN

控制台

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

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

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

  3. 點選「Edit」(編輯)

  4. 按一下「Backend configuration」(後端設定)

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

  6. 取消勾選「Enable Cloud CDN」(啟用 Cloud CDN) 核取方塊。

  7. 如要查看變更內容,請依序點選「Review and finalize」(檢查並完成) 和「Update」(更新)

gcloud

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --no-enable-cdn

停用 Cloud CDN 並不會撤銷或清除快取內容。如果您在停用 Cloud CDN 後重新啟用這項服務,原有的大部分或所有快取內容應仍會保留在快取中。如果不希望快取使用這些內容,則必須撤銷快取內容

後續步驟

  • 如要確認 Cloud CDN 是否從快取提供回應,請參閱「快取的記錄和指標」。
  • 如要瞭解哪些內容可快取或無法快取,請參閱「快取總覽」。
  • 如要查看 GFE 網路連接點,請參閱「快取位置」。