本文提供兩個範例設定,說明如何在共用 VPC 環境中,透過 Cloud Storage bucket 設定區域外部應用程式負載平衡器:
- 第一個範例會在一個服務專案中建立所有負載平衡器元件和後端。
- 第二個範例會在一個服務專案中建立負載平衡器的前端元件和網址對應,而負載平衡器的後端 bucket 和 Cloud Storage bucket 則是在另一個服務專案中建立。
這兩個範例都需要相同的初始設定,才能授予必要角色及設定共用虛擬私有雲,然後才能開始建立負載平衡器。
除了本文上述的範例設定,您也可以設定共用虛擬私有雲部署作業,在主專案中建立負載平衡器的前端和網址對應,並在服務專案中建立後端 bucket 和 Cloud Storage bucket。如要進一步瞭解其他有效的共用虛擬私有雲架構,請參閱「共用虛擬私有雲架構」。
如不想使用 Shared VPC 網路,請參閱「使用 Cloud Storage bucket 設定區域外部應用程式負載平衡器」。
事前準備
請確認設定符合下列必要條件。
建立 Google Cloud 專案
為一個主專案和兩個服務專案建立Google Cloud 專案。
必要的角色
如要取得在共用虛擬私有雲環境中,設定具有 Cloud Storage bucket 的區域外部應用程式負載平衡器所需的權限,請要求管理員授予您下列 IAM 角色:
-
如要設定共用虛擬私有雲:
Compute 共用虛擬私有雲管理員 (
roles/compute.xpnAdmin) 主專案 -
如要讓服務專案管理員使用共用虛擬私有雲網路,請在主專案中指派「Compute 網路使用者」 (
roles/compute.networkUser) 角色。 -
如要建立 Cloud Storage bucket,請在服務專案中指派「Storage Object Admin」(儲存空間物件管理員) (
roles/storage.objectAdmin) 角色。 Storage Object Admin (roles/storage.objectAdmin) on the service project -
如要建立負載平衡資源:服務專案的「Compute Network Admin」(Compute 網路管理員) (
roles/compute.networkAdmin) -
如要建立 Compute Engine 執行個體:
服務專案的 Compute 執行個體管理員 (
roles/compute.instanceAdmin.v1) -
如要建立及修改 Compute Engine SSL 憑證,您必須在服務專案中擁有「Compute Security Admin」 (
roles/compute.securityAdmin) 角色。 -
如要建立及修改 Certificate Manager SSL 憑證,請在服務專案中具備 Certificate Manager Owner (
roles/certificatemanager.owner) 角色。 -
如要參照其他服務專案中的後端 bucket:
服務專案中的 Compute 負載平衡器服務使用者 (
roles/compute.loadBalancerServiceUser)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
設定共用虛擬私有雲環境
在主專案中完成下列步驟,設定共用虛擬私有雲環境:
您不必在每次建立新的負載平衡器時,都執行本節中的步驟。不過,您必須先確認自己有權存取本文所述資源,才能繼續建立負載平衡器。
這個範例使用以下虛擬私有雲網路、地區和僅限 Proxy 的子網路:
電視網。網路是名為
lb-network的自訂模式虛擬私有雲網路。Envoy Proxy 的子網路。
us-east1地區中名為proxy-only-subnet-us的子網路使用10.129.0.0/23做為其主要 IP 範圍。
設定自訂模式虛擬私有雲網路
控制台
前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
在「Name」(名稱) 中輸入
lb-network。點選「建立」。
gcloud
使用
gcloud compute networks create指令,建立名為lb-network的自訂虛擬私有雲網路。gcloud compute networks create lb-network \ --subnet-mode=custom \ --project=HOST_PROJECT_ID將
HOST_PROJECT_ID替換為Google Cloud 專案 ID,該專案已在共用虛擬私有雲環境中啟用為主專案。
設定僅限 Proxy 的子網路
僅限 Proxy 的子網路提供一組 IP 位址, Google Cloud 會代表您執行 Envoy Proxy。Proxy 會終止來自用戶端的連線,並建立與後端的新連線。
這個僅限 Proxy 的子網路,會由與虛擬私有雲網路位於相同區域的所有 Envoy 型區域負載平衡器使用。每個地區和每個網路只能有一個活動的僅限 Proxy 子網路,用於特定用途。
控制台
前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。
按一下您建立的 VPC 網路名稱。
在「子網路」分頁中,按一下「新增子網路」。
輸入下列資訊:
- Name (名稱):
proxy-only-subnet-us - Region (區域):
us-east1 - 用途:區域受管理 Proxy
- IP address range (IP 位址範圍):
10.129.0.0/23
- Name (名稱):
按一下「新增」。
gcloud
使用
gcloud compute networks subnets create指令,在us-east1區域中建立僅限 Proxy 的子網路。gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23 \ --project=HOST_PROJECT_ID將
HOST_PROJECT_ID替換為指派給主專案的Google Cloud 專案 ID。
在主專案中設定共用虛擬私有雲
您可以啟用共用虛擬私有雲主專案,並將服務專案附加至主專案,以便服務專案使用共用虛擬私有雲網路。如要在主專案中設定共用虛擬私有雲,請參閱下列頁面:
完成上述步驟後,您可以選擇下列任一設定:
在服務專案中設定負載平衡器
這個範例會建立區域外部應用程式負載平衡器,其中所有負載平衡元件 (轉送規則、目標 Proxy、網址對應和後端 bucket) 和 Cloud Storage bucket 都會在服務專案中建立。
區域外部應用程式負載平衡器的網路資源 (例如僅限 Proxy 的子網路) 會在主專案中建立。
本節說明如何設定負載平衡器和後端。
本頁的範例設定會為地區外部應用程式負載平衡器的轉送規則明確設定保留的 IP 位址,而不允許分配暫時的 IP 位址。建議您最好為轉送規則保留 IP 位址。
設定 Cloud Storage bucket
設定 Cloud Storage bucket 的程序如下:
建立 Cloud Storage bucket
在本範例中,您會在 us-east1 地區建立兩個 Cloud Storage bucket。
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
按一下「建立」。
在「開始使用」部分,輸入符合命名規範的全域不重複名稱。
按一下「Choose where to store your data」(選取資料的儲存位置)。
將「Location type」(位置類型) 設為「Region」(區域)。
從區域清單中選取「us-east1」。
點選「建立」。
按一下「Buckets」(值區),返回 Cloud Storage Buckets 頁面。 按照這些操作說明,在 us-east1 地區建立第二個 bucket。
gcloud
使用
gcloud storage buckets create指令,在us-east1區域中建立第一個 bucket。gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_ID使用
gcloud storage buckets create指令,在us-east1區域中建立第二個 bucket。gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_ID
更改下列內容:
BUCKET1_NAME和BUCKET2_NAME: Cloud Storage bucket 的名稱SERVICE_PROJECT_ID:指派給服務專案的 Google Cloud 專案 ID
將內容複製到 Cloud Storage bucket
如要填入 Cloud Storage bucket,請將圖片檔案從公開的 Cloud Storage bucket 複製到您自己的 Cloud Storage bucket。
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
將 BUCKET1_NAME 和 BUCKET2_NAME 替換為 Cloud Storage 值區名稱。
將 Cloud Storage bucket 設為可公開存取
如要讓公用網際網路上的所有人都能存取 bucket 中的所有物件,請授予主體 allUsers Storage 物件檢視者角色 (roles/storage.objectViewer)。
控制台
如要向所有使用者授予 bucket 中物件的檢視權限,請為每個 bucket 重複執行下列程序:
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,找到要設為公開的 bucket 名稱,然後點選這個名稱。
選取 [權限] 分頁標籤。
在「Permissions」(權限) 部分中,按一下「Grant access」(授予存取權限) 按鈕。系統會顯示「授予存取權」對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」欄位中,在篩選方塊中輸入
Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
按一下「Allow public access」(允許公開存取)。
gcloud
如要向所有使用者授予值區中物件的檢視權限,請執行 buckets add-iam-policy-binding 指令。
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME --member=allUsers --role=roles/storage.objectViewer
將 BUCKET1_NAME 和 BUCKET2_NAME 替換為 Cloud Storage 值區名稱。
保留負載平衡器的 IP 位址
為負載平衡器的轉送規則保留靜態外部 IP 位址。
控制台
前往 Google Cloud 控制台的「Reserve a static address」(保留靜態位址) 頁面。
在「Name」(名稱) 中輸入新地址的名稱。
將「IP version」(IP 版本) 設為「IPv4」。
在「Type」(類型) 中,選取「Regional」(地區)。
在「地區」部分,請選擇「us-east1」。
將「Attached to」(連接至) 選項保留為「None」(無)。建立負載平衡器後,這個 IP 位址會附加至負載平衡器的轉送規則。
按一下「保留」,保留 IP 位址。
gcloud
如要透過
gcloud compute預留靜態外部 IP 位址,請使用compute addresses create指令。gcloud compute addresses create ADDRESS_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
ADDRESS_NAME:您要指派給這個 IP 位址的名稱。REGION:要保留這個位址的區域。這個區域應與負載平衡器位於相同區域。SERVICE_PROJECT_ID:指派給服務專案的專案 ID。 Google Cloud
使用
compute addresses describe指令查看結果:gcloud compute addresses describe ADDRESS_NAME
將
ADDRESS_NAME替換為您指派給 IP 位址的名稱。後續章節會將傳回的 IP 位址稱為
RESERVED_IP_ADDRESS。
設定 SSL 憑證資源
如果是使用 HTTPS 做為要求和回應通訊協定的區域外部應用程式負載平衡器,您可以使用 Compute Engine SSL 憑證或 Certificate Manager 憑證,建立 SSL 憑證資源。
在本範例中,請使用憑證管理工具建立 SSL 憑證資源,如以下任一文件所述:
建立憑證後,即可將憑證附加至 HTTPS 目標 Proxy。
建議使用 Google 代管的憑證。
設定具備後端值區的負載平衡器
本節說明如何為區域外部應用程式負載平衡器建立下列資源:
- 兩個後端值區。後端 bucket 會做為您先前建立的 Cloud Storage bucket 的 wrapper。
- 網址對應
- 目標 Proxy
- 具有區域 IP 位址的轉送規則。轉送規則具有外部 IP 位址。
在本範例中,您可以使用 HTTP 或 HTTPS 做為用戶端與負載平衡器之間的要求與回應通訊協定。如要建立 HTTPS 負載平衡器,您必須在負載平衡器的前端新增 SSL 憑證資源。
如要使用 gcloud CLI 建立上述負載平衡元件,請按照下列步驟操作:
使用
gcloud compute backend-buckets create指令建立兩個後端 bucket。後端值區的負載平衡架構為EXTERNAL_MANAGED。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_IDgcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
BUCKET1_NAME和BUCKET2_NAME:Cloud Storage bucket 的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
使用
gcloud compute url-maps create指令建立網址對應,將傳入要求轉送至後端 bucket。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
使用
gcloud compute url-maps add-path-matcher指令設定網址對應的主機與路徑規則。在本範例中,預設後端 bucket 為
backend-bucket-cats,負責處理其中所有路徑。不過,任何以http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg為目標的要求都會使用backend-bucket-dogs後端。舉例來說,如果預設後端 (backend-bucket-cats) 中也存在/love-to-fetch/資料夾,負載平衡器會優先處理backend-bucket-dogs後端,因為/love-to-fetch/*有特定的路徑規則。gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
使用
gcloud compute target-http-proxies create指令建立目標 Proxy。如果是 HTTP 流量,請建立目標 HTTP Proxy,將要求轉送至網址對應:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
如果是 HTTPS 流量,請建立目標 HTTPS Proxy,將要求轉送至網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡器的 SSL 憑證。建立憑證後,即可將憑證附加至 HTTPS 目標 Proxy。
如要附加 Certificate Manager 憑證,請執行下列指令:
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱URL_MAP_NAME:網址對應的名稱CERTIFICATE_NAME:Certificate Manager SSL 憑證的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
使用
gcloud compute forwarding-rules create指令,在us-east1區域中建立含有 IP 位址的轉送規則。如果是 HTTP 流量,請建立區域轉送規則,將傳入要求轉送至 HTTP 目標 Proxy:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --region=us-east1 \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱HOST_PROJECT_ID:指派給主機專案的專案 ID Google CloudRESERVED_IP_ADDRESS:保留的 IP 位址TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
如果是 HTTPS 流量,請建立區域轉送規則,將傳入要求轉送至 HTTPS 目標 Proxy:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱HOST_PROJECT_ID:指派給主機專案的專案 ID Google CloudRESERVED_IP_ADDRESS:保留的 IP 位址TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
將 HTTP 要求傳送至負載平衡器
負載平衡服務已開始執行,接著可以將流量傳送至負載平衡器的轉送規則。
取得負載平衡器轉送規則的 IP 位址,該規則位於
us-east1區域。gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
複製傳回的 IP 位址,在下一步中做為
FORWARDING_RULE_IP_ADDRESS使用。使用 curl 向轉送規則的虛擬 IP 位址 (VIP) 發出 HTTP 要求。
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
請將
FORWARDING_RULE_IP_ADDRESS替換為負載平衡器轉送規則的 IP 位址。
設定具備跨專案設定的負載平衡器
本頁面的上一個範例說明如何設定共用虛擬私有雲部署作業,其中所有負載平衡器元件及其後端都會在服務專案中建立。
區域外部應用程式負載平衡器也支援設定共用虛擬私有雲部署作業,讓一個主專案或服務專案中的網址對應表,參照共用虛擬私有雲環境中多個服務專案的後端儲存空間。
您可以參考本節中的步驟,設定下列任一支援的組合:
- 主機專案中的轉送規則、目標 Proxy 和網址對應,以及服務專案中的後端值區
- 服務專案中的轉送規則、目標 Proxy 和網址對應,以及另一個服務專案中的後端 bucket
本節將以後者為例,說明如何設定。
設定總覽
這個範例會設定負載平衡器,其前端和後端位於兩個不同的服務專案。
如果您尚未設定,請務必設定必要角色並建立共用 VPC 環境。如需操作說明,請參閱本頁面開頭的下列各節:
在服務專案 B 中設定 Cloud Storage bucket 和後端 bucket
本節中的所有步驟都必須在服務專案 B 中執行。
設定 Cloud Storage bucket 和後端 bucket 的程序如下:
- 建立 Cloud Storage bucket。
- 將內容複製到 Cloud Storage bucket。
- 將 Cloud Storage bucket 設為可公開存取。
- 建立後端 bucket,並指向 Cloud Storage bucket。
建立 Cloud Storage bucket
控制台
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
按一下「建立」。
在「開始使用」部分,輸入符合命名規範的全域不重複名稱。
按一下「Choose where to store your data」(選取資料的儲存位置)。
將「Location type」(位置類型) 設為「Region」(區域)。
從區域清單中選取「us-east1」。
點選「建立」。
按一下「Buckets」(值區),返回 Cloud Storage Buckets 頁面。 按照這些操作說明,在 us-east1 地區建立第二個 bucket。
gcloud
使用
gcloud storage buckets create指令,在us-east1區域中建立第一個 bucket。gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_B_ID使用
gcloud storage buckets create指令,在us-east1區域中建立第二個 bucket。gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access \ --project=SERVICE_PROJECT_B_ID
更改下列內容:
BUCKET1_NAME和BUCKET2_NAME:Cloud Storage 值區的名稱SERVICE_PROJECT_B_ID:指派給服務專案 B 的 Google Cloud 專案 ID
將內容複製到 Cloud Storage bucket
如要填入 Cloud Storage bucket,請將圖片檔案從公開的 Cloud Storage bucket 複製到您自己的 Cloud Storage bucket。
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
將 BUCKET1_NAME 和 BUCKET2_NAME 替換為 Cloud Storage 值區名稱。
將 Cloud Storage bucket 設為可公開存取
如要讓公用網際網路上的所有人都能存取 bucket 中的所有物件,請授予主體 allUsers Storage 物件檢視者角色 (roles/storage.objectViewer)。
控制台
如要向所有使用者授予 bucket 中物件的檢視權限,請為每個 bucket 重複執行下列程序:
- 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。
在 bucket 清單中,找到要設為公開的 bucket 名稱,然後點選這個名稱。
選取 [權限] 分頁標籤。
在「Permissions」(權限) 部分中,按一下「Grant access」(授予存取權限) 按鈕。系統會顯示「授予存取權」對話方塊。
在「New principals」(新增主體) 欄位中輸入
allUsers。在「選取角色」欄位中,在篩選方塊中輸入
Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」。按一下 [儲存]。
按一下「Allow public access」(允許公開存取)。
gcloud
如要向所有使用者授予值區中物件的檢視權限,請執行 buckets add-iam-policy-binding 指令。
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME --member=allUsers --role=roles/storage.objectViewer
將 BUCKET1_NAME 和 BUCKET2_NAME 替換為 Cloud Storage 值區名稱。
建立後端 bucket,並指向 Cloud Storage bucket
如要建立後端 bucket,請按照下列步驟操作:
使用
gcloud compute backend-buckets create指令建立兩個後端 bucket。後端值區的負載平衡架構為EXTERNAL_MANAGED。gcloud beta compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_B_IDgcloud beta compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --region=us-east1 \ --project=SERVICE_PROJECT_B_ID更改下列內容:
BUCKET1_NAME和BUCKET2_NAME:Cloud Storage bucket 的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
在服務專案 A 中設定負載平衡器前端元件
本節中的所有步驟都必須在服務專案 A 中執行。
在服務專案 A 中,您需要建立下列前端負載平衡元件:
- 附加至目標 Proxy 的 SSL 憑證資源。您可以按照先前章節所述步驟建立 SSL 憑證。
- 負載平衡器轉送規則的 IP 位址。您可以按照先前章節所述步驟建立 IP 位址。
- 參考服務專案 B 中後端 bucket 的網址對應
- 目標 Proxy
- 具有區域 IP 位址的轉送規則。轉送規則具有外部 IP 位址。
如要建立網址對應、目標 Proxy 和轉送規則,請按照下列步驟操作:
使用
gcloud beta compute url-maps create指令建立網址對應,將傳入要求轉送至後端 bucket。gcloud beta compute url-maps create URL_MAP_NAME \ --default-backend-bucket=backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
使用
gcloud beta compute url-maps add-path-matcher指令設定網址對應的主機與路徑規則。在本範例中,預設後端 bucket 為
backend-bucket-cats,負責處理其中所有路徑。不過,任何以http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg為目標的要求都會使用backend-bucket-dogs後端。舉例來說,如果預設後端 (backend-bucket-cats) 中也存在/love-to-fetch/資料夾,負載平衡器會優先處理backend-bucket-dogs後端,因為/love-to-fetch/*有特定的路徑規則。gcloud beta compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-dogs" \ --default-backend-bucket=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-cats \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
使用
gcloud compute target-http-proxies create指令建立目標 Proxy。如果是 HTTP 流量,請建立目標 HTTP Proxy,將要求轉送至網址對應:
gcloud compute target-http-proxies create TARGET_HTTP_PROXY_NAME \ --url-map=URL_MAP_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱URL_MAP_NAME:網址對應的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
如果是 HTTPS 流量,請建立目標 HTTPS Proxy,將要求轉送至網址對應。Proxy 是負載平衡器的一部分,用於保存 HTTPS 負載平衡器的 SSL 憑證。建立憑證後,即可將憑證附加至 HTTPS 目標 Proxy。
如要附加 Certificate Manager 憑證,請執行下列指令:
gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \ --url-map=lb-map \ --certificate-manager-certificates=CERTIFICATE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱URL_MAP_NAME:網址對應的名稱CERTIFICATE_NAME:Certificate Manager SSL 憑證的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
使用
gcloud compute forwarding-rules create指令,在asia-east1區域中建立含有 IP 位址的轉送規則。如果是 HTTP 流量,請建立區域轉送規則,將傳入要求轉送至 HTTP 目標 Proxy:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=80 \ --region=us-east1 \ --target-http-proxy=TARGET_HTTP_PROXY_NAME \ --target-http-proxy-region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱HOST_PROJECT_ID:指派給主機專案的專案 ID Google CloudRESERVED_IP_ADDRESS:保留的 IP 位址TARGET_HTTP_PROXY_NAME:目標 HTTP Proxy 的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
如果是 HTTPS 流量,請建立區域轉送規則,將傳入要求轉送至 HTTPS 目標 Proxy:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network=projects/HOST_PROJECT_ID/global/networks/lb-network \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --region=us-east1 \ --target-https-proxy=TARGET_HTTPS_PROXY_NAME \ --target-https-proxy-region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱HOST_PROJECT_ID:指派給主機專案的專案 ID Google CloudRESERVED_IP_ADDRESS:保留的 IP 位址TARGET_HTTPS_PROXY_NAME:目標 HTTPS Proxy 的名稱SERVICE_PROJECT_A_ID:指派給服務專案 A 的專案 ID Google Cloud
授予 Compute 負載平衡器管理員在服務專案中使用後端儲存空間的權限
如要讓負載平衡器參照其他服務專案中的後端值區,負載平衡器管理員必須具備 compute.backendBuckets.use 權限。如要授予這項權限,可以使用名為「Compute 負載平衡器服務使用者」的預先定義 IAM 角色 (roles/compute.loadBalancerServiceUser)。這項角色必須由服務專案管理員授予,且可套用至服務專案層級或個別後端值區層級。
在本例中,服務專案 B 的服務專案管理員必須執行下列其中一個指令,將 compute.backendBuckets.use 權限授予服務專案 A 的負載平衡器管理員。您可以在專案層級 (適用於專案中的所有後端 bucket),或針對每個後端 bucket 執行這項操作。
控制台
專案層級權限
請按照下列步驟,授予專案中所有後端 bucket 的權限。
您必須具備 compute.regionBackendBuckets.setIamPolicy 和 resourcemanager.projects.setIamPolicy 權限,才能完成這個步驟。
前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
選取專案。
按一下 「授予存取權」。
在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。
在「指派角色」部分,按一下「新增角色」。
在「Select roles」(選取角色) 對話方塊的「Search for roles」(搜尋角色) 欄位中,輸入
Compute Load Balancer Services User。勾選「Compute Load Balancer Services User」核取方塊。
按一下「套用」。
選用:為角色新增條件。
按一下 [儲存]。
個別後端 bucket 的資源層級權限
請按照下列步驟,授予專案中個別後端 bucket 的權限。
您必須具備 compute.regionBackendBuckets.setIamPolicy 權限,才能完成這個步驟。
前往 Google Cloud 控制台的「Backends」(後端) 頁面。
從後端清單中,選取要授予存取權的後端值區,然後按一下「權限」。
按一下「新增主體」。
在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。
在「Select a role」(選取角色) 清單中,選取「Compute Load Balancer Services User」(Compute Load Balancer 服務使用者)。
按一下 [儲存]。
gcloud
專案層級權限
請按照下列步驟,授予專案中所有後端 bucket 的權限。
您必須具備 compute.regionBackendBuckets.setIamPolicy 和 resourcemanager.projects.setIamPolicy 權限,才能完成這個步驟。
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser"
更改下列內容:
SERVICE_PROJECT_B_ID:指派給服務專案 B 的專案 ID Google CloudLOAD_BALANCER_ADMIN:要新增繫結的主體
個別後端 bucket 的資源層級權限
在後端儲存空間層級,服務專案管理員可以使用下列任一指令,授予 Compute 負載平衡器服務使用者角色 (roles/compute.loadBalancerServiceUser):
使用 gcloud projects add-iam-policy-binding 指令授予 Compute 負載平衡器服務使用者角色。
您必須具備compute.regionBackendBuckets.setIamPolicy權限,才能完成這個步驟。
gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser" \
--condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/REGION/backendBuckets/BACKEND_BUCKET_NAME",title=Shared VPC condition'
SERVICE_PROJECT_B_ID:指派給服務專案 B 的專案 ID Google CloudLOAD_BALANCER_ADMIN:要新增繫結的主體REGION:後端 bucket 所在的 Google Cloud 區域BACKEND_BUCKET_NAME:後端 bucket 的名稱
gcloud compute backend-buckets add-iam-policy-binding 指令
授予 Compute 負載平衡器服務使用者角色。
gcloud compute backend-buckets add-iam-policy-binding BACKEND_BUCKET_NAME \
--member="user:LOAD_BALANCER_ADMIN" \
--role="roles/compute.loadBalancerServiceUser" \
--project=SERVICE_PROJECT_B_ID \
--region=REGION
將 HTTP 要求傳送至負載平衡器
負載平衡服務已開始執行,接著可以將流量傳送至負載平衡器的轉送規則。
取得負載平衡器轉送規則的 IP 位址,該規則位於
us-east1區域。gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \ --region=us-east1 \ --project=SERVICE_PROJECT_A_ID更改下列內容:
FORWARDING_RULE_NAME:轉送規則的名稱SERVICE_PROJECT_ID:指派給服務專案的專案 ID Google Cloud
複製傳回的 IP 位址,以便在下一步中做為
FORWARDING_RULE_IP_ADDRESS使用。使用 curl 向轉送規則的 VIP 發出 HTTP 要求。
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
請將
FORWARDING_RULE_IP_ADDRESS替換為負載平衡器轉送規則的 IP 位址。