在共用 VPC 環境中,使用 Cloud Storage 值區設定區域性內部應用程式負載平衡器

本文提供兩個範例設定,說明如何在共用虛擬私有雲環境中,使用 Cloud Storage 值區設定regional internal Application Load Balancer :

  • 第一個範例會在一個服務專案中建立所有負載平衡器元件和後端。
  • 第二個範例會在一個服務專案中建立負載平衡器的前端元件和網址對應,而負載平衡器的後端 bucket 和 Cloud Storage bucket 則是在另一個服務專案中建立。

這兩個範例都需要相同的初始設定,才能授予必要角色設定共用虛擬私有雲,然後才能開始建立負載平衡器。

如要進一步瞭解其他有效的共用虛擬私有雲架構,請參閱「共用虛擬私有雲架構」。

如不想使用 Shared VPC 網路,請參閱「設定 regional internal Application Load Balancer 和 Cloud Storage bucket」。

事前準備

請確認設定符合下列必要條件。

建立 Google Cloud 專案

為一個主專案和兩個服務專案建立 Google Cloud 專案

必要的角色

如要取得在共用 VPC 環境中,使用 Cloud Storage bucket 設定 regional internal Application Load Balancer 所需的權限,請要求管理員授予您下列 IAM 角色:

  • 設定共用 VPC、啟用主專案,並授予服務專案管理員存取權: 主專案的Compute Shared VPC 管理員 (roles/compute.xpnAdmin)
  • 新增及移除防火牆規則: 主專案的Compute Security Admin (roles/compute.securityAdmin)
  • 服務專案管理員使用共用虛擬私有雲網路的存取權: 主專案中的「Compute 網路使用者」 (roles/compute.networkUser)
  • 建立負載平衡資源: 服務專案的Compute Network Admin (roles/compute.networkAdmin)
  • 建立 Compute Engine 執行個體: 服務專案的 Compute Instance Admin (roles/compute.instanceAdmin.v1)
  • 建立及修改 Compute Engine SSL 憑證: 服務專案的「Compute Security Admin」 (roles/compute.securityAdmin)
  • 建立及修改 Certificate Manager SSL 憑證: 服務專案的Certificate Manager 擁有者 (roles/certificatemanager.owner)
  • 從其他服務專案啟用負載平衡器參照後端 bucket: 服務專案的「Compute 負載平衡器服務使用者」 (roles/compute.loadBalancerServiceUser)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

設定共用虛擬私有雲環境

如要設定共用虛擬私有雲環境,請在主專案中完成下列步驟:

  1. 在主專案中設定虛擬私有雲網路
  2. 在主專案中設定僅限 Proxy 的子網路
  3. 在主專案中設定防火牆規則
  4. 在主專案中設定共用虛擬私有雲

您不需要在每次建立新的負載平衡器時,都執行本節中的步驟。不過,您必須確保有權存取本文所述資源,才能繼續建立負載平衡器。

這個範例使用以下虛擬私有雲網路、地區和僅限 Proxy 的子網路:

  • 電視網。網路是名為 lb-network自訂模式虛擬私有雲網路

  • 負載平衡器的子網路us-east1 地區中名為 subnet-us 的子網路使用 10.1.2.0/24 做為其主要 IP 範圍。

  • Envoy Proxy 的子網路us-east1 地區中名為 proxy-only-subnet-us 的子網路使用 10.129.0.0/23 做為其主要 IP 範圍。

設定主專案的虛擬私有雲

為主專案設定自訂模式 VPC,並在您需要設定負載平衡器轉送規則的相同區域中,建立子網路。

您不必在每次建立新的負載平衡器時執行這個步驟。您只需要確保服務專案有權存取共用虛擬私有雲網路中的子網路 (除了僅限 Proxy 的子網路之外)。

控制台

  1. 前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下「建立虛擬私有雲網路」

  3. 在「Name」(名稱) 欄位中,輸入 lb-network

  4. 在「子網路建立模式」部分,選取「自訂」

  5. 在「New subnet」(新的子網路) 區段中,提供下列資訊:

    1. 在「Name」(名稱) 欄位中,輸入 subnet-us
    2. 在「Region」(區域) 清單中選取「us-east1」。
    3. 在「IPv4 range」(IPv4 範圍) 欄位中,輸入 10.1.2.0/24
    4. 按一下 [完成]
  6. 點選「建立」

gcloud

  1. 使用 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,這個 ID 會指派給在共用虛擬私有雲環境中啟用為主專案的專案。

  2. 使用 gcloud compute networks subnets create 指令,在 us-east1 地區的 lb-network 虛擬私有雲網路中建立子網路。

    gcloud compute networks subnets create subnet-us \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-east1 \
        --project=HOST_PROJECT_ID
    

在主專案中設定僅限 Proxy 的子網路

僅限 Proxy 的子網路提供一組 IP 位址, Google Cloud 會代表您執行 Envoy Proxy。Proxy 會終止來自用戶端的連線,並建立與後端的新連線。

這個僅限 Proxy 的子網路,會由與虛擬私有雲網路位於相同區域的所有 Envoy 型區域負載平衡器使用。每個地區和每個網路只能有一個用於特定用途的有效僅限 Proxy 子網路。在本範例中,我們會在 us-east1 區域建立僅限 Proxy 的子網路。

控制台

  1. 前往 Google Cloud 控制台的「VPC Networks」(虛擬私有雲網路) 頁面。

    前往「VPC networks」(虛擬私有雲網路)

  2. 按一下您建立的 VPC 網路名稱。

  3. 在「Subnets」(子網路) 分頁中,按一下「Add subnet」(新增子網路),然後提供下列資訊:

    1. 在「Name」(名稱) 欄位中,輸入 proxy-only-subnet-us
    2. 在「Region」(區域) 清單中選取「us-east1」。
    3. 在「用途」部分,選取「Regional Managed Proxy」
    4. 在「IPv4 range」(IPv4 範圍) 欄位中,輸入 10.129.0.0/23
  4. 按一下「新增」。

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
    

在主專案中設定防火牆規則

本範例使用 fw-allow-ssh 輸入防火牆規則,允許在 TCP 通訊埠 22 上來自任何位址的連入 SSH 連線。您可以為這項規則選擇較嚴格的來源 IP 範圍。舉例來說,您可以僅指定要從其中啟動 SSH 工作階段之系統的 IP 範圍。這個範例會使用目標標記 allow-ssh 來識別套用防火牆規則的虛擬機器 (VM)。如果沒有這些防火牆規則,預設拒絕輸入規則將會封鎖傳入至後端執行個體的流量。

控制台

  1. 前往 Google Cloud 控制台的「Firewall policies」(防火牆政策) 頁面。

    前往「防火牆政策」頁面

  2. 按一下「Create firewall rule」(建立防火牆規則),建立允許Google Cloud 健康狀態檢查的規則。

  3. 用下列資訊作答:

    1. 在「Name」(名稱) 欄位中,輸入 fw-allow-ssh
    2. 在「Network」(網路) 清單中,選取「lb-network」
    3. 在「Direction of traffic」(流量方向) 中選取 [Ingress] (輸入)
    4. 在「Action on match」(相符時執行的動作) 中選取 [Allow] (允許)
    5. 在「Targets」(目標) 清單中,選取「Specified target tags」(指定的目標標記)
    6. 在「Target tags」(目標標記) 欄位中輸入 allow-ssh
    7. 在「Source filter」(來源篩選器) 清單中,選取「IPv4 ranges」(IPv4 範圍)
    8. 在「Source IPv4 ranges」(來源 IPv4 範圍) 欄位中輸入 0.0.0.0/0
    9. 在「Protocols and ports」(通訊協定和通訊埠) 中選取 [Specified protocols and ports] (指定的通訊協定和通訊埠)
    10. 勾選「TCP」TCP核取方塊,然後輸入 22 做為通訊埠編號。
  4. 點選「建立」

gcloud

  • 建立 fw-allow-ssh 防火牆規則,允許與具有 allow-ssh 網路標記的 VM 建立 SSH 連線。 若省略 source-ranges,Google Cloud 會將規則解讀為任何來源

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22 \
        --project=HOST_PROJECT_ID
    

在主專案中設定共用虛擬私有雲

啟用共用虛擬私有雲主專案,並將服務專案附加到主專案,以便服務專案使用共用虛擬私有雲網路。如要在主專案中設定共用虛擬私有雲,請參閱下列頁面:

  1. 啟用主專案
  2. 附加服務專案

完成上述步驟後,請完成下列任一設定:

在服務專案中設定負載平衡器

本範例會建立 regional internal Application Load Balancer ,其中所有負載平衡元件 (轉送規則、目標 Proxy、網址對應和後端 bucket) 和 Cloud Storage bucket 都會在服務專案中建立。

regional internal Application Load Balancer的網路資源 (例如僅限 Proxy 的子網路) 是在主專案中建立。

圖 1. 在共用 VPC 環境中,使用 Cloud Storage 值區的區域型外部 HTTP 負載平衡器
圖 1. 在共用虛擬私有雲環境中,搭配 Cloud Storage bucket 使用區域性內部應用程式負載平衡器

本節說明如何設定負載平衡器和後端。

本頁的範例明確設定為 regional internal Application Load Balancer的轉送規則保留的 IP 位址,而不允許分配暫時性的 IP 位址。建議您最好為轉送規則保留 IP 位址。

設定 Cloud Storage bucket

設定 Cloud Storage bucket 的程序如下:

  1. 建立 Cloud Storage bucket。
  2. 將內容複製到 bucket。
  3. 將 bucket 設為可公開讀取。

建立 Cloud Storage 值區

在本範例中,您會在 us-east1 地區建立兩個 Cloud Storage bucket。

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 按一下「建立」

  3. 在「開始使用」部分,輸入符合命名規範的全域不重複名稱。

  4. 按一下「Choose where to store your data」(選取資料的儲存位置)

  5. 將「Location type」(位置類型) 設為「Region」(區域)

  6. 從區域清單中選取「us-east1」

  7. 點選「建立」

  8. 按一下「Buckets」(值區),返回「Cloud Storage Buckets」(Cloud Storage 值區) 頁面。 按照上述操作說明,在 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 gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access \
        --project=SERVICE_PROJECT_ID
    

    更改下列內容:

    • BUCKET1_NAME:第一個 Cloud Storage bucket 的名稱
    • 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/

將 Cloud Storage 值區設為可公開讀取

如要將 bucket 中的所有物件設為可供公開網路中的所有使用者讀取,請授予主體 allUsers Storage 物件檢視者角色 (roles/storage.objectViewer)。

控制台

如要向所有使用者授予 bucket 中物件的檢視權限,請為每個 bucket 重複執行下列程序:

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 在值區清單中,找出要設為公開的每個值區,然後勾選對應的核取方塊。

  3. 按一下「權限」按鈕。 系統會隨即顯示「Permissions」對話方塊。

  4. 在「Permissions」(權限) 對話方塊中,按一下「Add principal」(新增主體) 按鈕 。系統會顯示「授予存取權」對話方塊。

  5. 在「New principals」(新增主體) 欄位中輸入 allUsers

  6. 在「選取角色」欄位中,在篩選方塊中輸入 Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」

  7. 按一下 [儲存]

  8. 按一下「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

預留靜態內部 IP 位址

為負載平衡器的轉送規則保留靜態內部 IP 位址。詳情請參閱「預留靜態內部 IP 位址」。

控制台

  1. 前往 Google Cloud 控制台的「Reserve internal static IP address」(保留內部靜態 IP 位址) 頁面。

    前往「保留內部靜態 IP 位址」

  2. 在「名稱」欄位中,輸入新地址的名稱。

  3. 在「IP version」(IP 版本) 清單中,選取「IPv4」

  4. 在「Network」(網路) 清單中,選取「lb-network」

  5. 在「Subnetwork」(子網路) 清單中,選取「subnet-us」

  6. 在「地區」部分,請選擇「us-east1」

  7. 在「Static IP address」(靜態 IP 位址) 清單中,選取「Assign automatically」(自動指派)。建立負載平衡器後,這個 IP 位址會附加至負載平衡器的轉送規則。

  8. 按一下「保留」,保留 IP 位址。

gcloud

  1. 如要透過 gcloud compute 預留靜態內部 IP 位址,請使用 compute addresses create 指令

     gcloud compute addresses create ADDRESS_NAME  \
         --region=REGION \
         --subnet=subnet-us \
         --project=SERVICE_PROJECT_ID
    

    更改下列內容:

    • ADDRESS_NAME:您要稱呼此位址的名稱。
    • REGION:要保留這個位址的區域。這個區域應與負載平衡器位於相同區域。例如:us-east1
    • SERVICE_PROJECT_ID:指派給服務專案的專案 ID。 Google Cloud
  2. 使用 compute addresses describe 指令查看結果:

     gcloud compute addresses describe ADDRESS_NAME
    

    複製傳回的 IP 位址,在後續章節中做為 RESERVED_IP_ADDRESS 使用。

設定 SSL 憑證資源

如果 regional internal Application Load Balancer 使用 HTTPS 做為要求和回應通訊協定,您可以建立 SSL 憑證資源,並使用 Compute Engine SSL 憑證或 Certificate Manager 憑證。

在本範例中,請使用憑證管理工具建立 SSL 憑證資源,如以下任一文件所述:

建立憑證後,即可將憑證附加至 HTTPS 目標 Proxy。

建議使用 Google 代管的憑證,以減少營運支出,例如手動管理憑證相關的安全風險。

設定具備後端值區的負載平衡器

本節說明如何為regional internal Application Load Balancer建立下列資源:

在本範例中,您可以使用 HTTP 或 HTTPS 做為用戶端與負載平衡器之間的要求與回應通訊協定。如要建立 HTTPS 負載平衡器,您必須在負載平衡器的前端新增 SSL 憑證資源。

如要使用 gcloud CLI 建立上述負載平衡元件,請按照下列步驟操作:

  1. 使用 gcloud beta compute backend-buckets create 指令,在 us-east1 區域中建立兩個後端 bucket。後端值區的負載平衡架構為 INTERNAL_MANAGED

      gcloud beta compute backend-buckets create backend-bucket-cats \
          --gcs-bucket-name=BUCKET1_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1 \
          --project=SERVICE_PROJECT_ID
    
      gcloud beta compute backend-buckets create backend-bucket-dogs \
          --gcs-bucket-name=BUCKET2_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1
          --project=SERVICE_PROJECT_ID
    
  2. 使用 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_ID
    

    URL_MAP_NAME 替換為網址對應的名稱。

  3. 使用 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/*=backend-bucket-dogs" \
          --default-backend-bucket=backend-bucket-cats \
          --region=us-east1 \
          --project=SERVICE_PROJECT_ID
    
  4. 使用 gcloud compute target-http-proxies create 指令建立目標 Proxy

    HTTP

    如果是 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 代理伺服器的名稱。

    HTTPS

    如果是 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 的名稱
    • CERTIFICATE_NAME:使用 Certificate Manager 建立的 SSL 憑證名稱
  5. 使用 gcloud compute forwarding-rules create 指令,在 us-east1 區域中建立含有 IP 位址的轉送規則。

    HTTP 轉送規則可選擇是否預留 IP 位址,但 HTTPS 轉送規則必須預留 IP 位址。

    在本範例中,臨時 IP 位址會與負載平衡器的 HTTP 轉送規則建立關聯。只要轉送規則存在,臨時 IP 位址就會保持不變。如果您需要刪除轉送規則再重新建立,該規則可能會獲得新的 IP 位址。

    HTTP

    如果是 HTTP 流量,請建立區域轉送規則,將傳入要求轉送至 HTTP 目標 Proxy:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --subnet-region=us-east1 \
          --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:轉送規則的名稱
    • RESERVED_IP_ADDRESS:您在「保留靜態內部 IP 位址」一節中複製的保留 IP 位址

    HTTPS

    如果是 HTTPS 流量,請建立區域轉送規則,將傳入要求轉送至 HTTPS 目標 Proxy:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --subnet-region=us-east1 \
          --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:轉送規則的名稱
    • RESERVED_IP_ADDRESS:您在「保留靜態內部 IP 位址」一節中複製的保留 IP 位址

向負載平衡器傳送 HTTP 要求

負載平衡服務已開始執行,接著請從內部用戶端 VM 將要求傳送至負載平衡器的轉送規則。

  1. 取得負載平衡器轉送規則的 IP 位址,該規則位於 us-east1 區域。

     gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
         --region=us-east1 \
         --project=SERVICE_PROJECT_ID
    

    複製傳回的 IP 位址,做為 FORWARDING_RULE_IP_ADDRESS

  2. us-east1 區域中建立用戶端 VM。

    gcloud compute instances create client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=lb-network \
        --subnet=subnet-us \
        --zone=us-east1-c \
        --tags=allow-ssh
    
  3. 建立與用戶端 VM 的 SSH 連線。

    gcloud compute ssh client-a --zone=us-east1-c
    
  4. 在本範例中, regional internal Application Load Balancer 在虛擬私有雲網路的 us-east1 區域中,具有前端虛擬 IP 位址 (VIP)。使用 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 位址。

設定具備跨專案設定的負載平衡器

本頁面的上一個範例說明如何設定共用虛擬私有雲部署作業,其中所有負載平衡器元件及其後端都會在服務專案中建立。

區域內部應用程式負載平衡器也支援設定共用虛擬私有雲部署作業,讓一個主專案或服務專案中的網址對應,參照共用虛擬私有雲環境中多個服務專案的後端儲存空間。

您可以參考本節中的步驟,設定下列任一支援的組合:

  • 主機專案中的轉送規則、目標 Proxy 和網址對應,以及一個服務專案中的後端 bucket
  • 服務專案中的轉送規則、目標 Proxy 和網址對應,以及另一個服務專案中的後端 bucket

本節將以後者為例,說明如何設定。

設定總覽

這個範例會設定負載平衡器,其前端和後端位於兩個不同的服務專案。

如果您尚未完成所有必要步驟,請先完成這些步驟,設定共用虛擬私有雲,並設定本範例所需的網路、子網路和防火牆規則。如需操作說明,請參閱本頁的下列各節:

圖 2:負載平衡器的前端和後端位於不同的服務專案
圖 2. 負載平衡器的前端和後端位於不同的服務專案

在服務專案 B 中設定 Cloud Storage bucket 和後端 bucket

本節中的所有步驟都必須在服務專案 B 中執行

如要建立後端 bucket,請完成下列步驟:

  1. 建立 Cloud Storage bucket。
  2. 將內容複製到 bucket。
  3. 將 bucket 設為可公開讀取。
  4. 建立後端 bucket,並指向 Cloud Storage bucket。

建立 Cloud Storage 值區

在本範例中,請在 us-east1 區域建立 Cloud Storage bucket。

控制台

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 按一下「建立」

  3. 在「開始使用」部分,輸入符合命名規範的全域不重複名稱。

  4. 按一下「Choose where to store your data」(選取資料的儲存位置)

  5. 將「Location type」(位置類型) 設為「Region」(區域)

  6. 從區域清單中選取「us-east1」

  7. 點選「建立」

  8. 按一下「Buckets」(值區),返回「Cloud Storage Buckets」(Cloud Storage 值區) 頁面。 按照上述操作說明,在 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 gs://BUCKET2_NAME \
      --default-storage-class=standard \
      --location=us-east1 \
      --uniform-bucket-level-access \
      --project=SERVICE_PROJECT_B_ID

更改下列內容:

  • BUCKET1_NAME:第一個 Cloud Storage bucket 的名稱
  • BUCKET2_NAME:第二個 Cloud Storage bucket 的名稱
  • SERVICE_PROJECT_B_ID:指派給服務專案 B 的 Google Cloud 專案 ID

將圖片檔案複製到 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/

將 Cloud Storage 值區設為可公開讀取

如要將 bucket 中的所有物件設為可供公開網路中的所有使用者讀取,請授予主體 allUsers Storage 物件檢視者角色 (roles/storage.objectViewer)。

控制台

如要向所有使用者授予 bucket 中物件的檢視權限,請為每個 bucket 重複執行下列程序:

  1. 前往 Google Cloud 控制台的「Cloud Storage bucket」頁面。

    前往「Buckets」(值區) 頁面

  2. 在值區清單中,找出要設為公開的每個值區,然後勾選對應的核取方塊。

  3. 按一下「權限」按鈕。 系統會隨即顯示「Permissions」對話方塊。

  4. 在「Permissions」(權限) 對話方塊中,按一下「Add principal」(新增主體) 按鈕 。系統會顯示「授予存取權」對話方塊。

  5. 在「New principals」(新增主體) 欄位中輸入 allUsers

  6. 在「選取角色」欄位中,在篩選方塊中輸入 Storage Object Viewer,然後從篩選結果中選取「Storage 物件檢視者」

  7. 按一下 [儲存]

  8. 按一下「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

設定具備後端值區的負載平衡器

如要建立後端 bucket,請按照下列步驟操作:

  1. 使用 gcloud beta compute backend-buckets create 指令,在 us-east1 區域中建立兩個後端 bucket。後端值區的負載平衡架構為 INTERNAL_MANAGED

      gcloud beta compute backend-buckets create backend-bucket-cats \
          --gcs-bucket-name=BUCKET1_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1 \
          --project=SERVICE_PROJECT_B_ID
    
      gcloud beta compute backend-buckets create backend-bucket-dogs \
          --gcs-bucket-name=BUCKET2_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1
          --project=SERVICE_PROJECT_B_ID
    

在服務專案 A 中設定負載平衡器前端元件

本節中的所有步驟都必須在服務專案 A 中執行

在服務專案 A 中,建立下列前端負載平衡元件:

  1. 設定附加至目標 Proxy 的 SSL 憑證資源。 詳情請參閱本文的「設定 SSL 憑證資源」一節。
  2. 為負載平衡器的轉送規則建立並預留靜態內部 IP 位址。詳情請參閱本文的「預留靜態內部 IP 位址 」一節。
  3. 建立網址對應,將傳入要求轉送至服務專案 B 中的後端 bucket (使用 gcloud beta compute url-maps create 指令)。

      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
  4. 使用 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
    
  5. 使用 gcloud compute target-http-proxies create 指令建立目標 Proxy

    HTTP

    如果是 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 代理伺服器的名稱。

    HTTPS

    如果是 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
    

    更改下列內容:

  6. 使用 gcloud compute forwarding-rules create 指令,在 us-east1 區域中建立含有 IP 位址的轉送規則。

    HTTP 轉送規則可選擇是否預留 IP 位址,但 HTTPS 轉送規則必須預留 IP 位址。

    在本範例中,臨時 IP 位址會與負載平衡器的 HTTP 轉送規則建立關聯。只要轉送規則存在,臨時 IP 位址就會保持不變。如果您需要刪除轉送規則再重新建立,該規則可能會獲得新的 IP 位址。

    HTTP

    如果是 HTTP 流量,請建立區域轉送規則,將傳入要求轉送至 HTTP 目標 Proxy:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --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:轉送規則的名稱
    • RESERVED_IP_ADDRESS:保留的 IP 位址

    HTTPS

    如果是 HTTPS 流量,請建立區域轉送規則,將傳入要求轉送至 HTTPS 目標 Proxy:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --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:轉送規則的名稱
    • RESERVED_IP_ADDRESS:保留的 IP 位址

授予 Compute 負載平衡器管理員使用後端儲存空間的權限

如要讓負載平衡器參照其他服務專案中的後端值區,負載平衡器管理員必須具備 compute.backendBuckets.use 權限。如要授予這項權限,可以使用名為「Compute 負載平衡器服務使用者」的預先定義 IAM 角色 (roles/compute.loadBalancerServiceUser)。這項角色必須由服務專案管理員授予,且可套用至服務專案層級或個別後端值區層級。

在本例中,服務專案 B 的服務專案管理員必須執行下列其中一個指令,將 compute.backendBuckets.use 權限授予服務專案 A 的負載平衡器管理員。您可以在專案層級 (適用於專案中的所有後端 bucket),或針對每個後端 bucket 執行這項操作。

控制台

專案層級權限

請按照下列步驟,授予專案中所有後端 bucket 的權限。

您必須具備 compute.regionBackendBuckets.setIamPolicyresourcemanager.projects.setIamPolicy 權限,才能完成這個步驟。

  1. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。

    前往「IAM」(身分與存取權管理) 頁面

  2. 選取專案。

  3. 按一下 「授予存取權」

  4. 在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。

  5. 在「指派角色」部分,按一下「新增角色」

  6. 在「Select roles」(選取角色) 對話方塊的「Search for roles」(搜尋角色) 欄位中,輸入 Compute Load Balancer Services User

  7. 勾選「Compute Load Balancer Services User」核取方塊。

  8. 按一下「套用」

  9. 選用:為角色新增條件

  10. 按一下 [儲存]

個別後端 bucket 的資源層級權限

請按照下列步驟,授予專案中個別後端 bucket 的權限。

您必須具備 compute.regionBackendBuckets.setIamPolicy 權限,才能完成這個步驟。

  1. 前往 Google Cloud 控制台的「Backends」(後端) 頁面。

    前往「後端」

  2. 從後端清單中,選取要授予存取權的後端值區,然後按一下「權限」

  3. 按一下「新增主體」

  4. 在「New principals」(新增主體) 欄位中,輸入主體的電子郵件地址或其他 ID。

  5. 在「Select a role」(選取角色) 清單中,選取「Compute Load Balancer Services User」(Compute Load Balancer 服務使用者)

  6. 按一下 [儲存]

gcloud

專案層級權限

請按照下列步驟,授予專案中所有後端 bucket 的權限。

您必須具備 compute.regionBackendBuckets.setIamPolicyresourcemanager.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 Cloud
  • LOAD_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 Cloud
  • LOAD_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 要求傳送至負載平衡器

負載平衡服務已開始執行,接著請從內部用戶端 VM 將要求傳送至負載平衡器的轉送規則。

  1. 取得負載平衡器轉送規則的 IP 位址,該規則位於 us-east1 區域。

     gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
         --region=us-east1 \
         --project=SERVICE_PROJECT_A_ID
    

    複製傳回的 IP 位址,做為 FORWARDING_RULE_IP_ADDRESS

  2. us-east1 區域中建立用戶端 VM。

    gcloud compute instances create client-a \
        --image-family=debian-12 \
        --image-project=debian-cloud \
        --network=lb-network \
        --subnet=subnet-us \
        --zone=us-east1-c \
        --tags=allow-ssh
    
  3. 建立與用戶端 VM 的 SSH 連線。

    gcloud compute ssh client-a --zone=us-east1-c
    
  4. 在本例中, regional internal Application Load Balancer 在虛擬私有雲網路的 us-east1 區域中,具有前端 VIP。使用 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 位址。

後續步驟