設定 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 functions 或 Cloud Run 服務
  2. 如果尚未安裝 Google Cloud CLI,請先安裝
  3. 設定權限
  4. 新增 SSL 憑證資源

部署 App Engine、Cloud Run functions 或 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 functions: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 位址) 頁面。

    前往「External IP addresses」(外部 IP 位址)

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

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

  4. 在「網路服務級別」中,選取「進階」

  5. 在「IP version」(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

EXAMPLE_IP 替換為 IP 位址名稱。

建立 SSL 憑證資源

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

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

    此外,您需要更新網域的 DNS A 記錄,使其指向在上一個步驟中建立的負載平衡器 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. 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)
  6. 在「Load balancer generation」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)
  7. 按一下 [設定]

基本設定

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

前端設定

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

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

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

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

    屬性 值 (按照指示輸入值或選取選項)
    通訊協定 HTTPS
    網路服務級別 進階版
    IP 版本 IPv4
    IP 位址 example-ip
    通訊埠 443
    憑證 選取現有 SSL 憑證或建立新憑證。

    如要建立 HTTPS 負載平衡器,您必須擁有SSL 憑證資源,才能在 HTTPS Proxy 中使用。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。
    如要建立 Google 代管的憑證,您必須擁有網域。網域的 A 記錄必須解析為您在本程序中稍早建立的負載平衡器 IP 位址。建議使用 Google 代管憑證,因為系統會自動取得、管理及更新這些憑證。 Google Cloud 如果沒有網域,可以使用自行簽署的 SSL 憑證進行測試。
    選用:啟用從 HTTP 重新導向至 HTTPS 的功能 使用這個核取方塊啟用從 HTTP 重新導向至 HTTPS 的功能。

    勾選這個核取方塊後,系統會建立額外的部分 HTTP 負載平衡器,該平衡器會使用與 HTTPS 負載平衡器相同的 IP 位址,並將 HTTP 要求重新導向至負載平衡器的 HTTPS 前端。

    只有在選取 HTTPS 通訊協定並使用預留 IP 位址時,才能勾選這個核取方塊。

  5. 按一下 [完成]

後端設定

  1. 按一下「後端設定」
  2. 在「後端服務和後端值區」清單中,按一下「建立後端服務」
  3. 在「Name」部分輸入名稱。
  4. 在「Backend type」(後端類型) 中,選取「Serverless network endpoint group」(無伺服器網路端點群組)
  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 參考指南,瞭解 gcloud compute network-endpoint-groups create
  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 負載平衡器,您必須具備SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。 您可以使用 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. 在來源列的右側,按一下「選單」,然後選取「編輯」

  3. 取消勾選要停止使用 Cloud CDN 的後端服務核取方塊。

  4. 按一下「更新」

為來源的所有後端服務移除 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 後重新啟用這項服務,原有的大部分或所有快取內容應仍會保留在快取中。如果您不希望快取使用這些內容,則必須撤銷快取內容

後續步驟