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

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

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

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

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

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

圖 1 顯示架構範例。

圖 1. 外部後端的常見用途。
圖 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.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」(網路端點群組) 頁面。

    前往「網路端點群組」

  2. 按一下「建立網路端點群組」
  3. 輸入網路端點群組的名稱:example-fqdn-neg
  4. 在「網路端點群組類型」部分,選取「網路端點群組 (網際網路)」
  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. 按一下 [建立]。

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. 按一下「後端設定」
  4. 在「Backend services & backend buckets」(後端服務和後端值區) 選單中,選取「Create a backend service」(建立後端服務)
  5. 將後端服務的名稱設為 images
  6. 在「Backend type」部分,選取「Internet network endpoint group」
  7. 選取從負載平衡器到網際網路 NEG 要使用的通訊協定。在本示例中,請選取「HTTPS」HTTPS
  8. 在「New backend > Internet network endpoint group」(新增後端 > 網際網路網路端點群組) 下方,選取 example-fqdn-neg,然後按一下「Done」(完成)
  9. 選取「啟用 Cloud CDN」
  10. 選用:修改快取模式TTL 設定。
  11. 在「進階設定」的「自訂要求標頭」下方,按一下「新增標頭」
    1. 在「Header name」 中輸入 Host
    2. 在「Header value」中輸入 backend.example.com
  12. 按一下 [建立]。
  13. 將視窗保持開啟,以便繼續操作。

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

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

檢查並完成

  1. 按一下「檢查並完成」
  2. 將您的設定與您打算建立的內容進行比較。
  3. 如果沒有任何問題,請按一下「更新」

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

    前往「負載平衡」

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

    前往「負載平衡」

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

  3. 按一下「編輯」圖示

  4. 按一下「後端設定」

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

  6. 取消勾選「Enable Cloud CDN」核取方塊。

  7. 如要查看變更內容,請依序按一下「Review and finalize」和「Update」

gcloud

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

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

後續步驟