設定 Cloud Run、Cloud Functions 或 App Engine

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

  • 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」(負載平衡器代別) 部分,選取「Classic 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
    憑證 選取現有的 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 位址時,才能勾選這個核取方塊。

  5. 按一下 [完成]

後端設定

  1. 按一下「後端設定」
  2. 在「後端服務和後端值區」清單中,按一下「建立後端服務」
  3. 在「Name」 中輸入名稱。
  4. 在「Backend type」中,選取「無伺服器網路端點群組」
  5. 請勿變更「Protocol」。系統會忽略此參數。
  6. 在「Backends」部分,針對「New backend」,選取「Create Serverless network endpoint group」
  7. 在「Name」 中輸入名稱。
  8. 按一下 [建立]。
  9. 在「New backend」部分中,按一下「Done」
  10. 選取「啟用 Cloud CDN」
  11. 選用:修改快取模式TTL 設定。
  12. 按一下 [建立]。

轉送規則

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

  1. 按一下「Host and path rules」(主機與路徑規則)

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

查看設定

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

gcloud

  1. 為無伺服器應用程式建立無伺服器 NEG。 如需更多選項,請參閱 gcloud compute network-endpoint-groups creategcloud 參考指南。
  2. 建立後端服務。
       gcloud compute backend-services create BACKEND_SERVICE_NAME \
           --load-balancing-scheme=LOAD_BALANCING_SCHEME \
           --global \
           --enable-cdn \
           --cache-mode=CACHE_MODE \
           --custom-response-header='Cache-Status: {cdn_cache_status}' \
           --custom-response-header='Cache-ID: {cdn_cache_id}'
       

    CACHE_MODE 替換為下列任一值,藉此設定快取模式

    • CACHE_All_STATIC (預設):自動快取靜態內容
    • USE_ORIGIN_HEADERS:需要來源設定有效的快取標頭,才能快取內容。
    • FORCE_CACHE_ALL:快取所有內容,忽略 Cache-Control 回應標頭中的任何 privateno-storeno-cache 指令。

    如要瞭解 Cloud CDN 瞭解的快取指示,以及 Cloud CDN 不會快取的內容,請參閱「可快取的內容」和「無法快取的內容」。

  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,將要求轉送至網址對應。

    針對 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
       
  7. 建立轉送規則,將傳入要求轉送至 Proxy。

    針對 HTTPS 負載平衡器:

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

  5. 如要驗證快取回應,請使用本機電腦的指令列中的 curl。請將 IP_ADDRESS 替換為負載平衡器的 IPv4 位址

    如果您使用的是 Google 代管的憑證,請測試指向負載平衡器 IP 位址的網域。例如:

    curl -v -o/dev/null https://IP_ADDRESS
    

    如果您使用自行簽署的憑證,則必須一併指定 -k 標記。例如:

    curl -v -o/dev/null -k -s 'https://DOMAIN:443' --connect-to DOMAIN:443:IP_ADDRESS:443
    

    即便您使用的是自行簽署的憑證,curl -k 選項還是可以讓 curl 指令正常運作。-k 參數應僅使用於測試自己的網站。在一般情況下,有效的憑證是相當重要的安全防護措施,您也不應忽略憑證警告。

    輸出內容應包含您設定的自訂標頭 Cache-IDCache-Status,用於指出回應是否來自快取:

    HTTP/2 200
    cache-status: hit
    cache-id: SEA-b9fa975e
    

    輸出內容包含回應標頭,指出有快取命中,也就是說,Cloud CDN 邊緣快取會將無伺服器應用程式中的靜態資產提供給使用者。

    對於未在 Cloud CDN 中快取的回應,cache-status 標頭會顯示 disabled 值。對於快取的回應,cache-status 標頭值為 hitmissrevalidated

停用 Cloud CDN

主控台

為單一後端服務停用 Cloud CDN

  1. 前往 Google Cloud 控制台的「Cloud CDN」頁面。

    前往 Cloud CDN

  2. 在來源列的右側,按一下「Menu」圖示 ,然後選取「Edit」

  3. 取消勾選您要停止使用 Cloud CDN 的所有後端服務。

  4. 按一下 [Update]

為來源移除所有後端服務的 Cloud CDN

  1. 前往 Google Cloud 控制台的「Cloud CDN」頁面。

    前往 Cloud CDN

  2. 在來源列的右側,按一下「選單」圖示 ,然後選取「移除」

  3. 按一下 [移除] 加以確認。

gcloud

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

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

後續步驟