本頁說明如何部署區域外部應用程式負載平衡器,並使用 Cloud Run 後端。如要進行這項設定,請使用負載平衡器的無伺服器 NEG 後端。
嘗試這個程序之前,請務必先熟悉下列主題:
本文說明如何設定應用程式負載平衡器,將要求 Proxy 至無伺服器 NEG 後端。
透過無伺服器 NEG,可搭配負載平衡器使用 Cloud Run 服務。使用無伺服器 NEG 後端設定負載平衡器後,對負載平衡器的要求會轉送至 Cloud Run 後端。
事前準備
安裝 Google Cloud SDK
安裝 Google Cloud CLI 工具。如需 gcloud CLI 的概念和安裝資訊,請參閱 gcloud CLI 總覽。
如果您先前沒有執行 gcloud CLI,請先執行 gcloud init,將 gcloud CLI 目錄初始化。
部署 Cloud Run 服務
本頁操作說明假設您的 Cloud Run 服務正在執行中。
在本頁的範例中,您可以使用任何 Cloud Run 快速入門導覽課程,部署 Cloud Run 服務。
無伺服器 NEG 和負載平衡器必須與 Cloud Run 服務位於相同區域。您可以將 Ingress 限制為internal and cloud load
balancing,封鎖直接傳送至 Cloud Run 服務預設網址的外部要求。例如:
gcloud run deploy CLOUD_RUN_SERVICE_NAME \
--platform=managed \
--allow-unauthenticated \
--ingress=internal-and-cloud-load-balancing \
--region=REGION \
--image=IMAGE_URL
請記下您建立的服務名稱。本頁其餘內容說明如何設定負載平衡器,將要求轉送至這項服務。
設定權限
如要按照本指南操作,您需在專案中建立無伺服器 NEG 和負載平衡器,您必須是專案擁有者或編輯者,或是具備下列 Compute Engine IAM 角色和權限:
| 工作 | 必要角色 |
|---|---|
| 建立負載平衡器和網路元件 | Compute 網路管理員 (roles/compute.networkAdmin) |
| 建立及修改 NEG | Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) |
| 建立及修改 SSL 憑證 | 安全管理員 (roles/iam.securityAdmin) |
設定虛擬私有雲網路和僅限 Proxy 的子網路
如要設定網路,請執行下列工作:
- 建立虛擬私有雲網路。
- 建立僅限 Proxy 的子網路。
建立虛擬私有雲網路
建立自訂模式 VPC 網路。
控制台
前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network。點選「建立」。
gcloud
使用
gcloud compute networks create指令建立自訂虛擬私有雲網路:gcloud compute networks create lb-network --subnet-mode=custom
建立僅限 Proxy 的子網路
在 lb-network 網路的特定區域中,為所有區域 Envoy 型負載平衡器建立僅限 Proxy 的子網路。
控制台
前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。
按一下要新增僅限 Proxy 子網路的共用 VPC 網路名稱。
按一下 [新增子網路]。
在「Name」(名稱) 欄位中,輸入
proxy-only-subnet。選擇「Region」(區域)。
將「用途」設為「區域受管理 Proxy」。
輸入「IP address range」(IP 位址範圍),例如
10.129.0.0/23。按一下「新增」。
gcloud
使用 gcloud compute networks subnets
create 指令建立僅限 Proxy 的子網路。
這個範例使用 10.129.0.0/23 的 IP 位址範圍,做為僅限 Proxy 的子網路。您可以設定任何有效子網路範圍。
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=REGION \
--network=lb-network \
--range=10.129.0.0/23
建立負載平衡器
下圖中,負載平衡器使用無伺服器 NEG 後端,將要求導向無伺服器 Cloud Run 服務。
從負載平衡器傳送至無伺服器 NEG 後端的流量,會使用虛擬私有雲外部定義的特殊路徑,不受防火牆規則限制。因此,如果負載平衡器只有無伺服器 NEG 後端,就不需要建立防火牆規則,允許流量從僅限 Proxy 的子網路傳送至無伺服器後端。
控制台
選取負載平衡器類型
前往 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」(下一步)。
- 在「全域或單一區域部署」部分,選取「最適合區域工作負載」,接著點選「下一步」。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
serverless-lb。 - 將「Network」(網路) 設為「
lb_network」。 - 視窗保持開啟,以便繼續操作。
設定前端
- 繼續設定前,請先確認您已取得 SSL 憑證。
- 按一下「前端設定」。
- 輸入名稱。
- 如要設定區域性外部應用程式負載平衡器,請按照下方指示填入欄位。
- 在「Protocol」(通訊協定) 部分,選取「HTTPS」。
- 將「網路服務級別」設為「標準級」。
- 將「IP version」(IP 版本) 設為「IPv4」。
- 在「IP address」(IP 位址) 部分,選取「Ephemeral」(暫時)。
- 在「Port」(通訊埠) 部分,選取
443。 在「選擇憑證存放區」部分,選取「傳統版憑證」。
以下範例說明如何建立 Compute Engine SSL 憑證:
- 按一下「建立新憑證」。
- 在「名稱」欄位中輸入名稱。
- 將 PEM 格式的檔案上傳至相對應的欄位:
- 認證
- 私密金鑰
- 點選「建立」。
- 選用:如要建立 HTTP 負載平衡器,請執行下列操作:
- 在「通訊協定」部分選取「HTTP」。
- 將「網路服務級別」設為「標準級」。
- 將「IP version」(IP 版本) 設為「IPv4」。
- 在「IP address」(IP 位址) 部分,選取「Ephemeral」(暫時)。
- 在「Port」(通訊埠) 部分,選取
80。 - 按一下 [完成]。
如果您不要設定 SSL 憑證資源,但想測試這個程序,可以設定 HTTP 負載平衡器。
設定後端服務
- 按一下「後端設定」。
- 在「建立或選取後端服務」選單中,將指標懸停在「後端服務」上,然後選取「建立後端服務」。
- 在「建立後端服務」視窗中輸入「名稱」。
- 在「Backend type」(後端類型) 中,選取「Serverless network endpoint group」(無伺服器網路端點群組)。
- 「Protocol」(通訊協定) 設定維持不變,系統會忽略這個參數。
- 依序選取「Backends」(後端)「New backend」(新增後端),然後選取「Create serverless network endpoint group」(建立無伺服器網路端點群組)。
- 在「建立無伺服器網路端點群組」視窗中,輸入「名稱」。
- 「區域」會顯示負載平衡器的區域。
- 在「無伺服器網路端點群組類型」欄位中,選取「Cloud Run」。目前僅支援 Cloud Run。
- 選取「選取服務名稱」。
- 從「服務」清單中,選取要為其建立負載平衡器的 Cloud Run 服務。
- 按一下 [完成]。
- 點選「建立」。
-
選用:設定預設後端安全性政策。預設安全性政策會根據使用者設定的門檻節流。如要進一步瞭解預設安全性政策,請參閱「頻率限制總覽」。
- 如要停用 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取
None。 - 如要設定 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取「Default security policy」(預設安全性政策)。
- 在「Policy name」(政策名稱) 欄位,接受系統自動產生的名稱,或輸入安全性政策的名稱。
- 在「Request count」(要求數量) 欄位,接受預設要求數量,或輸入介於
1和10,000之間的整數。 - 在「Interval」(間隔) 欄位,選取所需間隔。
- 在「Enforce on key」(強制啟用金鑰) 欄位,選擇下列其中一個值:「All」(全部)、「IP address」(IP 位址) 或「X-Forwarded-For IP address」(X-Forwarded-For IP 位址)。如要進一步瞭解這些選項,請參閱「識別用戶端以設定頻率限制」。
- 如要停用 Cloud Armor 預設安全性政策,請在「Cloud Armor backend security policy」(Cloud Armor 後端安全性政策) 清單中,選取
- 在「建立後端服務」視窗中,按一下「建立」。
設定轉送規則
轉送規則會決定流量的導向方式。 您可以將流量導向後端服務或 Kubernetes 服務。 凡是未與主機和路徑比對條件確實相符的流量,都會傳送至預設服務。
- 按一下「簡易型主機與路徑規則」。
- 從「後端」清單中選取後端服務。
檢查設定
- 按一下「檢查並完成」。
- 檢查「後端」、「主機與路徑規則」和「前端」的值。
- 選用:按一下「Equivalent Code」(對等程式碼),即可查看用於建立負載平衡器的 REST API 要求。
- 點選「Create」(建立)。等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (serverless-lb)。
- 記下負載平衡器的 IP 位址,以便在下一項工作中使用。
gcloud
- 為負載平衡器保留靜態外部 IP 位址。
gcloud compute addresses create IP_ADDRESS_NAME \ --region=REGION \ --network-tier=STANDARD - 為 Cloud Run 服務建立無伺服器 NEG:
gcloud compute network-endpoint-groups create SERVERLESS_NEG_NAME \ --region=REGION \ --network-endpoint-type=serverless \ --cloud-run-service=CLOUD_RUN_SERVICE_NAME - 建立區域後端服務。將
--protocol設為 HTTP。這個參數會遭到忽略,但必須提供,否則--protocol會預設為 TCP。gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTP \ --region=REGION - 將無伺服器 NEG 新增至後端服務並設為後端:
gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --region=REGION \ --network-endpoint-group=SERVERLESS_NEG_NAME \ --network-endpoint-group-region=REGION - 建立地區網址對應,將傳入要求轉送至後端服務:
這個範例網址對應只會指定代表單一無伺服器應用程式的後端服務,因此不需要設定主機規則或路徑比對器。gcloud compute url-maps create URL_MAP_NAME \ --default-service=BACKEND_SERVICE_NAME \ --region=REGION - 選用:如果您在用戶端與負載平衡器之間使用 HTTPS,請執行這個步驟。建立 HTTP 負載平衡器不需執行此步驟。
您可以建立 Compute Engine 或 Certificate Manager 憑證。您可以使用下列任一方法,透過 Certificate Manager 建立憑證:
- 區域性自行管理憑證。如要瞭解如何建立及使用區域性自行管理憑證,請參閱「部署區域性自行管理憑證」。不支援憑證對應。
區域性 Google 代管憑證。不支援憑證對應。
Certificate Manager 支援下列類型的區域性 Google 代管憑證:
- 區域性 Google 代管憑證,並採用專案 DNS 授權。詳情請參閱「使用 DNS 授權部署區域性 Google 代管憑證」。
- 透過憑證授權單位服務,使用區域性 Google 代管 (私人) 憑證。 詳情請參閱「使用憑證授權單位服務部署區域性 Google 代管憑證」。
建立憑證後,請直接將憑證附加至目標 Proxy。
如要建立區域性自行管理的 SSL 憑證資源,請按照下列步驟操作:gcloud compute ssl-certificates create SSL_CERTIFICATE_NAME \ --certificate CRT_FILE_PATH \ --private-key KEY_FILE_PATH \ --region=REGION - 建立地區目標 Proxy,將要求轉送至網址對應。
如果是 HTTP 負載平衡器,請建立 HTTP 目標 Proxy: 如果是 HTTPS 負載平衡器,請建立 HTTPS 目標 Proxy。 Proxy 是負載平衡器的一部分,用於存放 HTTPS 負載平衡的 SSL 憑證,因此您也可以在此步驟載入憑證。gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=REGIONgcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --ssl-certificates=SSL_CERTIFICATE_NAME \ --url-map=URL_MAP_NAME \ --region=REGION - 建立轉送規則,將傳入要求轉送至 Proxy。
若使用 HTTP 負載平衡器:
如果是 HTTPS 負載平衡器:gcloud compute forwarding-rules create HTTP_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=REGION \ --region=REGION \ --ports=80gcloud compute forwarding-rules create HTTPS_FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=STANDARD \ --network=lb-network \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=REGION \ --region=REGION \ --ports=443
測試負載平衡器
負載平衡器設定完成後,即可開始將流量傳送至負載平衡器的 IP 位址。
前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
點選剛剛建立的負載平衡器。
記下負載平衡器的 IP 位址。
如果是建立 HTTP 負載平衡器,可以使用網路瀏覽器前往
http://IP_ADDRESS測試負載平衡器。請將IP_ADDRESS替換為負載平衡器的 IP 位址。系統會自動導向 Cloud Run 服務首頁。如果是建立 HTTPS 負載平衡器,可以使用網路瀏覽器前往
https://IP_ADDRESS測試負載平衡器。請將IP_ADDRESS替換為負載平衡器的 IP 位址。系統會將您導向 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:將 Cloud Run 服務名稱替換為預留位置
選用:如果可以從網址的路徑部分擷取服務名稱,則可以省略網域。網址遮蓋路徑部分是以第一個斜線 (
/) 字元做為區別。如果網址遮罩中沒有斜線 (/),系統會將遮罩解讀為僅代表主機。因此,在這個範例中,網址遮罩可以縮減為/<service>。同樣地,如果
<service>可以從網址的主機部分擷取,您就可以從網址遮罩中完全省略路徑。您也可以省略第一個預留位置之前的所有主機或子網域元件,以及最後一個預留位置之後的所有路徑元件。在這種情況下,預留位置會擷取元件所需的資訊。
以下列舉幾個範例,說明這些規則:
下表假設您有一個名為 example.com 的自訂網域,且所有 Cloud Run 服務都對應至這個網域。
| 服務、標記名稱 | 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> |
| 服務:登入,標記:測試 | https://test.login.example.com/web | <tag>.<service>.example.com |
| 服務:登入,標記:測試 | https://example.com/home/login/test | example.com/home/<service>/<tag> 或 /home/<service>/<tag> |
| 服務:登入,標記:測試 | https://test.example.com/home/login/web | <tag>.example.com/home/<service> |
使用網址遮罩建立無伺服器 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」下方會顯示負載平衡器的區域。
- 在「無伺服器網路端點群組類型」下方,只有「Cloud Run」是支援的網路端點群組類型。
- 選取「使用網址遮罩」。
- 輸入網址遮罩。如要瞭解如何建立網址遮罩,請參閱建構網址遮罩。
- 點選「建立」。
- 在「New backend」(新增後端) 部分,按一下「Done」(完成)。
- 按一下「Update」。
gcloud
如要使用 example.com/<service> 範例網址遮罩建立無伺服器 NEG,請按照下列步驟操作:
gcloud compute network-endpoint-groups create SERVERLESS_NEG_MASK_NAME \
--region=REGION \
--network-endpoint-type=serverless \
--cloud-run-url-mask="example.com/<service>"
刪除無伺服器 NEG
如果已將網路端點群組附加至後端服務,則無法予以刪除。刪除 NEG 之前,請確保已將其從後端服務卸離。
控制台
- 如要確認要刪除的無伺服器 NEG 未供任何後端服務使用,請前往「負載平衡元件」頁面的「後端服務」分頁。
前往後端服務 - 如果無伺服器 NEG 正在使用中,請執行下列操作:
- 按一下使用無伺服器 NEG 的後端服務名稱。
- 點選「Edit」(編輯)。
- 在「Backends」(後端) 清單中,按一下 ,從後端服務移除無伺服器 NEG 後端。
- 按一下 [儲存]。
- 前往 Google Cloud 控制台的「Network endpoint group」(網路端點群組) 頁面。
前往網路端點群組 - 找到要刪除的無伺服器 NEG,然後勾選對應的核取方塊。
- 按一下「Delete」(刪除)。
- 再按一下 [刪除] 加以確認。
gcloud
如要從後端服務移除無伺服器 NEG,必須指定建立 NEG 的地區。
gcloud compute backend-services remove-backend BACKEND_SERVICE_NAME \
--network-endpoint-group=SERVERLESS_NEG_NAME \
--network-endpoint-group-region=REGION \
--region=REGION
如要刪除無伺服器 NEG:
gcloud compute network-endpoint-groups delete SERVERLESS_NEG_NAME \
--region=REGION