使用 Cloud Run、Cloud Functions 或 App Engine 設定 Cloud CDN

本頁面說明如何建立外部 HTTP(S) 負載平衡器,將要求轉送至無伺服器後端。「無伺服器」一詞是指下列無伺服器運算產品:App Engine、Cloud Functions 和 Cloud Run。

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

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

事前準備

  1. 部署 App Engine、Cloud Functions 或 Cloud Run 服務
  2. 安裝 Google Cloud SDK (如果尚未安裝)。
  3. 設定權限
  4. 新增 SSL 憑證資源

部署 App Engine、Cloud Functions 或 Cloud Run 服務

本頁中的操作說明假設您已設有 Cloud Run、Cloud Functions 或 App Engine 服務。

在這個範例中,我們使用 Cloud Run Python 快速入門導覽課程us-central1 地區部署 Cloud Run 服務。本頁的其餘部分會說明如何設定外部 HTTP(S) 負載平衡器,以便使用無伺服器 NEG 後端將要求轉送至這項服務。

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

Cloud Run

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

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

Cloud Functions

請參閱 Cloud Functions:Python 快速入門導覽課程

App Engine

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

安裝 Google Cloud SDK

安裝 gcloud 指令列工具。如需該工具的概念與安裝資訊,請參閱 gcloud 總覽

如果您先前沒有執行過 gcloud 指令列工具,請先執行 gcloud init 初始化 gcloud 目錄。

設定權限

如要依照本指南的說明操作,請先建立無伺服器 NEG 並在專案中建立外部 HTTP(S) 負載平衡器。因此您必須是專案擁有者或編輯者,或是具有下列 Compute Engine IAM 角色

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

保留外部 IP 位址

現在您的服務已啟動並正在執行,請設定可供客戶用來連上負載平衡器的全域靜態外部 IP 位址

主控台

  1. 前往 Google Cloud Console 的「External IP addresses」(外部 IP 位址) 頁面。
    前往「External IP addresses」(外部 IP 位址) 頁面
  2. 按一下 [Reserve static address] (預約靜態位址) 以預留 IPv4 位址。
  3. 將「Name」(名稱) 指定為 example-ip
  4. 將「Network tier」(網路級別) 設為「Premium」(進階)。
  5. 將「IP version」(IP 版本) 設為「IPv4」
  6. 將「類型」設為 [全域]
  7. 按一下 [預約]

gcloud

gcloud compute addresses create example-ip \
    --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 記錄,才能佈建憑證。如果您還沒有網域,可以透過 Google Domains 取得。此外,您必須更新網域的 DNS A 記錄,使其指向您在前一步驟中建立的負載平衡器 IP 位址 (example-ip)。如需詳細操作說明,請參閱使用 Google 代管的憑證

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

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

如要在不建立 SSL 憑證資源 (或 Google 代管憑證所要求的網域) 的情況下測試此程序,您仍然可以按照本頁面的操作說明設定 HTTP 負載負載平衡器。

建立外部 HTTP(S) 負載平衡器

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

Cloud Run 應用程式的 HTTPS 負載平衡 (按一下可放大)
Cloud Run 應用程式的 HTTPS 負載平衡

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

主控台

為負載平衡器命名

  1. 前往 Google Cloud Console 的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 在「HTTP(S) Load Balancing」(HTTP(S) 負載平衡) 下,按一下 [Start configuration] (啟動設定)
  3. 在「Internet facing or internal only」(連結網際網路或僅限內部) 之下,選取 [From Internet to my VMs] (從網際網路到我的 VM)
  4. 按一下 [繼續]
  5. 在負載平衡器的「Name」(名稱) 中輸入 serverless-lb
  6. 使視窗保持開啟以便繼續。

設定後端服務

  1. 按一下 [後端設定]
  2. 建立或選取後端服務下拉式選單,將滑鼠指標懸停在後端服務,然後選取建立後端服務,才能使用 Android 手機或平板電腦尋找另一部裝置。
  3. 輸入名稱
  4. 在「Backend type」(後端類型) 下方,選取 [Serverless 網路端點群組]
  5. 將「Protocol」(通訊協定) 保持不變。系統會忽略這個參數。
  6. 在「Backends」(後端) 之下的「New backend」(新增後端) 視窗中,選取 [Create Serverless network endpoint group] (建立無伺服器網路端點群組)
  7. 輸入名稱
  8. 在「Region」(地區) 下,選取 [us-central1]。然後選取 [Cloud Run]
  9. 選取 [選取服務名稱]
  10. 從「Service」(服務) 下拉式選單中,選取您要建立負載平衡器的 Cloud Run 服務。
  11. 按一下 [建立]。
  12. 在「New backend」(新增後端) 視窗中,按一下 [Done] (完成)
  13. 選取 [Enable Cloud CDN] (啟用 Cloud CDN)。保留預設的快取模式存留時間設定。
  14. 按一下 [建立]。

設定主機規則和路徑比對器

主機規則和路徑比對器是外部 HTTP(S) 負載平衡器的網址對應設定元件。

  1. 按一下 [Host and path rules] (主機與路徑規則)
  2. 保留預設主機和路徑。在本範例中,所有要求都會傳送至上一步中建立的後端服務。

設定前端

  1. 按一下 [前端設定]
  2. 輸入名稱
  3. 如要建立 HTTPS 負載平衡器,您必須具備 SSL 憑證 (gcloud compute ssl-certificates list)。建議您使用 Google 代管的憑證 (如 如要設定外部 HTTP(S) 負載平衡器,請填寫下列欄位。

    請確認以下值設定的選項:

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

    建立 HTTPS 負載平衡器時,您必須擁有要在 HTTPS Proxy 中使用 SSL 憑證資源。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證來建立 SSL 憑證資源。
    您必須擁有網域,才能建立 Google 代管的憑證。網域的 A 記錄必須解析為負載平衡器的 IP 位址 (在本例中為 example-ip)。建議使用 Google 代管的憑證,因為 Google Cloud 會使用並自動取得、管理及更新這些憑證。 如果您沒有網域,可以使用自行簽署的 SSL 憑證進行測試。

  4. 按一下 [完成]

檢閱設定

  1. 按一下 [Review and finalize] (檢查並完成)
  2. 查看後端主機和路徑規則前端
  3. 按一下 [建立]。
  4. 等待負載平衡器建立完成。
  5. 按一下負載平衡器的名稱 (serverless-lb)。
  6. 記下下一個工作的 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 \
        --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 (預設):自動快取靜態內容。標示為不可快取的回應 (privateno-storeno-cache指令Cache-Control回應標頭)。如要快取動態內容,內容必須擁有有效的快取標頭。這是所有新的啟用 Cloud CDN 的後端的預設行為。

    • USE_ORIGIN_HEADERS:需要來源才能設定有效的快取標頭來快取內容。在沒有標頭的情況下,Google 不會快取回應,因此會針對每個要求完整查詢原始來源,可能會影響效能,並增加來源伺服器上的負載。這是所有現有啟用 Cloud CDN 的後端的預設行為。

    • FORCE_CACHE_ALL:快取 Cache-Control 回應標頭中所有 privateno-storeno-cache 指令,快取所有內容。這可能會讓快取 (個別使用者) 內容快取。您應只在不會在私人或動態內容 (例如 Cloud Storage 值區) 的後端啟用這項功能。

    如要瞭解 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 \
        --address=example-ip \
        --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
        --global \
        --ports=443
    

將網域的 DNS 記錄更新為使用負載平衡器的 IP 位址

如果您尚未更新網域的 DNS A 或 AAAA 記錄,使其指向負載平衡器的 IP 位址,則您必須改為透過負載平衡器轉送流量。

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

更新 DNS 記錄前,您可以強制將自訂網域的本機 DNS 解析導向至負載平衡器的 IP 位址,藉此在本機測試設定。如要在本機測試,請修改本機電腦中的 /etc/hosts/ 檔案,將 example.com 指向負載平衡器的 IP 位址,或使用 curl --resolve 旗標強制執行 curl將負載平衡器的 IP 位址當做要求。

example.com 的 DNS 記錄解析為 HTTPS 負載平衡器的 IP 位址時,所有傳送到 example.com 的要求都會透過負載平衡器轉送。負載平衡器會根據負載平衡器的網址對應,將負載平衡器分配至相關的後端服務。此外,如果後端服務設定了網址遮罩,則無伺服器 NEG 會使用遮罩,將要求轉送至適當的 Cloud Run、Cloud Functions 或 App Engine 服務。

如果您使用 Google 代管的憑證,將現有服務遷移至外部 HTTP(S) 負載平衡器可能會產生一些停機時間,通常不到一小時。這是因為系統不會更新外部 HTTP(S) 負載平衡器的 SSL 憑證,只要將 DNS 記錄更新為指向負載平衡器的 IP 位址即可。

測試負載平衡器

現在您已設定好負載平衡器,可以開始傳送流量至負載平衡器的 IP 位址。如果您已設定網域,也可以將流量傳送至網域名稱。不過,DNS 傳播可能需要一段時間才能完成,因此您可以使用 IP 位址進行測試。

  1. 前往 Google Cloud Console 的「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 位址

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

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

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

    如果您使用自行簽署的憑證,則必須指定 -k 旗標。如果您擁有自行簽署的憑證,curl -k 選項會允許 curl 指令運作。 請注意,-k 僅用於測試您自己的網站。在一般情況下,有效的憑證是相當重要的安全防護措施,您也不應忽略憑證警告。

    輸出內容應包含您設定的自訂標頭 Cache-IDCache-Status,以表示回應是否從快取提供:

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

    輸出結果會包含回應標頭,表示快取具有快取成功,這表示無伺服器應用程式中的靜態資產是從 Cloud CDN 邊緣快取提供給使用者。

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

停用 Cloud CDN

主控台

停用單一後端服務的 Cloud CDN

  1. 在 Google Cloud Console 中,前往「Cloud CDN」頁面。

    前往 Cloud CDN 頁面

  2. 在來源列的右側,按一下「選單」圖示 ,然後選取 [Edit] (編輯)
  3. 找到您要停用 Cloud CDN 的所有後端服務,並取消勾選其核取方塊。
  4. 按一下 [更新]。

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

  1. 前往 Cloud Console 的「Cloud CDN」頁面。

    前往 Cloud CDN 頁面

  2. 在來源列的右側,按一下「選單」圖示 ,然後選取 [Remove] (移除)
  3. 按一下 [移除] 加以確認。

gcloud

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

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

後續步驟

  • 請參閱 Cloud CDN 說明文件,進一步瞭解快取模式,並判斷回應的快取