本頁面說明如何部署區域性外部應用程式負載平衡器,並搭配 Cloud Run 後端。如要設定這項功能,請為負載平衡器使用無伺服器 NEG 後端。
嘗試執行這個程序之前,請務必熟悉下列主題:
本指南說明如何設定應用程式負載平衡器,將要求代理至無伺服器 NEG 後端。
無伺服器 NEG 可讓您搭配負載平衡器使用 Cloud Run 服務。使用無伺服器 NEG 後端設定負載平衡器後,系統會將負載平衡器的要求轉送至 Cloud Run 後端。
事前準備
安裝 Google Cloud SDK
安裝 Google Cloud CLI 工具。如需該工具的概念與安裝資訊,請參閱 gcloud 概覽。
如果您先前沒有執行過 gcloud CLI,請先執行 gcloud init
,以初始化您的 gcloud
目錄。
部署 Cloud Run 服務
本頁的操作說明假設您已啟用 Cloud Run 服務。
如要使用本頁面中的範例,您可以參考任何 Cloud Run 快速入門導覽課程來部署 Cloud Run 服務。
無伺服器 NEG 和負載平衡器必須與 Cloud Run 服務位於相同區域。您可以限制對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 身分與存取權管理角色和權限:
工作 | 必要角色 |
---|---|
建立負載平衡器和網路元件 | 網路管理員 |
建立及修改 NEG | Compute 執行個體管理員 |
建立及修改 SSL 憑證 | 安全性管理員 |
設定網路和子網路
如要設定網路及其子網路,請執行下列工作:
- 建立虛擬私有雲網路和子網路。
- 建立僅限 Proxy 的子網路。
建立虛擬私有雲網路
建立自訂模式 VPC 網路,然後在區域內建立所需的子網路。
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network
。在「子網路建立模式」中,選取「自訂」。
在「New subnet」(新子網路) 部分,指定子網路的以下設定參數:
- 在「Name」(名稱) 中輸入
lb-subnet
。 - 選擇一個 [Region] (地區)。
- 在「IP address range」(IP 位址範圍) 中,輸入
10.1.2.0/24
。 - 按一下 [完成]。
- 在「Name」(名稱) 中輸入
按一下 [建立]。
gcloud
使用
gcloud compute networks create
指令建立自訂虛擬私有雲網路:gcloud compute networks create lb-network --subnet-mode=custom
在
lb-network
網路中建立子網路。本範例會為子網路使用10.1.2.0/24
的 IP 位址範圍。您可以設定任何有效的子網路範圍。gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=REGION
建立僅限 Proxy 的子網路
為 lb-network
網路的特定區域中,所有區域 Envoy 型負載平衡器建立僅限 Proxy 的子網路。
主控台
在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
按一下要新增僅限 Proxy 子網路的共用虛擬私有雲網路名稱。
按一下 [新增子網路]。
在「Name」(名稱) 欄位中輸入
proxy-only-subnet
。選擇一個 [Region] (地區)。
將「用途」設為「區域受管理 Proxy」。
輸入 IP 位址範圍 為
10.129.0.0/23
。按一下「新增」。
gcloud
使用
gcloud compute networks subnets create
指令建立僅限 Proxy 的子網路。這個範例會為僅限 Proxy 子網路使用
10.129.0.0/23
的 IP 位址範圍。您可以設定任何有效的子網路範圍。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 後端的流量,會使用在 VPC 外定義的特殊路徑,不受防火牆規則的約束。因此,如果負載平衡器只有無伺服器 NEG 後端,您就不需要建立防火牆規則,允許從僅限 Proxy 的子網路傳送至無伺服器後端的流量。
控制台
開始設定
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型)部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「全域或單一區域部署」部分,選取「最適合區域工作負載」,然後點選「Next」。
- 按一下 [設定]。
基本設定
- 在負載平衡器的名稱中輸入
serverless-lb
。 - 選取「網路」為
lb_network
。 - 將視窗保持開啟,以便繼續操作。
設定前端
- 繼續操作前,請確認您已取得SSL 憑證。
- 按一下「前端設定」。
- 輸入名稱。
- 如要設定區域性外部應用程式負載平衡器,請按照下列方式填寫欄位。
- 在「Protocol」下方,選取「HTTPS」。
- 在「網路服務級別」下,選取 [標準]。
- 在「IP 版本」下方,選取「IPv4」。
- 在「IP 位址」下方,選取「臨時」。
- 在「Port」(通訊埠) 下方,選取
443
。 在「Certificate」(憑證) 下方,選取現有的 SSL 憑證或建立新憑證。
以下範例說明如何建立 Compute Engine SSL 憑證:
- 按一下「建立新憑證」。
- 在「名稱」欄位中輸入名稱。
- 在適當的欄位中,上傳 PEM 格式的檔案:
- 認證
- 私密金鑰
- 按一下 [建立]。
- 選用:如要建立 HTTP 負載平衡器,請執行下列操作:
- 在「Protocol」(通訊協定) 下方,選取「HTTP」。
- 在「網路服務級別」下,選取 [標準]。
- 在「IP 版本」下方,選取「IPv4」。
- 在「IP 位址」下方,選取「臨時」。
- 在「Port」(通訊埠) 下方,選取
80
。 - 按一下 [完成]。
如果您想在不設定 SSL 憑證資源的情況下測試這個程序,可以設定 HTTP 負載平衡器。
設定後端服務
- 按一下「後端設定」。
- 在「Create or select backend services」下拉式選單中,將游標懸停在「Backend services」上,然後選取「Create a backend service」。
- 在「Create a backend service」(建立後端服務) 視窗中輸入「名稱」。
- 在「Backend type」下方,選取「Serverless network endpoint group」。
- 請勿變更「Protocol」。系統會忽略此參數。
- 在「Backends」>「New backend」下方,選取「Create serverless network endpoint group」。
- 在「Create serverless network endpoint group」視窗中,輸入「名稱」。
- 「Region」下方會顯示負載平衡器的區域。
- 在「無伺服器網路端點群組類型」欄位中,選取「Cloud Run」。僅支援 Cloud Run 類型。
- 選取「選取服務名稱」。
- 在「Service」下拉式清單中,選取要建立負載平衡器的 Cloud Run 服務。
- 按一下 [完成]。
- 按一下 [建立]。
- 在「Create backend service」視窗中,按一下「Create」。
設定轉送規則
轉送規則會決定流量的導向方式。您可以將流量導向後端服務或 Kubernetes 服務。凡是未與主機和路徑比對器確實相符的流量,都會傳送至預設服務。
- 按一下「簡易主機與路徑規則」。
- 從「Backend」下拉式清單中選取後端服務。
檢閱設定
- 按一下「檢查並完成」。
- 檢查「後端」、「主機與路徑規則」和「前端」的值。
- 選用:按一下「等效程式碼」,查看用於建立負載平衡器的 REST API 要求。
- 按一下「建立」,等待負載平衡器建立完成。
- 按一下負載平衡器的名稱 (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 或憑證管理工具憑證。請使用下列任一方法,透過憑證管理工具建立憑證:
- 區域性自行管理憑證。如要進一步瞭解如何建立及使用區域性自行管理憑證,請參閱「部署區域性自行管理憑證」一文。不支援憑證對應。
區域性 Google 代管憑證。不支援憑證對應。
Certificate Manager 支援下列類型的區域性 Google 代管憑證:
- 區域性 Google 代管憑證,並針對每個專案授權 DNS 存取權。詳情請參閱「部署區域性 Google 代管憑證」。
- 區域性 Google 代管 (私人) 憑證 (搭配憑證授權單位服務)。 詳情請參閱「透過 CA 服務部署區域性 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=REGION
gcloud 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=80
gcloud 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 為已部署服務提供的預設位址,網址遮罩就特別實用。即使應用程式使用自訂網址模式,您也可以透過單一規則指定多個服務和版本。
如果您尚未閱讀,請務必參閱 Serverless NEGS 總覽:網址遮罩。
建構網址遮罩
如要為負載平衡器建構網址遮罩,請先從服務的網址開始。本範例使用在 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> |
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> |
使用網址遮罩建立無伺服器 NEG
主控台
如要使用新的負載平衡器,您可以使用本文件先前所述的端對端程序。設定後端服務時,請輸入網址遮罩,而非選取特定服務。
如果您有現有的負載平衡器,可以編輯後端設定,讓無伺服器 NEG 指向網址遮罩,而非特定服務。
如要將以網址遮罩為基礎的無伺服器 NEG 新增至現有的後端服務,請按照下列步驟操作:
- 前往 Google Cloud 控制台的「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 之前,請確保已將其從後端服務卸離。
主控台
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