使用 Cloud Run、App Engine 或 Cloud Run functions 設定全域外部應用程式負載平衡器

本頁說明如何建立外部應用程式負載平衡器,將要求轉送至無伺服器後端。這裡的「無伺服器」一詞是指下列無伺服器運算產品:

  • App Engine
  • Cloud Run 函式
  • Cloud Run

將外部應用程式負載平衡器與 API Gateway 整合後,無伺服器後端就能充分利用 Cloud Load Balancing 提供的所有功能。如要設定外部應用程式負載平衡器,將流量轉送至 API Gateway,請參閱「API Gateway 外部應用程式負載平衡器的入門指南」。API Gateway 的外部應用程式負載平衡器支援功能目前處於前測階段。

無伺服器 NEG 可讓您搭配外部應用程式負載平衡器使用 Google Cloud 無伺服器應用程式。設定負載平衡器與無伺服器 NEG 後端後,系統會將負載平衡器的要求轉送至無伺服器應用程式後端。

如要進一步瞭解無伺服器 NEG,請參閱「無伺服器 NEG 總覽」。

如果您是傳統版應用程式負載平衡器的現有使用者,請務必在規劃使用全域外部應用程式負載平衡器的新部署作業時,詳閱遷移概覽

事前準備

  1. 部署 App Engine、Cloud Run 函式或 Cloud Run 服務
  2. 如果尚未安裝 Google Cloud CLI,請先安裝
  3. 設定權限
  4. 新增 SSL 憑證資源

部署 App Engine、Cloud Run 函式或 Cloud Run 服務

本頁面中的操作說明假設您已執行 Cloud Run、Cloud Run 函式或 App Engine 服務。

在本頁的範例中,我們使用 Cloud Run Python 快速入門,在 us-central1 區域部署 Cloud Run 服務。本頁面的其餘部分會說明如何設定外部應用程式負載平衡器,使用無伺服器 NEG 後端將要求轉送至此服務。

如果您尚未部署無伺服器應用程式,或是想透過範例應用程式試用無伺服器 NEG,請使用下列任一快速入門。您可以在任何地區建立無伺服器應用程式,但日後建立無伺服器 NEG 和負載平衡器時,必須使用相同的地區。

Cloud Run

如要建立簡易的 Hello World 應用程式、將其封裝到容器映像檔,然後將容器映像檔部署至 Cloud Run,請參閱「快速入門:建構及部署」一文。

如果您已將範例容器上傳至 Container Registry,請參閱快速入門導覽課程:部署預先建構的範例容器

Cloud Run functions

請參閱「Cloud Run 函式:Python 快速入門」。

App Engine

請參閱下列 Python 3 適用的 App Engine 快速入門指南:

安裝 Google Cloud CLI

安裝 Google Cloud CLI。如需該工具的概念與安裝資訊,請參閱 gcloud 概覽

如果您先前沒有執行過 gcloud CLI,請先執行 gcloud init,以初始化您的 gcloud 目錄。

設定權限

如要按照本指南操作,您必須在專案中建立無伺服器 NEG 和外部 HTTP(S) 負載平衡器。因此您必須是專案擁有者或編輯者,或是具有下列 Compute Engine 身分與存取權管理角色

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

保留外部 IP 位址

服務已啟動並開始執行,請設定全域靜態外部 IP 位址,讓客戶可透過該位址連線至負載平衡器。

主控台

  1. 在 Google Cloud 控制台中,前往「External IP addresses」(外部 IP 位址) 頁面。

    前往「外部 IP 位址」

  2. 按一下「保留外部靜態 IP 位址」

  3. 在「Name」(名稱) 中輸入 example-ip

  4. 在「Network service tier」(網路服務級別) 部分,選取「Premium」(進階級)。

  5. 在「IP 版本」部分,選取「IPv4」

  6. 在「Type」(類型) 部分,選取「Global」(全域)

  7. 按一下「保留」

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

請注意預留的 IPv4 位址:

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

建立 SSL 憑證資源

如要建立 HTTPS 負載平衡器,您必須在負載平衡器的前端新增 SSL 憑證資源。使用 Google 代管的 SSL 憑證自行管理的 SSL 憑證建立 SSL 憑證資源。

  • Google 代管憑證:建議您使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。

    此外,您需要更新網域的 DNS A 記錄,讓其指向上一個步驟 (example-ip) 中建立的負載平衡器 IP 位址。如果 Google 管理的憑證中有多個網域,您必須更新所有網域和子網域的 DNS 記錄,讓這些記錄指向負載平衡器的 IP 位址。如需詳細操作說明,請參閱「使用 Google 管理的憑證」。

  • 自行簽署的憑證。如果您目前不想設定網域,可以使用自行簽署的 SSL 憑證進行測試。

這個範例假設您已建立 SSL 憑證資源。

如果您想在不建立 SSL 憑證資源 (或 Google 代管憑證所需的網域) 的情況下測試這個程序,仍可使用本頁的操作說明來設定 HTTP 負載平衡器。

建立負載平衡器

在下圖中,負載平衡器使用無伺服器 NEG 後端,將要求導向至無伺服器 Cloud Run 服務。在這個範例中,我們使用 Cloud Run Python 快速入門部署 Cloud Run 服務。

Cloud Run 應用程式的外部應用程式負載平衡器架構。
Cloud Run 應用程式的外部應用程式負載平衡器架構 (按一下可放大)。

由於使用無伺服器 NEG 後端的後端服務不支援健康狀態檢查,因此如果負載平衡器只有無伺服器 NEG 後端,則您不需要建立健康狀態檢查。

控制台

開始設定

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

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

  2. 點選「建立負載平衡器」
  3. 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)
  4. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  5. 在「全域或單一區域部署」部分,選取「最適合全域工作負載」,然後點選「Next」
  6. 在「Load balancer generation」(負載平衡器代別) 部分,選取「Global external Application Load Balancer」(全域外部應用程式負載平衡器),然後點選「Next」(下一步)
  7. 按一下 [設定]

基本設定

  1. 在負載平衡器的名稱中輸入 serverless-lb
  2. 將視窗保持開啟,以便繼續操作。

前端設定

  1. 按一下「前端設定」
  2. 在「Name」 中輸入名稱。
  3. 如要建立 HTTPS 負載平衡器,您必須具備 SSL 憑證 (gcloud compute ssl-certificates list)。

    建議您使用 Google 代管的憑證,如前文所述。

  4. 如要設定外部應用程式負載平衡器,請按照下列方式填寫欄位。

    確認下列選項已設為指定的值:

    屬性 值 (依指示輸入值或選取選項)
    通訊協定 HTTPS
    網路服務級別 Premium
    IP 版本 IPv4
    IP 位址 example-ip
    通訊埠 443
    選用:HTTP 保持運作逾時 請輸入 5 到 1200 秒的逾時時間值。預設值為 610 秒。
    憑證 選取現有的 SSL 憑證或建立新憑證。

    如要建立 HTTPS 負載平衡器,您必須具備要在 HTTPS Proxy 中使用的 SSL 憑證資源。您可以使用 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 位址 example-ip
    通訊埠 80
    選用:HTTP 保持運作逾時 請輸入 5 到 1200 秒的逾時時間值。預設值為 610 秒。
  5. 按一下 [完成]

後端設定

  1. 按一下「後端設定」
  2. 在「後端服務和後端值區」清單中,按一下「建立後端服務」
  3. 在「Name」 中輸入名稱。
  4. 在「Backend type」中,選取「無伺服器網路端點群組」
  5. 請勿變更「Protocol」。系統會忽略此參數。
  6. 在「Backends」部分,針對「New backend」,選取「Create Serverless network endpoint group」
  7. 在「Name」 中輸入名稱。
  8. 在「Region」(區域) 中,依序選取「us-central1」和「Cloud Run」
  9. 選取「選取服務名稱」
  10. 在「Service」清單中,選取要為其建立負載平衡器的 Cloud Run 服務。
  11. 按一下 [建立]。
  12. 在「New backend」部分中,按一下「Done」
  13. 按一下 [建立]。

轉送規則

轉送規則會決定流量的導向方式。如要設定路由,您必須設定主機規則和路徑比對器,這兩者是外部應用程式負載平衡器的 網址對應設定元件。

  1. 按一下「轉送規則」

  2. 保留預設主機和路徑。在本例中,所有要求都會傳送至先前步驟中建立的後端服務。

查看設定

  1. 按一下「檢查並完成」
  2. 查看所有設定。
  3. 選用:按一下「等效程式碼」,查看用於建立負載平衡器的 REST API 要求。
  4. 按一下 [建立]。
  5. 等待負載平衡器建立完成。
  6. 按一下負載平衡器的名稱 (serverless-lb)。
  7. 記下負載平衡器的 IP 位址,以便在下一項工作中使用。這個值稱為 IP_ADDRESS

gcloud

  1. 為無伺服器應用程式建立無伺服器的 NEG。

    如要使用 Cloud Run 服務建立無伺服器 NEG,請按照下列步驟操作:

       gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \
           --region=us-central1 \
           --network-endpoint-type=serverless  \
           --cloud-run-service=CLOUD_RUN_SERVICE_NAME
       
    如需更多選項,請參閱 gcloud compute network-endpoint-groups creategcloud 參考指南。
  2. 建立後端服務。
       gcloud compute backend-services create BACKEND_SERVICE_NAME \
           --load-balancing-scheme=EXTERNAL_MANAGED \
           --global
       
  3. 將無伺服器 NEG 新增至後端服務,做為後端使用:
       gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
           --global \
           --network-endpoint-group=SERVERLESS_NEG_NAME \
           --network-endpoint-group-region=us-central1
       
  4. 建立網址對應,將連入的要求轉送至後端服務:
       gcloud compute url-maps create URL_MAP_NAME \
           --default-service BACKEND_SERVICE_NAME
       

    這個範例網址對應只會指定一個代表單一無伺服器應用程式的後端服務,因此我們不需要設定主機規則或路徑比對器。如果您有多個後端服務,可以使用主機規則,根據主機名稱將要求導向至不同的服務,並設定路徑比對器,根據要求路徑將要求導向至不同的服務。

  5. 如要建立 HTTPS 負載平衡器,您必須在 HTTPS 目標 Proxy 中使用SSL 憑證資源。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。建議您使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。

    如要建立 Google 代管憑證, 您必須擁有網域。如果您沒有網域,可以使用自行簽署的 SSL 憑證進行測試。

    如要建立 Google 代管的 SSL 憑證資源,請按照下列步驟操作:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --domains DOMAIN
       
    如要建立自行管理的 SSL 憑證資源,請按照下列步驟操作:
       gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \
           --certificate CRT_FILE_PATH \
           --private-key KEY_FILE_PATH
       
  6. 建立目標 HTTP(S) Proxy,將要求轉送至網址對應。

    針對 HTTP 負載平衡器,請建立 HTTP 目標 Proxy:

       gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \
          --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
          --url-map=URL_MAP_NAME
       

    針對 HTTPS 負載平衡器,請建立 HTTPS 目標 Proxy。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡的 SSL 憑證,因此您還可以在此步驟中載入憑證。

       gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
           --http-keep-alive-timeout-sec=HTTP_KEEP_ALIVE_TIMEOUT_SEC \
           --ssl-certificates=SSL_CERTIFICATE_NAME \
           --url-map=URL_MAP_NAME
       

    更改下列內容:

    • TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱。
    • TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱。
    • HTTP_KEEP_ALIVE_TIMEOUT_SEC:選用欄位,用於指定 用戶端 HTTP 保持運作逾時。逾時時間值必須介於 5 至 1200 秒。預設值為 610 秒。
    • SSL_CERTIFICATE_NAME:SSL 憑證的名稱。
    • URL_MAP_NAME:網址對應項目的名稱。
  7. 建立轉送規則,將傳入要求轉送至 Proxy。

    針對 HTTP 負載平衡器:

       gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \
       --load-balancing-scheme=EXTERNAL_MANAGED \
       --network-tier=PREMIUM \
       --address=example-ip \
       --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=example-ip \
           --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
           --global \
           --ports=443
       

將網域連結至負載平衡器

建立負載平衡器後,請記下與負載平衡器相關聯的 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」(負載平衡)頁面。

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

  2. 按一下剛剛建立的負載平衡器。

  3. 記下負載平衡器的 IP 位址

  4. 對於 HTTP 負載平衡器,您可以前往 http://IP_ADDRESS,使用網路瀏覽器測試負載平衡器。請將 IP_ADDRESS 替換為負載平衡器的 IP 位址。系統應會將您導向 helloworld 服務首頁。

  5. 如要測試 HTTPS 負載平衡器,您可以前往 https://IP_ADDRESS,使用網路瀏覽器測試負載平衡器。請將 IP_ADDRESS 替換為負載平衡器的 IP 位址。系統應會將您導向 helloworld 服務首頁。
    如果這麼做無法解決問題,且您使用的是 Google 代管的憑證,請確認憑證資源的狀態為「ACTIVE」(有效)。如需詳細資訊,請參閱 Google 代管的 SSL 憑證資源狀態
    如果您使用自行簽署的憑證進行測試,您的瀏覽器會出現警告。您必須明確指示瀏覽器接受自行簽署的憑證。只要按一下警告訊息即可查看實際頁面。

其他設定選項

本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選填項目。您可以按任何順序執行這些工作。

設定多區域負載平衡

在本頁先前所述的範例中,我們只有一個 Cloud Run 服務可做為 us-central1 地區的後端。由於無伺服器 NEG 一次只能指向一個端點,因此不會跨區域執行負載平衡。外部應用程式負載平衡器只會做為前端,並將流量轉送至指定的 helloworld 應用程式端點。不過,您可能會想從多個區域提供 Cloud Run 應用程式,以改善使用者延遲時間。

如果後端服務附加了多個無伺服器 NEG,負載平衡器會將要求轉送至最近可用區域的���伺服器 NEG,���此���衡流量。不過,後端服務只能在每個區域中包含一個無伺服器 NEG。如要讓 Cloud Run 服務可在多個地區使用,您必須設定跨區域路由。您應該可以使用單一網址配置,讓使用者在世界各地都能存取,但服務請求會從最接近使用者的地區提供。

如要設定多區域服務,您必須使用進階網路層級,確保所有區域 Cloud Run 部署相容,並且可為任何區域提供流量。

如要設定多區域負載平衡器,請按照下列步驟操作:

  1. 在不同地區設定兩個 Cloud Run 服務。假設您已部署兩個 Cloud Run 服務:一個位於美國的區域,另一個位於歐洲的區域。
  2. 按照下列設定建立外部應用程式負載平衡器:
    1. 設定含有兩個無伺服器網路端點群組 (NEG) 的全域後端服務:
      1. 在美國部署 Cloud Run 服務的相同區域中,建立第一個 NEG。
      2. 在與在歐洲部署的 Cloud Run 服務相同的區域中,建立第二個 NEG。
    2. 使用 Premium 網路服務級別設定前端設定。

下圖顯示最終設定。

無伺服器應用程式的多區域路由。
無伺服器應用程式的多區域路由

本節將建立在此頁面先前所述的負載平衡器設定上,您在 us-central1 區域中建立了一個無伺服器 NEG,指向同區域中的 Cloud Run 服務。這也假設您已在 europe-west1 地區建立第二個 Cloud Run 服務。您建立的第二個無伺服器 NEG 會指向 europe-west1 區域中的這個 Cloud Run 服務。

在本例中,您將完成下列步驟:

  1. europe-west1 區域中建立第二個無伺服器 NEG。
  2. 將第二個無伺服器 NEG 附加到後端服務。

如要將第二個無伺服器 NEG 新增至現有的後端服務,請按照下列步驟操作。

主控台

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

    前往「負載平衡」

  2. 按一下您要編輯後端服務的負載平衡器名稱。

  3. 在「Load balancer details」(負載平衡器詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器)頁面上,按一下「Backend configuration」(後端設定)

  5. 在「Backend configuration」(後端設定) 頁面上,針對要修改的後端服務,按一下 「Edit」(編輯)

  6. 在「後端」部分中,按一下「新增後端」

  7. 在「無伺服器網路端點群組」清單中,選取「建立無伺服器網路端點群組」

  8. 輸入無伺服器 NEG 的名稱。

  9. 在「Region」(區域) 中選取 europe-west1

  10. 針對「無伺服器網路端點群組類型」,選取「Cloud Run」,然後執行下列操作:

    1. 選取「選取服務」選項。
    2. 在「Service」清單中,選取要為其建立負載平衡器的 Cloud Run 服務。
  11. 按一下 [建立]。

  12. 在「新增後端」頁面中,按一下「完成」

  13. 按一下 [儲存]

  14. 如要更新後端服務,請按一下「更新」

  15. 如要更新負載平衡器,請在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面中,按一下「Update」(更新)

gcloud

  1. 在部署 Cloud Run 服務的相同區域中,建立第二個無伺服器 NEG。

    gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME_2 \
      --region=europe-west1 \
      --network-endpoint-type=SERVERLESS \
      --cloud-run-service=CLOUD_RUN_SERVICE_2
    

    更改下列內容:

    • SERVERLESS_NEG_NAME_2:第二個無伺服器 NEG 的名稱
    • CLOUD_RUN_SERVICE_2:Cloud Run 服務名稱
  2. 將第二個無伺服器 NEG 新增至後端服務,做為後端使用。

    gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \
      --global \
      --network-endpoint-group=SERVERLESS_NEG_NAME_2 \
      --network-endpoint-group-region=europe-west1
    

    更改下列內容:

    • BACKEND_SERVICE_NAME:後端服務名稱
    • SERVERLESS_NEG_NAME_2:第二個無伺服器 NEG 的名稱

搭配多區域 Cloud Run 部署作業使用已驗證的 Pub/Sub 推送訂閱

對於已經驗證的推送要求,Cloud Run 預設會要求區域特定的目標對象欄位。如果是多區域 Cloud Run 部署作業,如果推送要求會轉送至位於不同區域的 Cloud Run 服務,由於對象不相符,JWT 權杖驗證會失敗。

如要解決這項地區性限制,請採取下列做法:

  1. 為不同地區的服務部署設定相同的自訂目標對象
  2. 設定 Pub/Sub 推播訊息,以便將自訂目標對象用作 JWT 權杖中的目標對象

設定區域路由

提供來自多個區域的應用程式,通常是為了滿足資料區域需求。舉例來說,您可能會想確保歐洲使用者提出的要求一律由位於歐洲的地區提供服務。如要設定這項功能,您需要使用網址架構,為歐盟和非歐盟使用者提供不同的網址,並將歐盟使用者導向至歐盟網址。

在這種情況下,您可以使用網址對應,將來自特定網址的要求轉送至相應的地區。在這種設定下,針對某個區域提出的要求絕不會傳送至其他區域。這可確保各區域之間的隔離。另一方面,如果某個區域發生問題,要求就不會路由至其他區域。因此,這項設定不會增加服務的可用性。

如要設定區域路由,您必須使用進階網路級別,才能在單一轉送規則中結合不同區域。

如要設定區域性路由的負載平衡器,請按照下列步驟操作:

  1. 在不同地區設定兩個 Cloud Run 服務。假設您已部署兩個 Cloud Run 服務:hello-world-eu 部署至歐洲地區,hello-world-us 部署至美國地區。
  2. 按照下列設定建立外部應用程式負載平衡器:
    1. 在歐洲設定具有無伺服器 NEG 的後端服務。無伺服器 NEG 必須與在歐洲部署的 Cloud Run 服務位於相同區域。
    2. 在美國設定第二個後端服務,並使用另一個無伺服器 NEG。這個無伺服器 NEG 必須與在美國部署的 Cloud Run 服務位於相同區域。
    3. 設定網址對應時,請使用適當的主機和路徑規則,讓一組網址轉送至歐洲後端服務,而所有要求則轉送至美國後端服務。
    4. 使用進階網路級別設定前端。

其餘設定步驟可按照先前說明進行。最終設定應如下所示:

無伺服器應用程式的區域路由,不支援備援機制。
無伺服器應用程式區域路由 (不含備援)

使用網址遮罩

建立無伺服器 NEG 時,您可以使用網址遮罩指向位於同一網域的多個服務,而非選取特定 Cloud Run 服務。網址遮罩是網址配置的範本。無伺服器 NEG 會使用這個範本,從傳入要求的網址中擷取服務名稱,並將要求對應至適當的服務。

如果您的服務對應至自訂網域,而非Google Cloud 為已部署的服務提供的預設位址,網址遮罩就特別實用。即使應用程式使用自訂網址模式,您也可以透過單一規則指定多個服務和版本。

如果您尚未閱讀,請務必參閱「Serverless NEG ������:網址遮罩」。

建構網址遮罩

如要為負載平衡器建構網址遮罩,請先從服務的網址開始。在本範例中,我們會使用在 https://example.com/login 上執行的範例無伺服器應用程式。這是應用程式 login 服務的網址。

  1. 從網址中移除 httphttps。您還剩下 example.com/login
  2. 將服務名稱替換為網址遮罩的預留位置。
    1. Cloud Run:將 Cloud Run 服務名稱替換為預留位置 <service>。如果 Cloud Run 服務有相關聯的標記,請將標記名稱替換為預留位置 <tag>。在本範例中,您會保留 example.com/<service> 的網址遮罩。
    2. Cloud Run 函式:將函式名稱替換為預留位置 <function>。在本範例中,您會保留 example.com/<function> 的網址遮罩。
    3. App Engine:將服務名稱替換為預留位置 <service>。如果服務有相關聯的版本,請將版本替換為預留位置 <version>。在本範例中,您會保留 example.com/<service> 的網址遮罩。
    4. API Gateway:將閘道名稱替換為預留位置 <gateway>。在本範例中,您會保留 example.com/<gateway> 的網址遮罩。
  3. (選用) 如果服務名稱 (或函式、版本或代碼) 可從網址的路徑部分擷取,則可省略網域。網址遮罩的路徑部分會以第一個 / 字元區分開來。如果網址遮罩中沒有 /,則系統會將遮罩視為僅代表主機。因此,在本例中,網址遮罩可縮減為 /<service>/<gateway>/<function>

    同樣地,如果服務名稱可從網址的主機部分擷取,您可以從網址遮罩中完全省略路徑。

    您也可以省略第一個預留位置前面的任何主機或子網域元件,以及最後一個預留位置後面的任何路徑元件。在這種情況下,預留位置會擷取元件所需的資訊。

以下列舉幾個示例說明這些規則:

Cloud Run

本表假設您有一個名為 example.com 的自訂網域,且所有 Cloud Run 服務都會使用外部應用程式負載平衡器對應至這個網域。

服務、標記名稱 自訂網域網址 網址遮罩
service: login https://login-home.example.com/web <service>-home.example.com
service: login https://example.com/login/web example.com/<service> 或 /<service>
service: login, tag: test https://test.login.example.com/web <tag>.<service>.example.com
service: login, tag: test https://example.com/home/login/test example.com/home/<service>/<tag> 或 /home/<service>/<tag>
service: login, tag: test https://test.example.com/home/login/web <tag>.example.com/home/<service>

Cloud Run 函式

本表假設您有名為 example.com 的自訂網域,且所有 Cloud Run 函式服務都會對應至這個網域。

函式名稱 自訂網域網址 網址遮罩
登入 https://example.com/login /<function>
登入 https://example.com/home/login /home/<function>
登入 https://login.example.com <function>.example.com
登入 https://login.home.example.com <function>.home.example.com

App Engine

本表假設您有一個名為 example.com 的自訂網域,且所有 App Engine 服務都會對應至這個網域。

服務名稱和版本 自訂網域網址 網址遮罩
service: login https://login.example.com/web <service>.example.com
service: login https://example.com/home/login/web example.com/home/<service> 或 /home/<service>
service: login, version: test https://test.example.com/login/web <version>.example.com/<service>
service: login, version: test https://example.com/login/test example.com/<service>/<version>

API Gateway

本表假設您有一個名為 example.com 的自訂網域,且所有 API Gateway 服務都對應至這個網域

閘道名稱 API Gateway(預先發布版) 自訂網域網址 網址遮罩
登入 https://example.com/login /<gateway>
登入 https://example.com/home/login /home/<gateway>
登入 https://login.example.com <gateway>.example.com
登入 https://login.home.example.com <gateway>.home.example.com

使用網址遮罩建立無伺服器 NEG

主控台

對於新的負載平衡器,您可以使用本主題前述的端對端程序。設定後端服務時,請輸入網址遮罩,而非選取特定服務。

如果您有現有的負載平衡器,可以編輯後端設定,讓無伺服器 NEG 指向網址遮罩,而非特定服務。

如要將以網址遮罩為基礎的無伺服器 NEG 新增至現有的後端服務,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「負載平衡」頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 按一下您要編輯後端服務的負載平衡器名稱。
  3. 在「Load balancer details」(負載平衡器詳細資料) 頁面上,按一下「Edit」(編輯) 圖示
  4. 在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面上,按一下「Backend configuration」(後端設定)
  5. 在「Backend configuration」頁面中,針對要修改的後端服務,按一下「Edit」
  6. 點選「新增後端」
  7. 選取「建立無伺服器網路端點群組」
    1. 在「Name」 中輸入 helloworld-serverless-neg
    2. 在「Region」(地區) 下,選取 [us-central1]
    3. 在「無伺服器網路端點群組類型」下方,選取無伺服器應用程式 (或服務或函式) 的建立平台。
      1. 選取「使用網址遮罩」
      2. 輸入網址遮罩。如要瞭解如何建立網址遮罩,請參閱「建構網址遮罩」一文。
      3. 按一下 [建立]。
  8. 在「New backend」部分中,按一下「Done」
  9. 按一下 [Update]

gcloud:Cloud Run

如要使用 example.com/<service> 範例網址遮罩建立無伺服器 NEG,請按照下列步驟操作:

gcloud compute network-endpoint-groups create helloworld-neg-mask \
  --region=us-central1 \
  --network-endpoint-type=serverless \
  --cloud-run-url-mask="example.com/<service>"

gcloud:Cloud Run 函式

如要使用 example.com/<service> 範例網址遮罩建立無伺服器 NEG,請按照下列步驟操作:

gcloud compute network-endpoint-groups create helloworld-neg-mask \
 --region=us-central1 \
 --network-endpoint-type=serverless \
 --cloud-function-url-mask="example.com/<service>"

gcloud:App Engine

如要使用 example.com/<service> 的範例網址遮罩建立無伺服器 NEG,請按照下列步驟操作:

gcloud compute network-endpoint-groups create helloworld-neg-mask \
    --region=us-central1 \
    --network-endpoint-type=serverless \
    --app-engine-url-mask="example.com/<service>"

gcloud:API Gateway

如要使用 example.com/<gateway> 的範例網址遮罩建立無伺服器 NEG,請按照下列步驟操作:

gcloud beta compute network-endpoint-groups create helloworld-neg-mask \
  --region=us-central1 \
  --network-endpoint-type=serverless \
  --serverless-deployment-platform=apigateway.googleapis.com \
  --serverless-deployment-resource=my-gateway \
  --serverless-deployment-url-mask="example.com/<gateway>"

如要瞭解負載平衡器如何處理網址遮罩不相符的問題,請參閱無伺服器 NEG 的疑難排解問題

將自訂網域移至由外部應用程式負載平衡器提供服務

如果您的無伺服器運算應用程式已對應至自訂網域,建議您更新 DNS 記錄,以便將傳送至現有 Cloud Run、Cloud Run 函式、API Gateway 或 App Engine 自訂網域網址的流量,改為透過負載平衡器進行路由。

舉例來說,如果您有名為 example.com 的自訂網域,且所有 Cloud Run 服務都已對應至這個網域,請更新 example.com 的 DNS 記錄,指向負載平衡器的 IP 位址。

更新 DNS 記錄前,您可以先在本機測試設定,將自訂網域的本機 DNS 解析強制設為負載平衡器的 IP 位址。如要在本機測試,請修改本機上的 /etc/hosts/ 檔案,將 example.com 指向負載平衡器的 IP 位址,或是使用 curl --resolve 標記,強制 curl 使用負載平衡器的 IP 位址來提出要求。

example.com 的 DNS 記錄解析為 HTTP(S) 負載平衡器的 IP 位址時,系統就會開始透過負載平衡器轉送傳送至 example.com 的要求。負載平衡器會根據網址對應,將這些要求分派至相關的後端服務。此外,如果後端服務已設有網址遮罩,無伺服器 NEG 會使用該遮罩將要求轉送至適當的 Cloud Run、Cloud Run 函式、API Gateway 或 App Engine 服務。

啟用 Cloud CDN

為 Cloud Run 服務啟用 Cloud CDN 後,您就能在使用者附近快取內容,藉此改善內容傳遞品質。

您可以使用 gcloud compute backend-services update 指令,在全球外部應用程式負載平衡器使用的後端服務上啟用 Cloud CDN。

gcloud compute backend-services update helloworld-backend-service 
--enable-cdn
--global

Cloud CDN 支援使用 Cloud Run、Cloud Run 函式、API Gateway 和 App Engine 後端的後端服務。

在外部應用程式負載平衡器上啟用 IAP

注意:IAP 與 Cloud CDN 不相容。

您可以設定 IAP 是否啟用 (預設)。如果啟用,您必須提供 oauth2-client-idoauth2-client-secret 的值。

如要啟用 IAP,請更新後端服務,以便在 oauth2-client-idoauth2-client-secret 中納入 --iap=enabled 旗標。

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

啟用 Google Cloud Armor

Google Cloud Armor 是一款安全防護產品,可為所有 GCLB 代理負載平衡器提供防範分散式阻斷服務 (DDoS) 攻擊的保護機制。Google Cloud Armor 也為透過外部應用程式負載平衡器存取的服務提供可設定的安全性政策。如要瞭解外部應用程式負載平衡器的 Google Cloud Armor 安全性政策,請參閱「Google Cloud Armor 安全性政策總覽」。

如果您使用的是 Cloud Run 函式,可以使用 internal-and-gclb 輸入設定,確保傳送至預設網址的請求遭到封鎖。

如果您使用 Cloud Run,可以限制輸入至「內部和雲端負載平衡器」,確保傳送至預設網址或透過 Cloud Run 設定的任何其他自訂網域的請求遭到封鎖。

如果您使用的是 App Engine,可以使用入站控制項,讓應用程式只接收來自負載平衡器 (以及您使用的 VPC) 的請求。

如果沒有適當的入口設定,使用者可以使用無伺服器應用程式的預設網址,略過負載平衡器、Google Cloud Armor 安全性政策、SSL 憑證和透過負載平衡器傳遞的私密金鑰。

選用步驟:設定預設的後端安全性政策。預設安全政策會限制超過使用者設定門檻的流量。如要進一步瞭解預設安全性政策,請參閱「頻率限制總覽」。

  1. 如要停用 Google Cloud Armor 的預設安全性政策,請在後端安全性政策清單選單中選取 None
  2. 在「安全性」部分中,選取「預設安全政策」
  3. 在「Policy name」欄位中,接受系統自動產生的名稱,或輸入安全政策的名稱。
  4. 在「Request count」欄位中,接受預設要求數量,或輸入介於 110,000 之間的整數。
  5. 在「間隔」欄位中選取間隔。
  6. 在「Enforce on key」欄位中,選擇下列其中一個值:「All」、「IP address」或「X-Forwarded-For IP address」。如要進一步瞭解這些選項,請參閱「識別用於頻率限制的用戶端」。

啟用記錄和監控功能

您可以啟用、停用及查看外部應用程式負載平衡器後端服務的記錄。使用 Google Cloud 主控台時,系統會預設為啟用後端服務的記錄功能,這些後端服務會使用無伺服器 NEG 後端。您可以使用 gcloud 視需要停用每個後端服務的記錄功能。如需操作說明,請參閱「記錄」。

負載平衡器也會將監控資料匯出至 Cloud Monitoring。您可以使用監控指標評估負載平衡器的設定、用量和效能。指標也可用於排解問題,並改善資源利用率和使用者體驗。如需操作說明,請參閱「監控」。

更新用戶端 HTTP 保持運作逾時時間

在先前步驟中建立的負載平衡器已設定 用戶端 HTTP keepalive 逾時的預設值。

如要更新用戶端 HTTP keepalive 逾時值,請按照下列操作說明操作。

���制台

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

    前往「負載平衡」

  2. 按一下要修改的負載平衡器名稱。
  3. 按一下「編輯」圖示
  4. 按一下「前端設定」
  5. 展開「進階功能」。在「HTTP 保持運作逾時」中,輸入逾時值。
  6. 按一下 [Update]
  7. 如要查看變更內容,請依序按一下「Review and finalize」和「Update」

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 秒。

啟用離群值偵測

您可以在全球後端服務上啟用異常值偵測功能,以便找出無伺服器 NEG 異常情形,並減少傳送至無伺服器 NEG 異常值的請求數量。

您可以使用下列任一方法,在後端服務中啟用異常值偵測功能:

  • consecutiveErrors 方法 (outlierDetection.consecutiveErrors),其中 5xx 系列 HTTP 狀態碼視為錯誤。
  • consecutiveGatewayFailure 方法 (outlierDetection.consecutiveGatewayFailure),其中只有 502503504 HTTP 狀態碼可視為錯誤。

請按照下列步驟,為現有後端服務啟用異常值偵測功能。請注意,即使啟用異常值偵測功能,某些要求仍可能會傳送至不健康的服務,並傳回 5xx 狀態碼給用戶端。如要進一步降低錯誤率,您可以為異常值偵測參數設定更積極的值。詳情請參閱 outlierDetection 欄位

主控台

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

    前往「負載平衡」

  2. 按一下您要編輯後端服務的負載平衡器名稱。

  3. 在「Load balancer details」(負載平衡器詳細資料) 頁面中,按一下 「Edit」(編輯)

  4. 在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面上,按一下「Backend configuration」(後端設定)

  5. 在「Backend configuration」(後端設定) 頁面上,針對要修改的後端服務,按一下 「Edit」(編輯)

  6. 向下捲動並展開「進階設定」部分。

  7. 在「異常值偵測」部分,勾選「啟用」核取方塊。

  8. 按一下 「編輯」,設定異常值偵測功能。

    確認下列選項已設為指定的值:

    屬性
    連續錯誤 5
    間隔 1000
    基礎排除時間 30000
    排除百分比上限 50
    強制執行連續錯誤 100

    在本範例中,系統每秒執行一次異常值偵測分析。如果 Envoy Proxy 收到的連續 HTTP 5xx 狀態碼數量達到五個以上,後端端點就會從該 Envoy Proxy 的負載平衡集區中移除 30 秒。當強制百分比設為 100% 時,後端服務會在每次執行異常情況偵測分析時,強制從特定 Envoy Proxy 的負載平衡集區中,將不健康的端點彈出。如果符合排除條件,最多可從負載平衡集區中排除 50% 的後端端點。

  9. 按一下 [儲存]

  10. 如要更新後端服務,請按一下「更新」

  11. 如要更新負載平衡器,請在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面中,按一下「Update」(更新)

gcloud

  1. 將後端服務匯出為 YAML 檔案。

    gcloud compute backend-services export BACKEND_SERVICE_NAME \
      --destination=BACKEND_SERVICE_NAME.yaml --global
    

    BACKEND_SERVICE_NAME 替換為後端服務名稱。

  2. 編輯後端服務的 YAML 設定,新增異常值偵測欄位,如下列 YAML 設定中 outlierDetection 部分所示:

    在本範例中,系統每秒執行一次異常值偵測分析。如果 Envoy Proxy 收到的連續 HTTP 5xx 狀態碼數量達到五個以上,後端端點就會從該 Envoy Proxy 的負載平衡集區中移除 30 秒。當強制百分比設為 100% 時,後端服務會在每次執行異常情況偵測分析時,強制從特定 Envoy Proxy 的負載平衡集區中,將不健康的端點彈出。如果符合排除條件,最多可從負載平衡集區中排除 50% 的後端端點。

    name: BACKEND_SERVICE_NAME
    backends:
    - balancingMode: UTILIZATION
      capacityScaler: 1.0
      group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_A/networkEndpointGroups/SERVERLESS_NEG_NAME
    - balancingMode: UTILIZATION
      capacityScaler: 1.0
      group: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_B/networkEndpointGroups/SERVERLESS_NEG_NAME_2
    outlierDetection:
      baseEjectionTime:
        nanos: 0
        seconds: 30
      consecutiveErrors: 5
      enforcingConsecutiveErrors: 100
      interval:
        nanos: 0
        seconds: 1
      maxEjectionPercent: 50
    port: 80
    selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME
    sessionAffinity: NONE
    timeoutSec: 30
    ...
    

    更改下列內容:

    • BACKEND_SERVICE_NAME:後端服務名稱
    • PROJECT_ID:專案 ID
    • REGION_AREGION_B:已設定負載平衡器的區域。
    • SERVERLESS_NEG_NAME:第一個無伺服器 NEG 的名稱
    • SERVERLESS_NEG_NAME_2:第二個無伺服器 NEG 的名稱
  3. 匯入最新設定,更新後端服務。

    gcloud compute backend-services import BACKEND_SERVICE_NAME \
      --source=BACKEND_SERVICE_NAME.yaml --global
    

    後端服務現在已啟用離群值偵測功能。

刪除無伺服器網路端點群組 (NEG)

如果已將網路端點群組附加至後端服務,則無法予以刪除。刪除 NEG 之前,請確保已將其從後端服務卸離。

主控台

  1. 如要確保您要刪除的無伺服器 NEG 目前未供任何後端服務使用,請前往「負載平衡進階選單」中的「後端服務」分頁。
    前往「Backend services」(後端服務) 分頁
  2. 如果目前正在使用無伺服器 NEG:
    1. 按一下使用無伺服器 NEG 的後端服務名稱。
    2. 按一下「編輯」圖示
    3. 在「Backends」清單中,按一下 即可從後端服務中移除無伺服器 NEG 後端。
    4. 按一下 [儲存]
  3. 前往 Google Cloud 主控台的「Network Endpoint Group」(網路端點群組) 頁面。
    前往「網路端點群組」頁面
  4. 找出要刪除的無伺服器 NEG,然後勾選對應的核取方塊。
  5. 點選「刪除」。
  6. 再按一下 [刪除] 加以確認。

gcloud

如要從後端服務移除無伺服器 NEG,您必須指定 NEG 建立的地區。您還必須指定 --global 標記,因為 helloworld-backend-service 是全域資源。

gcloud compute backend-services remove-backend helloworld-backend-service \
    --network-endpoint-group=helloworld-serverless-neg \
    --network-endpoint-group-region=us-central1 \
    --global

如要刪除無伺服器 NEG,請按照下列步驟操作:

gcloud compute network-endpoint-groups delete helloworld-serverless-neg \
    --region=us-central1

後續步驟