本頁說明如何建立外部應用程式負載平衡器,將要求轉送至「無伺服器」後端。這裡的「無伺服器」指的是下列無伺服器運算產品:
- App Engine
- Cloud Run functions
- Cloud Run
外部應用程式負載平衡器與 API Gateway 整合後,無伺服器後端可充分運用 Cloud Load Balancing 提供的所有功能。如要設定外部應用程式負載平衡器,將流量轉送至 API Gateway,請參閱「開始使用外部應用程式負載平衡器搭配 API Gateway」。目前 API Gateway 預先發布版支援外部應用程式負載平衡器。
透過無伺服器 NEG,可搭配外部應用程式負載平衡器使用Google Cloud 無伺服器應用程式。使用無伺服器 NEG 後端設定負載平衡器後,對負載平衡器的要求會轉送至無伺服器應用程式後端。
如要進一步瞭解無伺服器 NEG,請參閱「無伺服器 NEG 總覽」。
事前準備
部署 App Engine、Cloud Run functions 或 Cloud Run 服務
本頁操作說明假設您的 Cloud Run、Cloud Run functions 或 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 IAM 角色:
| 任務 | 必要角色 |
|---|---|
| 建立負載平衡器和網路元件 | 網路管理員 |
| 建立及修改 NEG | Compute 執行個體管理員 |
| 建立及修改 SSL 憑證 | 安全管理員 |
選用:使用 BYOIP 位址
如要使用自己的 IP (BYOIP),可將您的公開位址匯入Google Cloud ,與 Google Cloud 資源搭配使用。舉例來說,如果您匯入了多個自己的 IPv4 位址,設定負載平衡器時,就可以將其中一個位址指派給轉送規則。請按照本文的操作說明建立負載平衡器,在「IP 位址」欄位提供 BYOIP 位址。
如要進一步瞭解如何使用 BYOIP,請參閱「使用自己的 IP 位址」。
預留外部 IP 位址
現在執行個體已開始執行,請設定全域靜態外部 IP 位址,方便客戶透過該位址連線至負載平衡器。
控制台
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
點選「Reserve external static IP address」(預留外部靜態 IP 位址)。
在「Name」(名稱) 中輸入
example-ip。將「Network service tier」(網路服務級別) 設為「Premium」。
將「IP version」(IP 版本) 設為「IPv4」。
將「Type」(類型) 設為「Global」(全域)。
按一下「Reserve」(預留)。
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 Cloud 會自動取得、管理及更新這些憑證。如要建立 Google 代管的憑證,您必須擁有網域和該網域的 DNS 記錄,才能佈建憑證。
此外,還需更新網域的 DNS A 記錄,指向上一個步驟中建立的負載平衡器 IP 位址。如果 Google 代管的憑證中有多個網域,您須更新所有網域和子網域的 DNS 記錄,指向負載平衡器的 IP 位址。如需詳細的操作說明,請參閱「使用 Google 代管的憑證」。
自行簽署的憑證。如果目前不想設定網域,可以使用自行簽署的 SSL 憑證進行測試。
這個範例假設您已建立 SSL 憑證資源。
如果您不要建立 SSL 憑證資源 (或 Google 代管的憑證所需的網域),但想測試這個程序,您仍可按照本頁的說明操作,設定 HTTP 負載平衡器。
建立負載平衡器
下圖中,負載平衡器使用無伺服器 NEG 後端,將要求導向無伺服器 Cloud Run 服務。以這個例子來說,我們已透過 Cloud Run Python 快速入門導覽課程部署 Cloud Run 服務。
由於採用無伺服器 NEG 後端的後端服務不支援健康狀態檢查,因此如果負載平衡器只具有無伺服器 NEG 後端,就不需要建立防火牆規則。
控制台
選取負載平衡器類型
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
- 點選「Create load balancer」(建立負載平衡器)。
- 將「Type of load balancer」(負載平衡器類型) 設為「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 將「Public facing or internal」(公開或內部) 設為「Public facing (external)」(公開 (外部)),然後點選「Next」(下一步)。
- 將「Global or single region deployment」(全域或單一區域部署) 設為「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)。
- 將「Load balancer generation」(負載平衡器代別) 設為「Classic Application Load Balancer」(傳統版應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下「Configure」(設定)。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
serverless-lb。 - 視窗保持開啟,以便繼續操作。
前端設定
- 按一下「Frontend configuration」(前端設定)。
- 在「Name」(名稱) 中輸入名稱。
-
如要建立 HTTPS 負載平衡器,您必須具備 SSL 憑證 (
gcloud compute ssl-certificates list)。建議使用 Google 代管的憑證,如前文所述。
- 按一下「Done」(完成)。
如要設定外部應用程式負載平衡器,請按照下方指示填入欄位。
確認下列選項已設為指定的值:
| 屬性 | 值 (依指示輸入值或選取選項) |
|---|---|
| 通訊協定 | HTTPS |
| 網路服務級別 | Premium |
| 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 負載平衡器,使用的 IP 位址與 HTTPS 負載平衡器相同,且會將 HTTP 要求重新導向至負載平衡器的 HTTPS 前端。 只有在選取 HTTPS 通訊協定並使用預留的 IP 位址時,才能勾選這個核取方塊。 |
後端設定
- 按一下「Backend configuration」(後端設定)。
- 在「Backend services & backend buckets」(後端服務和後端 bucket) 清單中,按一下「Create a backend service」(建立後端服務)。
- 在「Name」(名稱) 中輸入名稱。
- 在「Backend type」(後端類型) 中,選取「Serverless network endpoint group」(無伺服器網路端點群組)。
- 「Protocol」(通訊協定) 設定維持不變,系統會忽略這個參數。
- 在「Backends」(後端) 部分,找到「New backend」(新增後端),然後選取「Create Serverless network endpoint group」(建立無伺服器網路端點群組)。
- 在「Name」(名稱) 中輸入名稱。
- 點選「Create」(建立)。
- 在「New backend」(新增後端) 部分,按一下「Done」(完成)。
- 選取「Enable Cloud CDN」(啟用 Cloud CDN)。
- 選用:修改快取模式和存留時間設定。
- 點選「Create」(建立)。
轉送規則
轉送規則會決定流量的導向方式,如要設定轉送,需設定主機規則和路徑比對器,這些是外部應用程式負載平衡器網址對應的設定元件。
-
按一下「Host and path rules」(主機與路徑規則)。
- 保留預設主機和路徑。在本範例中,所有要求都會傳送至上一個步驟建立的後端服務。
檢查設定
- 按一下「Review and finalize」(檢查並完成)。
- 檢查所有設定。
- 選用:按一下「Equivalent Code」(對等程式碼),即可查看用於建立負載平衡器的 REST API 要求。
- 點選「Create」(建立)。
- 等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (serverless-lb)。
- 記下負載平衡器的 IP 位址,下一項任務中會用到。之後會用
IP_ADDRESS來稱呼這個 IP 位址。
gcloud
- 建立無伺服器應用程式的無伺服器 NEG。如需瞭解更多選項,請參閱
gcloud參考指南的「gcloud compute network-endpoint-groups create」部分。 - 建立後端服務。
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回應標頭中的任何private、no-store或no-cache指令。
如要瞭解 Cloud CDN 可理解的快取指令,以及 Cloud CDN 不會快取的內容,請參閱「可快取的內容」和「不可快取的內容」。
- 將無伺服器 NEG 新增至後端服務並設為後端:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --global \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=us-central1 - 建立網址對應,將傳入要求轉送至後端服務:
gcloud compute url-maps create URL_MAP_NAME \ --default-service BACKEND_SERVICE_NAME這個範例網址對應只會指定代表單一無伺服器應用程式的後端服務,因此不需要設定主機規則或路徑比對器。如果您有多個後端服務,可以根據主機名稱使用主機規則,將要求導向至不同服務,也可以設定路徑比對器,根據要求路徑將要求導向至不同服務。
-
如要建立 HTTPS 負載平衡器,您必須擁有 SSL 憑證資源,才能在 HTTPS 目標 Proxy 中使用。您可以使用 Google 代管的 SSL 憑證或自行管理的 SSL 憑證,建立 SSL 憑證資源。建議使用 Google 代管的憑證,因為 Google Cloud 會自動取得、管理及更新這些憑證。
如要建立 Google 代管的憑證,您必須擁有網域。如果沒有網域,可以使用自行簽署的 SSL 憑證進行測試。
建立 Google 代管 SSL 憑證資源的方法如下: 建立自行管理的 SSL 憑證資源方法如下:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --domains DOMAINgcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH -
建立目標 HTTPS 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 - 建立轉送規則,將傳入要求轉送至 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.com 和 example.com 建立 A 記錄,請使用以下方法:
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
如果使用 Cloud DNS 做為 DNS 供應商,請參閱「新增、修改及刪除記錄」。
測試負載平衡器
負載平衡器設定完成後,即可開始將流量傳送至負載平衡器的 IP 位址。若已設定網域,也可以將流量傳送至網域名稱。不過,DNS 傳播可能需要一段時間才能完成,因此可以先使用 IP 位址進行測試。
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
點選剛剛建立的負載平衡器。
記下負載平衡器的 IP 位址。
如果是建立 HTTPS 負載平衡器,可以使用網路瀏覽器前往
https://IP_ADDRESS測試負載平衡器。將IP_ADDRESS替換為負載平衡器的 IP 位址。系統應該會將您導向helloworld服務首頁。
如果這個做法無效,且您使用的是 Google 代管的憑證,請確認憑證資源狀態為「ACTIVE」(有效)。如需詳細資訊,請參閱「Google 代管的 SSL 憑證資源狀態」。
若您使用自行簽署的憑證進行測試,瀏覽器會顯示警告訊息,您必須明確指示瀏覽器接受自行簽署的憑證。按一下警告訊息即可查看實際頁面。如要驗證快取回應,請在本機電腦指令列中使用 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-ID和Cache-Status,說明回應是否來自快取:HTTP/2 200 cache-status: hit cache-id: SEA-b9fa975e
輸出內容包含的回應標頭會指出發生快取命中,表示無伺服器應用程式中的靜態資產,是從 Cloud CDN 邊緣快取提供給使用者。
如果回應並非在 Cloud CDN 中快取,
cache-status標頭會顯示disabled值。快取回應的cache-status標頭值為hit、miss或revalidated。
停用 Cloud CDN
控制台
停用單一後端服務的 Cloud CDN
前往 Google Cloud 控制台的「Cloud CDN」頁面。
點選來源列右側的「Menu」(選單) ,然後選取「Edit」(編輯)。
找到要停止使用 Cloud CDN 的後端服務,取消勾選其核取方塊。
按一下「Update」(更新)。
為特定來源的所有後端服務移除 Cloud CDN
前往 Google Cloud 控制台的「Cloud CDN」頁面。
點選來源列右側的「Menu」(選單) ,然後選取「Remove」(移除)。
按一下「Remove」(移除) 確認操作。
gcloud
gcloud compute backend-services update BACKEND_SERVICE_NAME
--no-enable-cdn
停用 Cloud CDN 並不會撤銷或清除快取內容。如果您在停用 Cloud CDN 後重新啟用這項服務,原有的大部分或所有快取內容可能仍會保留在快取中。如果您不希望快取使用這些內容,必須撤銷快取內容。