本頁說明如何建立外部應用程式負載平衡器,將要求轉送至無伺服器後端。這裡的「無伺服器」是指下列無伺服器運算產品:
- App Engine
- Cloud Run 函式
- 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 函式或 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 位址,讓客戶可透過該位址連線至負載平衡器。
主控台
前往 Google Cloud 控制台的「External IP addresses」(外部 IP 位址) 頁面。
按一下「保留外部靜態 IP 位址」。
在「Name」(名稱) 中輸入
example-ip
。在「網路服務級別」中,選取「進階」。
在「IP version」(IP 版本) 部分,選取「IPv4」。
在「Type」(類型) 部分,選取「Global」(全域)。
按一下「保留」。
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 服務。
由於使用無伺服器 NEG 後端的後端服務不支援健康狀態檢查,因此如果負載平衡器只有無伺服器 NEG 後端,則您不需要建立健康狀態檢查。
控制台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型) 部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for global workloads」(最適合全域工作負載),然後點選「Next」(下一步)。
- 在「Load balancer generation」(負載平衡器代別) 部分,選取「Classic Application Load Balancer」(傳統應用程式負載平衡器),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
serverless-lb
。 - 將視窗保持開啟,以便繼續操作。
前端設定
- 按一下「前端設定」。
- 在「Name」部分輸入名稱。
-
如要建立 HTTPS 負載平衡器,您必須具備 SSL 憑證 (
gcloud compute ssl-certificates list
)。建議使用 Google 代管的憑證,如先前所述。
- 按一下 [完成]。
如要設定外部應用程式負載平衡器,請填入下列欄位。
確認下列選項已設為指定的值:
屬性 | 值 (按照指示輸入值或選取選項) |
---|---|
通訊協定 | 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 位址時,才能勾選這個核取方塊。 |
如要測試這個程序,但不想設定 SSL 憑證資源 (或 Google 代管憑證所需的網域),可以設定 HTTP 負載平衡器。
如要建立 HTTP 負載平衡器,請確認下列選項已設為指定的值:
屬性 | 值 (按照指示輸入值或選取選項) |
---|---|
通訊協定 | HTTP |
網路服務級別 | 進階 |
IP 版本 | IPv4 |
IP 位址 | example-ip |
通訊埠 | 80 |
後端設定
- 按一下「後端設定」。
- 在「後端服務和後端值區」清單中,按一下「建立後端服務」。
- 在「Name」部分輸入名稱。
- 在「Backend type」(後端類型) 中,選取「Serverless network endpoint group」(無伺服器網路端點群組)。
- 請勿變更「Protocol」(通訊協定)。系統會忽略這個參數。
- 在「Backends」(後端) 區段中,選取「New backend」(新增後端),然後選取「Create Serverless network endpoint group」(建立無伺服器網路端點群組)。
- 在「Name」部分輸入名稱。
- 在「Region」(區域) 中選取「us-central1」,然後選取「Cloud Run」。
- 選取「選取服務名稱」。
- 在「Service」(服務) 清單中,選取要為其建立負載平衡器的 Cloud Run 服務。
- 點選「建立」。
- 在「New backend」(新增後端) 區段中,按一下「Done」(完成)。
- 點選「建立」。
轉送規則
轉送規則會決定流量的導向方式,如要設定轉送,請設定主機規則和路徑比對器,這些是外部應用程式負載平衡器網址對應的設定元件。
-
按一下「Host and path rules」(主機與路徑規則)。
- 保留預設主機和路徑。在本範例中,所有要求都會傳送至上一個步驟中建立的後端服務。
檢查設定
- 按一下「檢查並完成」。
- 檢查所有設定。
- 選用:按一下「對等程式碼」,即可查看用於建立負載平衡器的 REST API 要求。
- 點選「建立」。
- 等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (serverless-lb)。
- 記下負載平衡器的 IP 位址,以便在下一項工作中使用。這就是所謂的
IP_ADDRESS
。
gcloud
- 為無伺服器應用程式建立無伺服器 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
參考指南,瞭解gcloud compute network-endpoint-groups create
。 - 建立後端服務。
gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL \ --global
- 將無伺服器 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 DOMAIN
gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH
-
建立目標 HTTP(S) Proxy,將要求轉送至網址對應。
如果是 HTTP 負載平衡器,請建立 HTTP 目標 Proxy:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME
如果是 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。
HTTP 負載平衡器:
gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL \ --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 \ --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 位址」。
如果是 HTTP 負載平衡器,您可以使用網路瀏覽器前往
http://IP_ADDRESS
,測試負載平衡器。請將IP_ADDRESS
替換為負載平衡器的 IP 位址。系統應會將您導向helloworld
服務首頁。
如果是 HTTPS 負載平衡器,您可以使用網路瀏覽器前往
https://IP_ADDRESS
,測試負載平衡器。請將IP_ADDRESS
替換為負載平衡器的 IP 位址。系統應會將您導向helloworld
服務首頁。
如果上述方法無效,且您使用的是 Google 代管的憑證,請確認憑證資源狀態為「ACTIVE」(有效)。詳情請參閱「Google 代管的 SSL 憑證資源狀態」。
如果您使用自行簽署的憑證進行測試,瀏覽器會出現警告。您必須明確指示瀏覽器接受自行簽署的憑證。此時,只要按一下警告訊息即可查看實際頁面。
額外設定選項
本節會延伸說明設定範例,並提供替代和其他設定選項。所有工作都是選擇性的。您可以按任何順序執行這些工作。
設定多區域負載平衡
在本頁面稍早說明的範例中,我們只有一項 Cloud Run 服務,做為 us-central1
地區的後端。由於無伺服器 NEG 一次只能指向一個端點,因此無法跨多個區域執行負載平衡。外部應用程式負載平衡器只做為前端,並將流量 Proxy 至指定的 helloworld
應用程式端點。不過,您可能想從多個區域提供 Cloud Run 應用程式,以縮短使用者延遲時間。
如果後端服務附加了多個無伺服器 NEG,負載平衡器會將要求轉送至最近可用區域的無伺服器 NEG,藉此平衡流量。不過,每個後端服務在每個區域只能包含一個無伺服器 NEG。如要讓 Cloud Run 服務可從多個區域存取,您需要設定跨區域路由。您應該可以使用單一網址架構,在世界各地運作,但會從最接近使用者的地區處理使用者要求。
如要設定多區域服務,您必須使用進階網路層,確保所有區域的 Cloud Run 部署作業都相容,並準備好從任何區域提供流量服務。
如要設定多區域負載平衡器,請按照下列步驟操作:
- 在不同區域設定兩項 Cloud Run 服務。假設您已部署兩項 Cloud Run 服務:一項部署至美國境內的區域,另一項部署至歐洲境內的區域。
- 使用下列設定建立外部應用程式負載平衡器:
- 設定具有兩個無伺服器 NEG 的全域後端服務:
- 在與美國部署的 Cloud Run 服務相同的區域中,建立第一個 NEG。
- 在與歐洲部署的 Cloud Run 服務相同的區域中,建立第二個 NEG。
- 使用進階網路服務層級設定前端。
- 設定具有兩個無伺服器 NEG 的全域後端服務:
下圖顯示產生的設定。
本節將以本頁稍早說明的負載平衡器設定為基礎,在 us-central1
區域中建立一個無伺服器 NEG,指向同一區域中的 Cloud Run 服務。此外,本教學課程也假設您已在 europe-west1
地區建立第二項 Cloud Run 服務。您建立的第二個無伺服器 NEG 會指向 europe-west1
區域中的這項 Cloud Run 服務。
在本範例中,您將完成下列步驟:
- 在
europe-west1
區域中建立第二個無伺服器 NEG。 - 將第二個無伺服器 NEG 附加至後端服務。
如要將第二個無伺服器 NEG 新增至現有後端服務,請按照下列步驟操作。
主控台
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
按一下您要編輯後端服務的負載平衡器名稱。
在「Load balancer details」(負載平衡器詳細資料) 頁面中,按一下
「Edit」(編輯)。在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面上,按一下「Backend configuration」(後端設定)。
在「Backend configuration」(後端設定) 頁面上,針對要修改的後端服務,點選「Edit」(編輯)
。在「後端」部分中,按一下「新增後端」。
在「無伺服器網路端點群組」清單中,選取「建立無伺服器網路端點群組」。
輸入無伺服器 NEG 的名稱。
在「Region」(區域) 中選取
europe-west1
。在「無伺服器網路端點群組類型」中,選取「Cloud Run」,然後執行下列操作:
- 選取「選取服務」選項。
- 在「Service」(服務) 清單中,選取要建立負載平衡器的 Cloud Run 服務。
點選「建立」。
在「新增後端」頁面中,按一下「完成」。
按一下 [儲存]。
如要更新後端服務,請按一下「更新」。
如要更新負載平衡器,請在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面上,按一下「Update」(更新)。
gcloud
在部署 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 服務的名稱
將第二個無伺服器 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 的名稱
搭配使用已驗證的 Pub/Sub 推送訂閱項目與多區域 Cloud Run 部署作業
對於已驗證的推送要求,Cloud Run 預設會使用特定區域的對象欄位。如果是多區域 Cloud Run 部署作業,如果推送要求轉送至不同區域的 Cloud Run 服務,JWT 權杖驗證會因對象不符而失敗。
如要規避這項地區限制,請按照下列步驟操作:
- 為不同區域的服務部署作業設定相同的自訂目標對象。
- 設定 Pub/Sub 推送訊息,將自訂目標對象做為 JWT 權杖中的目標對象。
設定區域轉送
從多個區域提供應用程式服務的常見原因,是為了符合資料所在地規定。舉例來說,您可能希望確保歐洲使用者提出的要求一律由歐洲地區的伺服器處理。如要進行這項設定,您需要網址結構,其中包含歐盟和非歐盟使用者的個別網址,並將歐盟使用者導向歐盟網址。
在這種情況下,您可以使用網址對應,將特定網址的要求轉送至對應的區域。這樣一來,原本要傳送至某個區域的要求,就不會傳送至其他區域。這可在不同區域之間提供隔離功能。另一方面,如果某個地區發生故障,系統不會將要求轉送至其他地區。因此這項設定不會增加服務的可用性。
如要設定區域路徑,您必須使用進階網路層級,才能在單一轉送規則中合併不同區域。
如要設定具備區域性路由的負載平衡器,請按照下列步驟操作:
- 在不同區域設定兩項 Cloud Run 服務。假設您已部署兩項 Cloud Run 服務:hello-world-eu (歐洲地區) 和 hello-world-us (美國地區)。
- 使用下列設定建立外部應用程式負載平衡器:
- 在歐洲設定具有無伺服器 NEG 的後端服務。無伺服器 NEG 必須與部署在歐洲的 Cloud Run 服務位於相同區域。
- 在美國設定第二項後端服務,並使用另一個無伺服器 NEG。這個無伺服器 NEG 必須與在美國部署的 Cloud Run 服務位於相同區域。
- 設定網址對應時,請使用適當的主機和路徑規則,讓一組網址轉送至歐洲後端服務,所有要求則轉送至美國後端服務。
- 使用進階網路級別設定前端設定。
其餘設定與先前所述相同。完成設定後,畫面應如下所示:
使用網址遮罩
建立無伺服器 NEG 時,您可以不選取特定 Cloud Run 服務,而是使用網址遮罩指向在相同網域提供服務的多個服務。網址遮罩是網址架構的範本,無伺服器 NEG 會使用這個範本,從傳入要求網址中擷取服務名稱,並將要求對應至適當的服務。
如果您的服務對應至自訂網域,而非Google Cloud 為已部署服務提供的預設位址,網址遮蓋就特別實用。即使應用程式使用自訂網址模式,您也能透過網址遮罩,使用單一規則指定多個服務和版本。
如果尚未閱讀無伺服器 NEG 總覽:網址遮罩,請先閱讀。
建構網址遮罩
如要為負載平衡器建構網址遮罩,請先從服務的網址開始。在本範例中,我們會使用在 https://example.com/login
執行的範例無伺服器應用程式。這是應用程式 login
服務
的網址。
- 從網址中移除
http
或https
。你還能產生example.com/login
組存取碼。 - 將服務名稱替換為網址遮罩的預留位置。
- Cloud Run:將 Cloud Run 服務名稱替換為預留位置
<service>
。如果 Cloud Run 服務有相關聯的標記,請將標記名稱替換為預留位置<tag>
。在本範例中,您剩下的網址遮罩是example.com/<service>
。 - Cloud Run 函式:將函式名稱替換為預留位置
<function>
。在本範例中,您剩下的網址遮罩是example.com/<function>
。 - App Engine:將服務名稱替換為預留位置
<service>
。 如果服務有相關聯的版本,請將版本替換為預留位置<version>
。在本範例中,您剩下的網址遮罩是example.com/<service>
。 - API Gateway:將閘道名稱替換為預留位置
<gateway>
。在本範例中,您剩下的網址遮罩是example.com/<gateway>
。
- Cloud Run:將 Cloud Run 服務名稱替換為預留位置
(選用) 如果可以從網址的路徑部分擷取服務名稱 (或函式、版本或標記),則可以省略網域。網址遮罩的路徑部分會以第一個
/
字元做為區別。如果網址遮罩中沒有/
,系統會將遮罩解讀為僅代表主機。因此,在這個範例中,網址遮罩可以縮減為/<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 functions
下表假設您有一個名為 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 新增至現有的後端服務:
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
前往「Load balancing」(負載平衡) 頁面 - 按一下您要編輯後端服務的負載平衡器名稱。
- 在「Load balancer details」(負載平衡器詳細資料) 頁面中,按一下「Edit」(編輯) 。
- 在「Edit global external Application Load Balancer」(編輯全域外部應用程式負載平衡器) 頁面上,按一下「Backend configuration」(後端設定)。
- 在「Backend configuration」(後端設定) 頁面上,針對要修改的後端服務,點選「Edit」(編輯) 。
- 點選「新增後端」。
- 選取「建立無伺服器網路端點群組」。
- 在「Name」中輸入
helloworld-serverless-neg
。 - 在「Region」(地區) 下,選取 [us-central1]。
- 在「無伺服器網路端點群組類型」下方,選取建立無伺服器應用程式 (或服務/函式) 的平台。
- 選取「使用網址遮罩」。
- 輸入網址遮罩。如需建立網址遮蓋的操作說明,請參閱建構網址遮蓋。
- 點選「建立」。
- 在「Name」中輸入
- 在「New backend」(新增後端) 區段中,按一下「Done」(完成)。
- 按一下「更新」。
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 functions
如要使用 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 functions、API Gateway 或 App Engine 自訂網域網址的流量,改為透過負載平衡器傳送。
舉例來說,假設您有一個名為 example.com
的自訂網域,且所有 Cloud Run 服務都對應至這個網域,您應更新 example.com
的 DNS 記錄,指向負載平衡器的 IP 位址。
更新 DNS 記錄前,您可以強制將自訂網域的本機 DNS 解析為負載平衡器的 IP 位址,在本機測試設定。如要在本機測試,請修改本機上的 /etc/hosts/
檔案,將 指向負載平衡器的 IP 位址,或使用 curl --resolve
標記強制 curl
使用負載平衡器的 IP 位址發出要求。example.com
當 example.com
的 DNS 記錄解析為 HTTP(S) 負載平衡器的 IP 位址時,傳送至 example.com
的要求就會開始透過負載平衡器轉送。負載平衡器會根據網址對應,將這些要求轉送至相關後端服務。此外,如果後端服務已設定網址遮罩,無伺服器 NEG 會使用遮罩將要求路由至適當的 Cloud Run、Cloud Run functions、API Gateway 或 App Engine 服務。
啟用 Cloud CDN
為 Cloud Run 服務啟用 Cloud CDN 後,您就能在靠近使用者的位置快取內容,進而提升內容傳遞效率。
如要為全域外部應用程式負載平衡器使用的後端服務啟用 Cloud CDN,請使用 gcloud compute
backend-services update
指令。
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-id
和 oauth2-client-secret
的值。
如要啟用 IAP,請更新後端服務,加入 --iap=enabled
旗標和 oauth2-client-id
和 oauth2-client-secret
。
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 負載平衡」,確保傳送至預設網址或透過 Cloud Run 設定的任何其他自訂網域的要求遭到封鎖。
如果您使用 App Engine,可以透過輸入控制項,確保應用程式只會接收負載平衡器 (以及您使用的虛擬私有雲) 傳送的要求。
如果沒有適當的 Ingress 設定,使用者可以透過無伺服器應用程式的預設網址,略過負載平衡器、Google Cloud Armor 安全性政策、SSL 憑證,以及透過負載平衡器傳遞的私密金鑰。
選用步驟:設定預設後端安全政策。預設安全政策會根據使用者設定的門檻,限制流量。如要進一步瞭解預設安全性政策,請參閱「速率限制總覽」。
- 如要停用 Google Cloud Armor 預設安全性政策,請在後端安全性政策清單選單中選取
None
。 - 在「安全性」部分中,選取「預設安全性政策」。
- 在「政策名稱」欄位中,接受系統自動產生的名稱,或輸入安全政策的名稱。
- 在「要求數量」欄位中,接受預設要求數量,或輸入介於
1
和10,000
之間的整數。 - 在「間隔」欄位中選取間隔。
- 在「Enforce on key」欄位中,選擇下列其中一個值:「All」、「IP address」或「X-Forwarded-For IP address」。如要進一步瞭解這些選項,請參閱「識別用戶端以限制速率」。
啟用記錄與監控功能
您可以啟用、停用及查看外部應用程式負載平衡器後端服務的記錄功能。使用 Google Cloud 控制台時,系統會預設為具有無伺服器 NEG 後端的後端服務啟用記錄功能。您可以視需要使用 gcloud
停用每個後端服務的記錄功能。如需操作說明,請參閱「記錄」。
負載平衡器也會將監控資料匯出至 Cloud Monitoring。 監控指標可用於評估負載平衡器的設定、用量和效能。指標也可用於排解問題,並提高資源利用率和使用者體驗。如需操作說明,請參閱「監控」一文。
刪除無伺服器 NEG
如果已將網路端點群組附加至後端服務,則無法予以刪除。刪除 NEG 之前,請確保已將其從後端服務卸離。
主控台
- 如要確保要刪除的無伺服器 NEG 目前未供任何後端服務使用,請前往負載平衡進階選單中的「後端服務」分頁。
前往「Backend services」(後端服務) 分頁 - 如果目前正在使用無伺服器 NEG:
- 按一下使用無伺服器 NEG 的後端服務名稱。
- 按一下「編輯」圖示 。
- 在「Backends」(後端) 清單中,按一下 ,從後端服務移除無伺服器 NEG 後端。
- 按一下 [儲存]。
- 前往 Google Cloud 控制台的「網路端點群組」頁面。
前往「網路端點群組」頁面 - 勾選要刪除的無伺服器 NEG 核取方塊。
- 點選「刪除」。
- 再按一下 [刪除] 加以確認。
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