本頁說明如何部署區域外部應用程式負載平衡器,並使用 Cloud Run 後端。如要進行這項設定,請為負載平衡器使用無伺服器 NEG 後端。
執行這項程序前,請務必先熟悉下列主題:
本指南說明如何設定應用程式負載平衡器,將要求 Proxy 至無伺服器 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 的子網路。
建立虛擬私有雲網路
建立自訂模式的虛擬私有雲網路,然後在區域內建立所需的子網路。
主控台
在 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 子網路的共用 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 後端的流量,會使用在 VPC 外部定義的特殊路徑,不受防火牆規則限制。因此,如果負載平衡器只有無伺服器 NEG 後端,則不需要建立防火牆規則,允許流量從僅限 Proxy 的子網路傳送至無伺服器後端。
控制台
選取負載平衡器類型
前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型) 部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」。
- 在「Global or single region deployment」(全域或單一區域部署) 部分,選取「Best for regional workloads」(最適合區域工作負載),然後點選「Next」(下一步)。
- 按一下 [設定]。
基本設定
- 在負載平衡器的「Name」(名稱) 中輸入
serverless-lb
。 - 選取「網路」,然後選取
lb_network
。 - 將視窗保持開啟,以便繼續操作。
設定前端
- 繼續操作前,請先確認您已取得 SSL 憑證。
- 按一下「前端設定」。
- 輸入名稱。
- 如要設定區域外部應用程式負載平衡器,請填寫下列欄位。
- 在「Protocol」(通訊協定) 底下,選取「HTTPS」。
- 在「網路服務級別」下,選取 [標準]。
- 在「IP version」(IP 版本) 下方,選取「IPv4」。
- 在「IP address」(IP 位址) 下方,選取「Ephemeral」(臨時)。
- 在「Port」(通訊埠) 下方選取
443
。 在「Certificate」(憑證) 下方,選取現有的 SSL 憑證,或建立新憑證。
以下範例說明如何建立 Compute Engine SSL 憑證:
- 按一下「建立新憑證」。
- 在「名稱」欄位中輸入名稱。
- 在適當的欄位中,上傳 PEM 格式的檔案:
- 認證
- 私密金鑰
- 點選「建立」。
- (選用) 如要建立 HTTP 負載平衡器,請執行下列操作:
- 在「Protocol」(通訊協定) 底下,選取「HTTP」。
- 在「網路服務級別」下,選取 [標準]。
- 在「IP version」(IP 版本) 下方,選取「IPv4」。
- 在「IP address」(IP 位址) 下方,選取「Ephemeral」(臨時)。
- 在「Port」(通訊埠) 下方選取
80
。 - 按一下 [完成]。
如要測試這個程序,但不想設定 SSL 憑證資源,可以設定 HTTP 負載平衡器。
設定後端服務
- 按一下「後端設定」。
- 在「建立或選取後端服務」下拉式選單中,將指標懸停在「後端服務」上,然後選取「建立後端服務」。
- 在「建立後端服務」視窗中,輸入「名稱」。
- 在「Backend type」(後端類型) 下方,選取「無伺服器網路端點群組」。
- 請勿變更「Protocol」(通訊協定)。系統會忽略這個參數。
- 在「Backends」(後端) >「New backend」(新增後端) 下方,選取「Create serverless network endpoint group」(建立無伺服器網路端點群組)。
- 在「建立無伺服器網路端點群組」視窗中,輸入「名稱」。
- 「Region」下方會顯示負載平衡器的區域。
- 在「無伺服器網路端點群組類型」欄位中,選取「Cloud Run」。目前僅支援 Cloud Run 類型。
- 選取「選取服務名稱」。
- 在「服務」下拉式清單中,選取要建立負載平衡器的 Cloud Run 服務。
- 按一下 [完成]。
- 點選「建立」。
- 在「建立後端服務」視窗中,按一下「建立」。
設定轉送規則
轉送規則會決定流量的導向方式。 您可以將流量導向後端服務或 Kubernetes 服務。 凡是未與主機和路徑比對條件確實相符的流量,都會傳送至預設服務。
- 按一下「簡易型主機與路徑規則」。
- 從「後端」下拉式清單中選取後端服務。
檢閱設定
- 按一下「檢查並完成」。
- 檢查「後端」、「主機與路徑規則」和「前端」的值。
- 選用:按一下「對等程式碼」,即可查看用於建立負載平衡器的 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 或 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=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 為已部署服務提供的預設位址,網址遮罩就特別實用。即使應用程式使用自訂網址模式,您也能透過網址遮罩,使用單一規則指定多個服務和版本。
如果尚未閱讀,請務必先參閱無伺服器 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 自訂網域網址 | 網址遮罩 |
---|---|---|
服務:登入 | https://login-home.example.com/web | <service>-home.example.com |
服務:登入 | 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 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」(完成)。
- 按一下「更新」。
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