佈建 Shared VPC

Shared VPC 可讓您將主專案中虛擬私有雲 (VPC) 網路的子網路,匯出至同一個機構中的其他服務專案。服務專案中的執行個體可以透過主專案的共用子網路建立網路連線。本頁說明如何設定及使用 Shared VPC,包括貴機構必須完成的管理準備工作。

Shared VPC 支援匯出任何堆疊類型的子網路。

如要瞭解如何分離服務專案或完全移除 Shared VPC 設定,請參閱「取消佈建 Shared VPC」。

在 API 和指令列介面中,Shared VPC 也稱為「XPN」。

配額、限制和符合資格的資源

開始前,請務必熟悉Shared VPC和 IAM,具體來說:

執行貴機構準備作業

準備機構時,請注意下列資訊。

管理員和身分與存取權管理

準備機構、設定 Shared VPC 主機專案,以及使用 Shared VPC 網路時,至少需要三種不同的管理 Identity and Access Management (IAM) 角色。如要進一步瞭解各個角色,以及選用角色,請參閱 Shared VPC 總覽的「管理員和 IAM」一節。

組織政策限制

組織政策限制可在專案、資料夾或組織層級保護 Shared VPC 資源。以下各節說明各項政策。

避免主專案遭到誤刪

主專案遭到誤刪時,會導致其中附加的所有服務專案中斷。專案設定為 Shared VPC 主專案後,系統會對其套用稱為「防刪除鎖定」的特殊鎖定。只要有防刪除鎖定,專案就不會意外遭到刪除。如果主專案不再設定為 Shared VPC,系統就會自動移除防刪除鎖定。

具備 orgpolicy.policyAdmin 角色的使用者可以定義機構層級的政策限制 (constraints/compute.restrictXpnProjectLienRemoval),將防刪除鎖定的移除權限限制為僅限下列角色:

  • 機構層級的 roles/owner 或 roles/resourcemanager.lienModifier 使用者
  • 在機構層級具備自訂角色,且角色包含 resourcemanager.projects.get 和 resourcemanager.projects.updateLiens 權限的使用者

這樣一來,如果專案擁有者沒有機構層級的 roles/owner 角色或機構層級的 resourcemanager.lienModifier 角色,就無法誤刪 Shared VPC 主專案。如要進一步瞭解與 resourcemanager.lienModifier 角色相關聯的權限,請參閱 Resource Manager 說明文件中的「對專案設定防刪除鎖定」。

由於組織政策會套用至組織中的所有專案,因此您只需按照下列步驟操作一次,即可限制移除防刪除鎖定。

  1. 以機構管理員或具備 orgpolicy.policyAdmin 角色的 IAM 主體身分,向 gcloud 進行驗證。將 ORG_ADMIN 替換為機構管理員的名稱:

    gcloud auth login ORG_ADMIN
    
  2. 查看這項指令的輸出內容,找出貴機構的組織 ID 號碼。

    gcloud organizations list
    
  3. 執行這項指令,為貴機構強制執行 compute.restrictXpnProjectLienRemoval 政策。將 ORG_ID 替換為您在上一個步驟中判斷的數字。

    gcloud resource-manager org-policies enable-enforce \
        --organization ORG_ID compute.restrictXpnProjectLienRemoval
    
  4. 如果您已完成機構管理員的工作,請登出 gcloud,確保帳戶安全。

    gcloud auth revoke ORG_ADMIN
    

限制附加的主專案

根據預設,Shared VPC 管理員可將非主專案連接至同一個機構中的任何主專案。組織政策管理員可以限制非主機專案或資料夾/機構中的非主機專案,可附加的主機專案集。詳情請參閱 constraints/compute.restrictSharedVpcHostProjects 限制條件。

限制服務專案可用的主專案子網路

根據預設,設定共用虛擬私有雲後,服務專案中的 IAM 主體只要具備適當的 IAM 權限,就能使用主專案中的任何子網路。除了管理個別使用者權限,機構政策管理員也可以設定政策,定義特定專案或資料夾/機構中的專案可存取的子網路集。詳情請參閱「constraints/compute.restrictSharedVpcSubnetworks 限制」。

防止主專案意外關閉

如果共用虛擬私有雲網路的帳單已中斷,所有相依資源 (包括服務專案) 都會完全關閉。為避免因計費功能未啟用或遭停用,導致共用虛擬私有雲意外關閉,請確保主專案與計費帳戶之間的連結安全無虞。

提名 Shared VPC 管理員

機構管理員可以將「Shared VPC 管理員」和「專案 IAM 管理員」角色授予一或多個 IAM 主體。

「專案 IAM 管理員」角色會授予 Shared VPC 管理員權限,可共用所有現有和未來的子網路,而不只是個別子網路。這項授權會在組織或資料夾層級建立繫結,而非專案層級。因此 IAM 主體必須在機構中定義,而不只是在其中的專案中定義。

控制台

在機構層級授予共用虛擬私有雲管理員角色

  1. 以機構管理員身分登入 Google Cloud 控制台,然後前往 IAM 頁面。

    前往 IAM 頁面

  2. 從專案選單中選取您的機構。

    如果選取專案,「角色」選單會顯示不正確的項目。

  3. 按一下「新增」。

  4. 輸入「New principals」(新增主體) 的電子郵件地址。

  5. 在「角色」選單中,依序選取「Compute Engine」>「Compute Shared VPC Admin」。

  6. 按一下 [Add another role] (新增其他角色)。

  7. 在「角色」下拉式選單中,依序選取「Resource Manager」 >「Project IAM Admin」。

  8. 按一下 [儲存]。

在資料夾層級授予 Shared VPC 管理員角色

  1. 以機構管理員身分登入 Google Cloud 控制台,然後前往 IAM 頁面。

    前往 IAM 頁面

  2. 從專案選單中選取您的資料夾。

    如果選取專案或機構,系統會顯示不正確的選項。

  3. 按一下「新增」。

  4. 輸入「New principals」(新增主體) 的電子郵件地址。

  5. 在「選取角色」下方,選取 「Compute Engine」> Compute Shared VPC Admin」(Compute Shared VPC 管理員)。

  6. 按一下 [Add another role] (新增其他角色)。

  7. 在「角色」選單中,依序選取「Resource Manager」>「Project IAM Admin」。

  8. 按一下 [Add another role] (新增其他角色)。

  9. 在「角色」選單中,依序選取 「Resource Manager」> 「Compute Network Viewer」。

  10. 按一下 [儲存]。

gcloud

  1. 以機構管理員身分驗證 gcloud。將 ORG_ADMIN 替換為機構管理員的名稱:

    gcloud auth login ORG_ADMIN
    
  2. 查看這項指令的輸出內容,找出組織 ID 號碼。

    gcloud organizations list
    
  3. 如要在機構層級指派 Shared VPC 管理員角色,請按照下列步驟操作:

    1. 將 Shared VPC 管理員角色套用至現有 IAM 主體。將 ORG_ID 替換為上一個步驟中的組織 ID 號碼,並將 EMAIL_ADDRESS 替換為要授予共用 VPC 管理員角色的使用者電子郵件地址。

      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/compute.xpnAdmin"
      
      gcloud organizations add-iam-policy-binding ORG_ID \
        --member='user:EMAIL_ADDRESS' \
        --role="roles/resourcemanager.projectIamAdmin"
      
  4. 如要在資料夾層級指派 Shared VPC 管理員角色,請按照下列步驟操作:

    1. 查看這個指令的輸出,判定資料夾 ID。

      gcloud resource-manager folders list --organization=ORG_ID
      
    2. 將 Shared VPC 管理員角色套用至現有 IAM 主體。將 ORG_ID 替換成上一個步驟中的機構 ID 號碼,並將 EMAIL_ADDRESS 替換成要授予 Shared VPC 管理員角色的使用者電子郵件地址。

      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.xpnAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/resourcemanager.projectIamAdmin"
      
      gcloud resource-manager folders add-iam-policy-binding FOLDER_ID \
         --member='user:EMAIL_ADDRESS' \
         --role="roles/compute.networkViewer"
      
  5. 完成工作後,請在 gcloud 指令列工具中撤銷機構管理員帳戶權杖,以保護帳戶。

    gcloud auth revoke ORG_ADMIN
    

API

  • 如要在機構層級指派 Shared VPC 管理員角色,請按照下列步驟操作:

    1. 找出組織 ID 號碼。

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. 說明現有機構政策的詳細資料,然後記錄下來。

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:getIamPolicy
      

      將 ORG_ID 替換為貴機構的 ID。

    3. 指派 Shared VPC 管理員角色。

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/ORG_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      更改下列內容:

      • ORG_ID:包含要授予 Shared VPC 管理員角色的使用者所屬機構的 ID。
      • EMAIL_ADDRESS:使用者的電子郵件地址。
      • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這個欄位可防止發生衝突。

      詳情請參閱 organizations.setIamPolicy 方法。

  • 如要在資料夾層級指派 Shared VPC 管理員角色,請使用下列要求:

    1. 找出組織 ID 號碼。

      POST https://cloudresourcemanager.googleapis.com/v1/organizations
      
    2. 找出資料夾 ID。

      GET https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/ORG_ID
      

      將 ORG_ID 替換為貴機構的 ID。

    3. 說明並記錄現有資料夾政策的詳細資料。

      POST https://cloudresourcemanager.googleapis.com/v2/folders/FOLDER_ID:getIamPolicy
      

      將 FOLDER_ID 替換為資料夾 ID。

    4. 指派 Shared VPC 管理員角色。

      POST https://cloudresourcemanager.googleapis.com/v1/organizations/FOLDER_ID:setIamPolicy
      {
        "bindings": [
          ...copy existing bindings
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.xpnAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/resourcemanager.projectIamAdmin"
          },
          {
            "members": [
              "user:EMAIL_ADDRESS"
            ],
            "role": "roles/compute.networkViewer"
          }
        ],
        "etag": "ETAG",
        "version": 1,
        ...other existing policy details
      }
      

      更改下列內容:

      • FOLDER_ID:包含要授予 Shared VPC 管理員角色的使用者所屬機構的 ID。
      • EMAIL_ADDRESS:使用者的電子郵件地址。
      • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這項機制可避免發生衝突。

      詳情請參閱 folders.setIamPolicy 方法。

設定 Shared VPC

這個部分的所有工作都必須由 Shared VPC 管理員執行。

啟用主專案

在組織中,Shared VPC 管理員可以按照下列程序,將專案指定為 Shared VPC 主專案,但須遵守配額和限制。如果共用 VPC 管理員具備機構的專案建立者角色和專案刪除者角色 (roles/resourcemanager.projectCreator 和 roles/resourcemanager.projectDeleter),也可以建立及刪除專案。

啟用主專案後,專案的網路資源不會自動與服務專案共用。您需要將服務專案附加至主專案,才能與服務專案共用所選網路和子網路。

控制台

如果您尚未擁有 Compute Shared VPC 管理員角色 (roles/compute.xpnAdmin),就無法在 Google Cloud 控制台中查看這個頁面。

  1. 前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。

    前往 Shared VPC

  2. 以 Shared VPC 管理員身分登入。

  3. 從專案挑選器中,選取要啟用為 Shared VPC 主專案的專案。

  4. 按一下 [Set up Shared VPC] (設定共用虛擬私人雲端)。

  5. 在下一個頁面中,按一下 [Enable host project] (啟用主專案) 下方的 [Save & continue] (儲存並繼續)。

  6. 在「選取子網路」 之下,執行下列其中一項操作:

    1. 如果您需要將主專案虛擬私人雲端網路中目前和日後的所有子網路,與後續步驟中指定的服務專案和服務專案管理員共用,請按一下 [Share all subnets (project-level permissions)] (共用所有子網路 (專案層級權限))。
    2. 如果您需要將主專案虛擬私人雲端網路中的部分子網路與服務專案和服務專案管理員共用,請按一下 [Individual subnets (subnet-level permissions)] (個別子網路 (子網路層級權限)),然後選取「要共用的子網路」。
  7. 按一下 [Continue] (繼續)。
    系統會顯示下一個畫面。

  8. 在「專案名稱」中,指定要附加至主專案的服務專案。請注意,附加服務專案時不會定義任何服務專案管理員;這會在下一步中進行。

  9. 在「Select users by role」(依角色選取使用者) 部分,新增服務專案管理員。 系統會對這些使用者授予共用子網路的 IAM 角色「compute.networkUser」。只有服務專案管理員可以在 Shared VPC 主專案的子網路中建立資源。

  10. 按一下 [儲存]。

gcloud

  1. 以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 為需要成為主專案的專案啟用 Shared VPC。將 HOST_PROJECT_ID 替換為專案 ID。

    gcloud compute shared-vpc enable HOST_PROJECT_ID
    
  3. 請確認該專案列為貴機構的主專案,將 ORG_ID 替換為您的機構 ID (由 gcloud organizations list 決定)。

    gcloud compute shared-vpc organizations list-host-projects ORG_ID
    
  4. 如果只需要啟用主專案,您可以登出 gcloud,保護 Shared VPC 管理員帳戶憑證。否則請略過這個步驟,繼續執行附加服務專案的步驟。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 使用具備共用虛擬私有雲管理員權限的憑證,為專案啟用共用虛擬私有雲。

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnHost
    

    將 HOST_PROJECT_ID 替換為將做為 Shared VPC 主專案的專案 ID。

    詳情請參閱 projects.enableXpnHost 方法。

  2. 確認專案是否列為主專案。

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/listXpnHosts
    

    將 HOST_PROJECT_ID 替換為 Shared VPC 主專案的 ID。

    詳情請參閱 projects.listXpnHosts 方法。

Terraform

您可以使用 Terraform 資源啟用主專案。

resource "google_compute_shared_vpc_host_project" "host" {
  project = var.project # Replace this with your host project ID in quotes
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

附加服務專案

服務專案必須先附加至主專案,服務專案管理員才能使用 Shared VPC。Shared VPC 管理員必須執行下列步驟,才能完成連結。

一個服務專案只能附加到一個主專案,但一個主專案可支援附加多個服務專案。如需詳細資料,請參閱虛擬私有雲配額頁面上的「Shared VPC 專屬限制」。

控制台

  1. 以 Shared VPC 管理員身分登入 Google Cloud 控制台。
  2. 前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。
    前往「Shared VPC」頁面
  3. 按一下「Attached projects」(附加的專案) 分頁。
  4. 在「Attached projects」(附加的專案) 分頁之下,按一下 [Attach projects] (附加專案) 按鈕。
  5. 在「Project names」(專案名稱) 部分中,勾選要附加的服務專案對應的核取方塊。請注意,附加服務專案時不會定義任何服務專案管理員;這會在下一步中進行。
  6. 在「VPC network permissions」(虛擬私有雲網路權限) 部分,選取主體將取得 compute.networkUser 角色的角色。根據虛擬私有雲網路共用模式,系統會為整個主專案或主專案中的特定子網路,授予 IAM 主體「網路使用者」角色。這些主體在各自的服務專案中稱為「服務專案管理員」。
  7. 在「虛擬私有雲網路共用模式」部分,選取下列其中一個選項:
    1. 如果您需要將主專案虛擬私人雲端網路中目前和日後的所有子網路,與所有服務專案和服務專案管理員共用,請按一下 [Share all subnets (project-level permissions)] (共用所有子網路 (專案層級權限))。
    2. 如果您需要將主專案虛擬私人雲端網路中的特定子網路,與服務專案和服務專案管理員共用,請按一下 [Individual subnets (subnet-level permissions)] (個別子網路 (子網路層級權限)),然後選取「要共用的子網路」。
  8. 按一下 [儲存]。

gcloud

  1. 如果尚未驗證,請以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 將服務專案附加至先前已啟用的主專案。將 SERVICE_PROJECT_ID 替換為服務專案的專案 ID,並將 HOST_PROJECT_ID 替換為主專案的專案 ID。

    gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
        --host-project HOST_PROJECT_ID
    
  3. 確認服務專案已附加成功。

    gcloud compute shared-vpc get-host-project SERVICE_PROJECT_ID
    
  4. 您也可以選擇列出附加到主專案的服務專案:

    gcloud compute shared-vpc list-associated-resources HOST_PROJECT_ID
    
  5. 如果只需要附加服務專案,可以登出gcloud,保護 Shared VPC 管理員帳戶憑證。否則,請略過這個步驟,並為所有子網路或僅為部分子網路定義服務專案管理員。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 將服務專案附加至 Shared VPC 主專案。

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/enableXpnResource
    {
      "xpnResource": {
        "id": "SERVICE_PROJECT"
      }
    }
    

    更改下列內容:

    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • SERVICE_PROJECT:要附加的服務專案 ID。

    詳情請參閱 projects.enableXpnResource 方法。

  2. 確認服務專案已附加至主專案。

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/getXpnResources
    

    更改下列內容:

    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。

    詳情請參閱 projects.getXpnResources 方法。

Terraform

您可以使用 Terraform 資源附加服務專案。

resource "google_compute_shared_vpc_service_project" "service1" {
  host_project    = google_compute_shared_vpc_host_project.host.project
  service_project = var.service_project # Replace this with your service project ID in quotes
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

所有子網路的服務專案管理員

Shared VPC 管理員可以指派服務專案中的 IAM 主體做為服務專案管理員,並授予主專案中所有子網路的存取權。這類服務專案管理員會獲得compute.networkUser角色,適用於整個主專案。也就是說,他們可以存取主專案中所有已定義和日後的子網路。

如果使用者在主專案中具有 compute.networkUser 角色,就能查看附加服務專案中的所有子網路。

控制台

如要使用Google Cloud 控制台,將服務專案中的 IAM 主體定義為服務專案管理員,並授予主專案中所有子網路的存取權,請參閱「附加服務專案」一節。

gcloud

這些步驟說明如何將服務專案中的 IAM 主體定義為服務專案管理員,並授予主專案中所有子網路的存取權。執行這些步驟前,請先啟用主專案,並將服務專案附加至主專案。

  1. 如果尚未驗證,請以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 建立政策繫結,將服務專案中的 IAM 主體設為服務專案管理員。將 HOST_PROJECT_ID 替換為主機專案的專案 ID,並將 SERVICE_PROJECT_ADMIN 替換為服務專案管理員使用者的電子郵件地址。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
    --member "user:SERVICE_PROJECT_ADMIN" \
    --role "roles/compute.networkUser"
    

    您可以變更 --member 引數的格式,指定不同類型的主體:

    • 使用 group: 將 Google 群組 (依電子郵件地址) 指定為主體。
    • 使用 domain: 將 Google 網域指定為主體。
    • 使用 serviceAccount: 指定服務帳戶。 如要進一步瞭解這項用途,請參閱「以服務專案管理員身分使用服務帳戶」。
  3. 重複進行先前的步驟,分別定義其他每一個服務專案管理員。

  4. 定義服務專案管理員後,您可以登出 gcloud,保護 Shared VPC 管理員帳戶憑證。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 說明並記錄現有專案政策的詳細資料。 您需要現有政策和 etag 值。

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    將 HOST_PROJECT_ID 替換為 Shared VPC 主機專案的 ID。

  2. 建立政策繫結,將服務專案中的 IAM 主體指定為服務專案管理員。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    更改下列內容:

    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的主機專案 ID。
    • PRINCIPAL:與角色相關聯的身分,例如使用者、群組、網域或服務帳戶。詳情請參閱 Resource Manager 說明文件中的「members」欄位。
    • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這項機制可避免發生衝突。

    詳情請參閱 projects.setIamPolicy 方法。

部分子網路的服務專案管理員

Shared VPC 管理員可以指派服務專案中的 IAM 主體為服務專案管理員,僅能存取主專案中的部分子網路。這個選項提供更精細的方式來定義服務專案管理員,方法是只授予主專案中部分子網路的 compute.networkUser 角色。

如果使用者在主專案中具有 compute.networkUser 角色,就能查看附加服務專案中的所有子網路。

控制台

如要使用Google Cloud 控制台,將服務專案中的 IAM 主體定義為服務專案管理員,並限制只能存取主專案中的部分子網路,請參閱「附加服務專案」一節。

gcloud

這些步驟說明如何將服務專案中的 IAM 主體定義為服務專案管理員,並限制他們只能存取主專案中的部分子網路。如要定義這些規則,請先啟用主專案,並將服務專案附加至主專案。

  1. 如果尚未驗證,請以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 選擇主專案中服務專案管理員有權存取的子網路,以 JSON 格式取得目前的 IAM 政策。將 SUBNET_NAME 替換為主專案中的子網路名稱,並將 HOST_PROJECT_ID 替換為主專案的專案 ID。

    gcloud compute networks subnets get-iam-policy SUBNET_NAME \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID \
        --format json
    
  3. 複製上一步的 JSON 格式輸入內容,並儲存為檔案。為求教學清楚,這些步驟會將其儲存至名為 subnet-policy.json 的檔案。

  4. 修改 subnet-policy.json 檔案,加入將成為服務專案管理員的 IAM 主體,並授予子網路存取權。將每個 SERVICE_PROJECT_ADMIN 替換為服務專案中 IAM 使用者的電子郵件地址。

    {
      "bindings": [
      {
         "members": [
               "user:[SERVICE_PROJECT_ADMIN]",
               "user:[SERVICE_PROJECT_ADMIN]"
            ],
            "role": "roles/compute.networkUser"
      }
      ],
      "etag": "[ETAG_STRING]"
    }
    

    請注意,您可以在政策中指定不同類型的 IAM 主體 (使用者除外):

    • 將 user: 換成 group:,即可指定 Google 群組 (透過電子郵件地址) 做為主體。
    • 切換 user: 與 domain:,將 Google 網域指定為主體。
    • 使用 serviceAccount: 指定服務帳戶。 如要進一步瞭解這項用途,請參閱「服務帳戶做為服務專案管理員」。
  5. 使用 subnet-policy.json 檔案的內容,更新子網路的政策繫結。

    gcloud compute networks subnets set-iam-policy SUBNET_NAME subnet-policy.json \
        --region SUBNET_REGION \
        --project HOST_PROJECT_ID
    
  6. 定義服務專案管理員後,您可以登出 gcloud,保護 Shared VPC 管理員帳戶憑證。

    gcloud auth revoke SHARED_VPC_ADMIN
    

API

  1. 說明現有子網路政策的詳細資料,然後記錄這些資料。 您需要現有政策和 etag 值。

    GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/getIamPolicy
    

    更改下列內容:

    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的主機專案 ID。
    • SUBNET_NAME:要共用的子網路名稱。
    • SUBNET_REGION:子網路所在的區域。
  2. 更新子網路政策,授予服務專案管理員主專案中子網路的存取權。

    POST https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME/setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            PRINCIPAL,
            ...additional principals
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    更改下列內容:

    • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這項機制可避免發生衝突。
    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的主機專案 ID。
    • PRINCIPAL:與角色相關聯的身分,例如使用者、群組、網域或服務帳戶。詳情請參閱 Resource Manager 說明文件中的「members」欄位。
    • SUBNET_NAME:要共用的子網路名稱。
    • SUBNET_REGION:子網路所在的區域。

    詳情請參閱 subnetworks.setIamPolicy 方法。

將服務帳戶設為服務專案管理員

共用虛擬私有雲管理員也可以將服務專案中的服務帳戶定義為服務專案管理員。本節說明如何將兩種不同類型的服務帳戶定義為服務專案管理員:

您可以授予服務專案管理員角色 (compute.networkUser),存取主專案的所有子網路或部分子網路。不過,為了簡化說明,本節只會示範如何將這兩種服務帳戶類型定義為「主專案」所有子網路的服務專案管理員。

將使用者管理服務帳戶設為服務專案管理員

以下說明如何將使用者管理的服務帳戶定義為 Shared VPC 主機專案所有子網路的服務專案管理員。

控制台

  1. 以 Shared VPC 管理員身分登入 Google Cloud 控制台。
  2. 前往 Google Cloud 控制台的「設定」頁面。
    前往「設定」頁面
  3. 將專案變更為含有服務帳戶的服務專案,該服務帳戶需要定義為服務專案管理員。
  4. 複製服務專案的專案 ID。為求教學清楚,本程序將服務專案 ID 稱為 SERVICE_PROJECT_ID。
  5. 將專案變更為 Shared VPC 主專案。
  6. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
    前往「IAM」頁面
  7. 按一下「新增」。
  8. 在「主體」欄位中新增 SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com,並將 SERVICE_ACCOUNT_NAME 替換為服務帳戶名稱。
  9. 在 [Roles] (角色) 選單中選取 [Compute Engine] > [Compute Network User] (Compute Network 使用者)。
  10. 按一下「新增」。

gcloud

  1. 如果尚未驗證,請以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 如果您不知道服務專案的專案 ID,可以列出機構中的所有專案。這份清單會顯示每個專案的 ID。

    gcloud projects list
    
  3. 建立政策繫結,將服務帳戶設為服務專案管理員。將 HOST_PROJECT_ID 替換為主專案的專案 ID,SERVICE_ACCOUNT_NAME 替換為服務帳戶名稱,並將 SERVICE_PROJECT_ID 替換為服務專案 ID。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. 說明並記錄現有專案政策的詳細資料。 您需要現有政策和 etag 值。

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    將 HOST_PROJECT_ID 替換為 Shared VPC 主專案的 ID。

  2. 建立政策繫結,將服務帳戶指定為服務專案管理員。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_PROJECT_ID.iam.gserviceaccount.com",
            ...include additional service accounts
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    更改下列內容:

    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的主機專案 ID。
    • SERVICE_ACCOUNT_NAME:服務帳戶名稱。
    • SERVICE_PROJECT_ID:包含服務帳戶的服務專案 ID。
    • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這項機制可避免發生衝突。

    詳情請參閱 projects.setIamPolicy 方法。

將 Google API 服務帳戶設為服務專案管理員

這些操作說明介紹如何將 Google API 服務帳戶定義為 Shared VPC 主專案所有子網路的服務專案管理員。使用 Shared VPC 時,必須將 Google API 服務帳戶設為服務專案管理員,才能使用代管執行個體群組,因為執行個體建立等工作是由這類服務帳戶執行。如要進一步瞭解這項關係,請參閱「代管執行個體群組和 IAM」。

控制台

  1. 以 Shared VPC 管理員身分登入 Google Cloud 控制台。
  2. 前往 Google Cloud 控制台的「設定」頁面。
    前往「設定」頁面
  3. 將專案變更為含有服務帳戶的服務專案,該服務帳戶需要定義為服務專案管理員。
  4. 複製服務專案的專案編號。為方便說明,本程序將服務專案編號稱為 SERVICE_PROJECT_NUMBER。
  5. 將專案變更為 Shared VPC 主專案。
  6. 前往 Google Cloud 控制台的「IAM」(身分與存取權管理) 頁面。
    前往「IAM」頁面
  7. 按一下「新增」。
  8. 在「成員」欄位中新增 SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com。
  9. 在 [Roles] (角色) 選單中選取 [Compute Engine] > [Compute Network User] (Compute Network 使用者)。
  10. 按一下「新增」。

gcloud

  1. 如果尚未驗證,請以 Shared VPC 管理員身分向 gcloud 進行驗證。將 SHARED_VPC_ADMIN 替換為共用 VPC 管理員的名稱:

    gcloud auth login SHARED_VPC_ADMIN
    
  2. 判定服務專案的「專案編號」。為求清楚,本程序將服務專案編號稱為 SERVICE_PROJECT_NUMBER。將 SERVICE_PROJECT_ID 替換為服務專案的專案 ID。

    gcloud projects describe SERVICE_PROJECT_ID --format='get(projectNumber)'
    
    • 如果您不知道服務專案的專案 ID,可以列出貴機構的所有專案。這份清單會顯示每個專案的專案編號。

      gcloud projects list
      
  3. 建立政策繫結,將服務帳戶設為服務專案管理員。將 HOST_PROJECT_ID 替換為主機專案的專案 ID,並將 SERVICE_PROJECT_NUMBER 替換為服務專案編號。

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
        --member "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com" \
        --role "roles/compute.networkUser"
    

API

  1. 說明並記錄現有專案政策的詳細資料。 您需要現有政策和 etag 值。

    POST https://cloudresourcemanager.googleapis.com/v2/projects/HOST_PROJECT_ID:getIamPolicy
    

    將 HOST_PROJECT_ID 替換為 Shared VPC 主專案的 ID。

  2. 列出專案,找出專案編號。

    GET https://cloudresourcemanager.googleapis.com/v1/projects?filter=projectId="SERVICE_PROJECT_ID"
    

    將 SERVICE_PROJECT_ID 替換為服務帳戶所在的服務專案 ID。

  3. 建立政策繫結,將服務帳戶指定為服務專案管理員。

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:setIamPolicy
    {
      "bindings": [
        ...copy existing bindings
        {
          "members": [
            "serviceAccount:SERVICE_PROJECT_NUMBER@cloudservices.gserviceaccount.com"
          ],
          "role": "roles/compute.networkUser"
        },
      ],
      "etag": "ETAG",
      "version": 1,
      ...other existing policy details
    }
    

    更改下列內容:

    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的主機專案 ID。
    • SERVICE_PROJECT_NUMBER:服務專案的編號,其中包含服務帳戶。
    • ETAG:您在說明現有政策時取得的專屬 ID。如果同時傳送多個更新要求,這項機制可避免發生衝突。

    詳情請參閱 projects.setIamPolicy 方法。

使用 Shared VPC

Shared VPC 管理員完成啟用主專案、將必要服務專案附加至主專案,以及為所有或部分主專案子網路定義服務專案管理員等工作後,服務專案管理員就能在服務專案中,使用主專案的子網路建立執行個體、範本和內部負載平衡器。

本節所述的所有工作都必須由服務專案管理員執行。

請注意,共用 VPC 管理員只會將Compute 網路使用者角色 (roles/compute.networkUser) 授予服務專案管理員,且可選擇授予整個主專案或只有部分子網路。服務專案管理員也應具備管理各自服務專案的其他必要角色。舉例來說,服務專案管理員也可以是專案擁有者,或至少具備專案的Compute 執行個體管理員角色 (roles/compute.instanceAdmin)。

列出可用的子網路

服務專案管理員可以列出自己已獲權使用的子網路,操作步驟如下。

控制台

前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。

前往 Shared VPC

gcloud

  1. 如果您尚未驗證,請以服務專案管理員身分向 gcloud 進行驗證。將 SERVICE_PROJECT_ADMIN 替換為服務專案管理員的名稱:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. 執行下列指令,並將 HOST_PROJECT_ID 替換為 Shared VPC 主專案的專案 ID:

    gcloud compute networks subnets list-usable --project HOST_PROJECT_ID
    

    下列範例會列出主專案 project-1 中的可用子網路:

    $ gcloud compute networks subnets list-usable --project project-1
    
    PROJECT    REGION       NETWORK  SUBNET    RANGE          SECONDARY_RANGES
    project-1  us-west1     net-1    subnet-1  10.138.0.0/20
    project-1  us-central1  net-1    subnet-2  10.128.0.0/20  r-1 192.168.2.0/24
                                                              r-2 192.168.3.0/24
    project-1  us-east1     net-1    subnet-3  10.142.0.0/20
    

詳情請參閱 SDK 說明文件中的 list-usable 指令。

API

列出主專案中的可用子網路。以服務專案管理員身分提出要求。

GET https://compute.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/aggregated/subnetworks/listUsable

將 HOST_PROJECT_ID 替換為 Shared VPC 主專案的 ID。

詳情請參閱 subnetworks.listUsable 方法。

保留靜態內部 IPv4 或 IPv6 位址

服務專案管理員可以在共用 VPC 網路的子網路中,保留內部 IPv4 或 IPv6 位址。IP 位址設定物件會在服務專案中建立,而其值來自所選共用子網路中可用的 IPv4 位址範圍。

如要在服務專案中預留獨立內部 IP 位址,請完成下列步驟。

控制台

  1. 設定 Shared VPC。
  2. 前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。

    前往 Shared VPC

  3. 以 Shared VPC 管理員身分登入。

  4. 從專案挑選器選取服務專案。

  5. 依序選取「VPC network」(虛擬私有雲網路) > IP addresses」(IP 位址),前往「IP addresses」(IP 位址) 頁面。

  6. 按一下「保留內部」。

  7. 在「Name」(名稱) 欄位中輸入 IP 位址名稱。

  8. 在「IP version」(IP 版本) 清單中,選取所需的 IP 版本:

    • 如要預留靜態內部 IPv4 位址,請選取「IPv4」IPv4。
    • 如要預留靜態內部 IPv6 位址,請選取「IPv6」IPv6。
  9. 按一下「與我共用的網路」按鈕。

  10. 在「網路」和「子網路」清單中,分別選取虛擬私有雲網路和子網路。

  11. 指定 IP 位址的預留方式:

    • 如要預留 IPv4 位址,請在「靜態 IP 位址」部分,選擇下列其中一個選項:
      • 選取「自動分配」,自動分配 IPv4 位址。
      • 選取「讓我選擇」即可選擇特定地址。在「自訂 IP 位址」欄位中輸入位址。
    • 如要預留 IPv6 位址,請在「靜態 IPv6 範圍」中選擇下列其中一個選項:
      • 選取「自動分配 (/96)」,即可自動分配 IPv6 位址。
      • 選取「讓我選擇」即可選擇特定地址。在「自訂 IPv6 位址」欄位中輸入位址。
  12. 選用:如要在不同前端共用靜態內部 IPv4 位址,請在「用途」部分選擇「共用」。預設選取「非共用」。

  13. 點選「保留」。

gcloud

  1. 如果尚未驗證,請以服務專案管理員身分驗證 Google Cloud CLI。將 SERVICE_PROJECT_ADMIN 替換為服務專案管理員的名稱:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. 使用 compute addresses create 指令。

    • 保留 IPv4 位址:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV4
      
    • 預留 IPv6 位址:

      gcloud compute addresses create IP_ADDR_NAME \
          --project SERVICE_PROJECT_ID \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
          --region=REGION
          --ip-version=IPV6
      

    更改下列內容:

    • IP_ADDR_NAME:IPv4 位址物件的名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。

如要進一步瞭解如何建立 IP 位址,請參閱 SDK 說明文件。

API

請使用 addresses.insert 方法。

  • 以服務專案管理員身分預留靜態內部 IPv4 位址:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
    {
    "name": "ADDRESS_NAME",
    "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
    "addressType": "INTERNAL"
    }
    

更改下列內容:

  • ADDRESS_NAME:保留的內部 IP 位址名稱。
  • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
  • REGION:保留的 IPv4 位址所在區域,也是共用子網路所在的區域。
  • SERVICE_PROJECT_ID:您要保留 IPv4 位址的服務專案 ID。
  • SUBNET_NAME:共用子網路的名稱。

詳情請參閱 addresses.insert 方法。

Terraform

您可以使用 Terraform 資料區塊指定主機子網路資訊。 然後使用 Terraform 資源預留靜態內部 IPv4 位址。如果省略選用的 address 引數,系統會選取並保留可用的 IPv4 位址。

指定主機子網路:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

從主專案的子網路預留 IPv4 位址,以在服務專案中使用:

resource "google_compute_address" "internal" {
  project      = var.service_project
  region       = "us-central1"
  name         = "int-ip"
  address_type = "INTERNAL"
  address      = "10.0.0.8"
  subnetwork   = data.google_compute_subnetwork.subnet.self_link
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

保留靜態外部 IPv4 位址

服務專案中的資源可以使用服務專案或主專案中定義的區域性靜態外部 IPv4 位址。因此,附加服務專案中的資源可以使用主專案中預留的區域性靜態外部 IPv4 位址。

保留靜態外部 IPv6 位址

服務專案管理員可以在服務專案中預留靜態外部 IPv6 位址。IPv6 位址設定物件會在服務專案中建立,而其值來自所選共用子網路中可用的 IPv6 位址範圍。

控制台

您可以使用Google Cloud 控制台,在服務專案中預留獨立的外部 IPv6 位址:

  1. 設定 Shared VPC。
  2. 前往 Google Cloud 控制台的「Shared VPC」頁面。
    前往「共用虛擬私有雲」頁面
  3. 以 Shared VPC 管理員身分登入。
  4. 從專案挑選器選取服務專案。
  5. 如要前往「IP addresses」(IP 位址) 頁面,請依序選取「VPC network」(虛擬私有雲網路) >「IP addresses」(IP 位址)。
  6. 按一下「保留外部」。
  7. 選擇新位址的名稱。
  8. 指定網路服務層級為「進階」或「標準」。
  9. 在「IP version」(IP 版本) 下方,選取「IPv6」。
  10. 如要為全域負載平衡器預留全域 IPv6 位址,請選擇「全域」,然後點選「預留」。
  11. 如要為執行個體或區域負載平衡器預留區域 IPv6 位址,請按一下「區域」,然後執行下列操作:

    1. 選取要建立地址的區域。
    2. 選取「與我共用的網路」。
    3. 選取要預留 IP 位址的虛擬私有雲網路和子網路。
    4. 在「靜態 IPv6 範圍」部分,選取下列其中一個選項:
      • 選取「自動分配」,系統就會自動分配 IPv6 位址。
      • 選取「讓我選擇」即可選擇特定地址。在「自訂 IPv6 位址」欄位中輸入位址。
    5. 在「端點類型」部分,選取「VM 執行個體」或「外部直通式網路負載平衡器」。

      選用:如果您選取「VM 執行個體」,可以選取要附加 IPv6 位址的 VM 執行個體。

    6. 點選「保留」。

gcloud

  1. 如果您尚未驗證,請以服務專案管理員身分向 gcloud 進行驗證。將 SERVICE_PROJECT_ADMIN 替換為服務專案管理員的名稱:

    gcloud auth login SERVICE_PROJECT_ADMIN
    
  2. 使用 gcloud compute addresses create 指令:

    gcloud compute addresses create IP_ADDR_NAME \
        --project SERVICE_PROJECT_ID \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --region=REGION \
        --ip-version=IPV6 \
        --endpoint-type=[VM | NETLB]
    

    更改下列內容:

    • IP_ADDR_NAME:IPv6 位址物件的名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • SUBNET:共用子網路的名稱。
    • REGION:包含共用子網路的區域。

API

如要以服務專案管理員身分預留靜態內部 IPv6 位址,請使用 addresses.insert 方法:

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/addresses
{
  "name": "ADDRESS_NAME",
  "ipVersion": "IPV6",
  "ipv6EndpointType": "VM|LB",
  "networkTier": "IPV6_NETWORK_TIER",
  "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
  "addressType": "EXTERNAL"
}

更改下列內容:

  • SERVICE_PROJECT_ID:您要保留 IPv6 位址的服務專案 ID。
  • REGION:保留的 IPv6 位址和共用子網路所在的區域。
  • ADDRESS_NAME:保留的靜態外部 IPv6 位址名稱。
  • IPV6_NETWORK_TIER:子網路的網路服務層級。可以是 STANDARD (「預覽」) 或 PREMIUM。
  • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
  • SUBNET_NAME:共用子網路的名稱。

建立執行個體

使用 Shared VPC 建立執行個體時,請注意下列事項:

  • 在建立執行個體的標準過程中,您必須選取區域、網路和子網路。所選子網路和可用區必須位於相同區域。服務專案管理員使用 Shared VPC 虛擬私有雲網路的子網路建立執行個體時,所選執行個體的可用區必須與所選子網路位於相同區域。

    使用保留的靜態內部 IPv4 位址建立執行個體時,系統建立靜態 IPv4 位址時已選取子網路和區域。本節提供 gcloud 範例,說明如何建立具有靜態內部 IPv4 位址的執行個體。

  • 服務專案管理員只能使用已獲授權的子網路建立執行個體。如要判斷可用的子網路,請參閱「列出可用的子網路」。

  • 當 Google Cloud 收到在 Shared VPC 虛擬私有雲網路的子網路中建立執行個體的要求時,會檢查發出要求的 IAM 主體是否具備使用該共用子網路的權限。如果檢查失敗,系統不會建立執行個體,且 Google Cloud會傳回權限錯誤。如需協助,請與 Shared VPC 管理員聯絡。

  • 您建立的執行個體堆疊類型,必須支援您建立執行個體的共用子網路。詳情請參閱「子網路類型」。對於具有 IPv6 位址的執行個體,子網路的 IPv6 存取權類型會決定指派給執行個體的 IPv6 位址是內部或外部 IPv6 位址。

控制台

  1. 設定 Shared VPC。
  2. 前往 Google Cloud 控制台的「Shared VPC」(共用虛擬私有雲) 頁面。

    前往 Shared VPC

  3. 以 Shared VPC 管理員身分登入。

  4. 從專案挑選器選取服務專案。

  5. 如要前往「建立執行個體」頁面,請依序選取 「Compute Engine」>「VM 執行個體」> 「建立執行個體」。

  6. 指定執行個體的 [名稱]。

  7. 在「區域」中,選取包含共用子網路的區域。

  8. 點選「進階選項」下方的「網路」。

  9. 在「網路介面」下方,點選「與我共用的網路」圓形按鈕。

  10. 在「共用子網路」清單中,選取要建立執行個體的必要子網路:

    • 如果是僅限 IPv4 的執行個體,請選取僅限 IPv4 或雙重堆疊 (IPv4 和 IPv6) 子網路。
    • 如果是雙協定執行個體,請選取具有必要 IPv6 存取權類型的雙協定子網路。
    • 如果是僅限 IPv6 的執行個體,請選取雙協定子網路或僅限 IPv6 的子網路,並指定所需的 IPv6 存取權類型。
  11. 選取 IP 堆疊類型:

    • IPv4 (單一堆疊)
    • IPv4 和 IPv6 (雙重堆疊)
    • IPv6 (單一堆疊)
  12. 指定該執行個體所需的其他必要參數。

  13. 點選「建立」。

gcloud

請參閱以下例子:

  • 在 Shared VPC 網路的共用子網路中,建立具有暫時性內部 IPv4 位址的執行個體:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --zone ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • ZONE:指定區域中的可用區。
  • 在 Shared VPC 虛擬私有雲網路中,使用預留的靜態內部 IPv4 位址建立執行個體:

    1. 在服務專案中,從主專案的可用位址範圍保留靜態內部 IPv4 位址。
    2. 建立執行個體:

      gcloud compute instances create INSTANCE_NAME \
          --project SERVICE_PROJECT_ID \
          --private-network-ip IP_ADDR_NAME \
          --zone ZONE \
          --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
      

      更改下列內容:

      • INSTANCE_NAME:執行個體的名稱。
      • SERVICE_PROJECT_ID:服務專案的 ID。
      • IP_ADDR_NAME:靜態 IP 位址的名稱。
      • ZONE:與 IP_ADDR_NAME 位於相同區域的可用區。
      • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
      • REGION:包含共用子網路的區域。
      • SUBNET:與靜態內部 IPv4 位址相關聯的共用子網路名稱。
  • 建立具有暫時性內部 IPv4 位址和暫時性 IPv6 位址的執行個體:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --zone ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • ZONE:指定區域中的可用區。
  • 使用保留的靜態外部 IPv6 位址建立執行個體:

    gcloud compute instances create INSTANCE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type STACK_TYPE \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
        --ipv6-address IPV6_ADDRESS \
        --external-ipv6-prefix-length=96 \
        --ipv6-network-tier IPV6_NETWORK_TIER \
        --zone ZONE
    

    更改下列內容:

    • INSTANCE_NAME:執行個體的名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • STACK_TYPE:IPV4_IPV6 或 IPV6_ONLY,視您是否要讓執行個體也擁有 IPv4 位址而定。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • IPV6_ADDRESS:要指派給 VM 的 IPv6 位址。
    • IPV6_NETWORK_TIER:子網路的網路服務層級。可以是 STANDARD (「預覽」) 或 PREMIUM。
    • ZONE:指定區域中的可用區。

API

請參閱以下例子:

  • 如要建立具有暫時性內部 IPv4 位址的執行個體,請只指定子網路:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • ZONE:指定區域中的可用區。
    • MACHINE_TYPE:執行個體的機型。
    • INSTANCE_NAME:執行個體的名稱。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • SOURCE_IMAGE:執行個體的映像檔。

    詳情請參閱 instances.insert 方法。

  • 如要使用預留的內部 IPv4 位址建立執行個體,請指定子網路和預留 IPv4 位址的名稱:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "networkIP": "projects/SERVICE_PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • ZONE:指定區域中的可用區。
    • MACHINE_TYPE:執行個體的機型。
    • INSTANCE_NAME:執行個體的名稱。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET_NAME:共用子網路的名稱。
    • ADDRESS_NAME:保留的內部 IPv4 位址名稱。
    • SOURCE_IMAGE:執行個體的映像檔。

    詳情請參閱 instances.insert 方法。

  • 如要建立具有暫時性內部 IPv4 位址和暫時性 IPv6 位址的執行個體,請指定子網路和堆疊類型:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV4_IPV6"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • ZONE:指定區域中的可用區。
    • MACHINE_TYPE:執行個體的機型。
    • INSTANCE_NAME:執行個體的名稱。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • SOURCE_IMAGE:執行個體的映像檔。

    詳情請參閱 instances.insert 方法。

  • 如要建立具有暫時 IPv6 位址的執行個體,請指定子網路和堆疊類型:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/zones/ZONE/instances
    {
      "machineType": "MACHINE_TYPE",
      "name": "INSTANCE_NAME",
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV6_ONLY"
        }
      ],
      "disks": [
        {
          "boot": true,
          "initializeParams": {
            "sourceImage": "SOURCE_IMAGE"
          }
        }
      ]
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • ZONE:指定區域中的可用區。
    • MACHINE_TYPE:執行個體的機型。
    • INSTANCE_NAME:執行個體的名稱。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET:共用子網路的名稱。
    • SOURCE_IMAGE:執行個體的映像檔。

    詳情請參閱 instances.insert 方法。

Terraform

您可以使用 Terraform 資料區塊指定主機子網路資訊。然後使用 Terraform 資源在服務專案中建立 VM 執行個體。

指定主機子網路:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

在服務專案中建立 VM 執行個體,並使用主專案共用子網路的暫時性 IPv4 位址:

resource "google_compute_instance" "ephemeral_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "my-vm"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

在服務專案中建立 VM 執行個體,並使用主專案共用子網路的保留靜態 IPv4 位址:

resource "google_compute_instance" "reserved_ip" {
  project      = var.service_project
  zone         = "us-central1-a"
  name         = "reserved-ip-instance"
  machine_type = "e2-medium"
  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-9"
    }
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
    network_ip = google_compute_address.internal.address
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

建立執行個體範本

使用 Shared VPC 建立執行個體範本時,請注意下列事項:

  • 在建立執行個體範本的過程中,您必須選取網路和子網路。

    • 為自訂模式共用虛擬私有雲網路建立的範本必須同時指定網路和子網路。

    • 為自動模式共用虛擬私有雲網路建立的範本,可以選擇延後選取子網路。在這些情況下,系統會自動選取與使用範本的任何代管執行個體群組位於相同區域的子網路。(根據定義,自動模式網路在每個區域都有子網路)。

  • IAM 主體建立執行個體範本時,Google Cloud 不會執行權限檢查,確認主體是否可以使用指定的子網路。如果要求使用範本的代管執行個體群組,系統一律會延後進行這項權限檢查。

  • 您建立的執行個體範本堆疊類型,必須支援您建立執行個體範本的共用子網路。詳情請參閱「子網路類型」。對於具有 IPv6 位址的執行個體,子網路的 IPv6 存取權類型會決定指派給執行個體的 IPv6 位址是內部或外部 IPv6 位址。

控制台

  1. 設定 Shared VPC。
  2. 前往 Google Cloud 控制台的「Shared VPC」頁面。
    前往「Shared VPC」頁面
  3. 以 Shared VPC 管理員身分登入。
  4. 從專案挑選器選取服務專案。
  5. 如要前往「建立執行個體範本」頁面,請依序選取「Compute Engine」>「執行個體範本」>「建立執行個體範本」。
  6. 指定執行個體範本的 [名稱]。
  7. 在「Advanced options」(進階選項) 部分,按一下「Networking」(網路)。
  8. 在「網路介面」部分,按一下「與我共用的網路」單選按鈕。
  9. 在「Shared subnetwork」(共用子網路) 清單中,選取要建立執行個體範本的子網路:
    • 如果是僅限 IPv4 的執行個體範本,請選取僅限 IPv4 或雙重堆疊 (IPv4 和 IPv6) 子網路。
    • 如果是雙協定執行個體範本,請選取具有必要 IPv6 存取權類型的雙協定子網路。
    • 如果是僅限 IPv6 的執行個體範本,請選取雙協定子網路或僅限 IPv6 的子網路,並使用必要的 IPv6 存取權類型。
  10. 選取執行個體範本的「IP 堆疊類型」:
    • IPv4 (單一堆疊)
    • IPv4 和 IPv6 (雙重堆疊)
    • IPv6 (單一堆疊)
  11. 指定該執行個體範本所需的其他必要參數。
  12. 點選「建立」。

gcloud

  • 建立僅限 IPv4 的執行個體範本,用於自動模式共用虛擬私有雲網路中自動建立的任何子網路:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --network projects/HOST_PROJECT_ID/global/networks/NETWORK
    

    更改下列內容:

    • TEMPLATE_NAME:範本名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • NETWORK:Shared VPC 網路的名稱。
  • 如要為共用虛擬私有雲網路 (自動或自訂模式) 中手動建立的子網路建立僅限 IPv4 的執行個體範本,請按照下列步驟操作:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --region REGION \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    更改下列內容:

    • TEMPLATE_NAME:範本名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • REGION:包含共用子網路的區域。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • SUBNET:共用子網路的名稱。
  • 建立雙重堆疊執行個體範本,使用自訂模式共用虛擬私有雲網路中的子網路:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV4_IPV6 \
        --region REGION \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    更改下列內容:

    • TEMPLATE_NAME:範本名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • REGION:包含共用子網路的區域。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • SUBNET:共用子網路的名稱。
  • 建立僅限 IPv6 的執行個體範本,使用自訂模式共用虛擬私有雲網路中的子網路:

    gcloud compute instance-templates create TEMPLATE_NAME \
        --project SERVICE_PROJECT_ID \
        --stack-type IPV6_ONLY \
        --region REGION \
        --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET
    

    更改下列內容:

    • TEMPLATE_NAME:範本名稱。
    • SERVICE_PROJECT_ID:服務專案的 ID。
    • REGION:包含共用子網路的區域。
    • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
    • SUBNET:共用子網路的名稱。

API

  • 如要建立僅限 IPv4 的執行個體範本,並使用自動模式 Shared VPC 網路的任何自動建立子網路,請指定虛擬私有雲網路:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "network": "projects/HOST_PROJECT_ID/global/networks/NETWORK"
        }
      ]
    ...
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的專案 ID。
    • NETWORK:Shared VPC 網路的名稱。

    詳情請參閱 instanceTemplates.insert 方法。

  • 如要建立僅限 IPv4 的執行個體範本,並在共用虛擬私有雲網路 (自動或自訂模式) 中使用手動建立的子網路,請指定子網路:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"
        }
      ]
    ...
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的專案 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET_NAME:共用子網路的名稱。

    詳情請參閱 instanceTemplates.insert 方法。

  • 如要建立雙重堆疊執行個體範本,並使用自訂模式共用虛擬私有雲網路中的子網路,請指定子網路和堆疊類型:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV4_IPV6"
        }
      ]
    ...
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的專案 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET_NAME:共用子網路的名稱。

    詳情請參閱 instanceTemplates.insert 方法。

  • 如要建立僅限 IPv6 的執行個體範本,並使用自訂模式共用虛擬私有雲網路中的子網路,請指定子網路和堆疊類型:

    POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/global/instanceTemplates
    {
    "properties": {
      "networkInterfaces": [
        {
          "subnetwork": "projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
          "stackType": "IPV6_ONLY"
        }
      ]
    ...
    }
    

    更改下列內容:

    • SERVICE_PROJECT_ID:服務專案的 ID。
    • HOST_PROJECT_ID:包含 Shared VPC 虛擬私有雲網路的專案 ID。
    • REGION:包含共用子網路的區域。
    • SUBNET_NAME:共用子網路的名稱。

    詳情請參閱 instanceTemplates.insert 方法。

Terraform

您可以使用 Terraform 資料區塊指定主機子網路資訊。然後使用 Terraform 資源建立 VM 執行個體範本。VM 的 IPv4 位址來自主專案的共用子網路。

子網路必須與要建立 VM 執行個體的區域相同。

指定主機子網路:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

在服務專案中建立 VM 執行個體範本:

resource "google_compute_instance_template" "default" {
  project      = var.service_project
  name         = "appserver-template"
  description  = "This template is used to create app server instances."
  machine_type = "n1-standard-1"
  disk {
    source_image = "debian-cloud/debian-9"
  }
  network_interface {
    subnetwork = data.google_compute_subnetwork.subnet.self_link
  }
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

建立代管執行個體群組

使用 Shared VPC 建立代管執行個體群組時,請注意下列事項:

  • 搭配 Shared VPC 使用的代管執行個體群組需要將 Google API 服務帳戶設為服務專案管理員,因為使用自動調度功能自動建立執行個體等工作,都是由該服務帳戶執行。

  • 建立代管執行個體群組的標準程序,是根據群組類型選取可用區或區域,以及執行個體範本。(網路和子網路詳細資料與執行個體範本相關聯。)符合資格的執行個體範本僅限於參照代管執行個體群組所用相同區域中的子網路。

  • 服務專案管理員只能建立代管執行個體群組,其中的執行個體需使用已取得權限的子網路。網路和子網路詳細資訊會根據執行個體範本而定,因此服務專案管理員使用的範本只能參照已獲權使用的子網路。

  • 當 Google Cloud 收到建立代管執行個體群組的要求時,會檢查提出要求的 IAM 主體是否具備使用執行個體範本中指定子網路的權限 (與群組位於相同區域)。如果檢查失敗,系統不會建立代管執行個體群組,且 Google Cloud 會傳回錯誤:Required 'compute.subnetworks.use' permission for 'projects/SUBNET_NAME。

    列出可用的子網路,判斷可使用的子網路,並在服務帳戶需要額外存取權時,聯絡 Shared VPC 管理員。詳情請參閱「將服務帳戶設為服務專案管理員」。

詳情請參閱 Compute Engine 說明文件中的「建立代管執行個體群組」。

建立 HTTPS 負載平衡器

在 Shared VPC 虛擬私有雲網路中,設定外部應用程式負載平衡器的方法有很多種。無論部署類型為何,負載平衡器的所有元件都必須位於同一個機構和同一個共用虛擬私有雲網路。

如要進一步瞭解支援的 Shared VPC 架構,請參閱下列文章:

建立內部直通式網路負載平衡器

以下範例說明在共用虛擬私有雲網路中建立內部直通式網路負載平衡器時,必須考量的事項。服務專案管理員可以建立內部直通式網路負載平衡器,並使用他們有權存取的子網路 (位於主專案中)。負載平衡器的內部轉送規則是在服務專案中定義,但其子網路參照指向主專案共用虛擬私有雲網路中的子網路。

在 Shared VPC 環境中建立內部直通式網路負載平衡器之前,請參閱「Shared VPC 架構」。

控制台

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面

  2. 建立內部 TCP/UDP 負載平衡器,並進行下列調整:在「設定前端服務」部分,從「子網路」選單的「其他專案共用的網路」部分,選取所需的 Shared VPC 子網路。

  3. 完成建立負載平衡器。

gcloud

建立內部轉送規則時,請使用 --subnet 旗標,在主機專案中指定子網路:

gcloud compute forwarding-rules create FR_NAME \
    --project SERVICE_PROJECT_ID \
    --load-balancing-scheme internal \
    --region REGION \
    --ip-protocol IP_PROTOCOL \
    --ports PORT,PORT,... \
    --backend-service BACKEND_SERVICE_NAME \
    --subnet projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET \
    --address INTERNAL_IP

更改下列內容:

  • FR_NAME:轉送規則的名稱。
  • SERVICE_PROJECT_ID:服務專案的 ID。
  • REGION:包含共用子網路的區域。
  • IP_PROTOCOL:TCP 或 UDP,與負載平衡器後端服務的通訊協定相符。
  • PORT:負載平衡器的數值通訊埠或通訊埠清單。
  • BACKEND_SERVICE_NAME:後端服務的名稱 (已在建立內部直通式網路負載平衡器的一般程序中建立)。
  • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
  • SUBNET:共用子網路的名稱。
  • INTERNAL_IP:共用子網路中的內部 IP 位址 (如未指定,系統會選取可用的 IP 位址)。

如需更多選項,請參閱 gcloud compute forwarding-rules create 指令。

API

建立內部轉送規則,並在主機專案中指定子網路。

POST https://compute.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/REGION/forwardingRules
{
  "name": "FR_NAME",
  "IPAddress": "IP_ADDRESS",
  "IPProtocol": "IP_PROTOCOL",
  "ports": [ "PORT", ... ],
  "loadBalancingScheme": "INTERNAL",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/regions/REGION/subnetworks/SUBNET",
  "network": "https://www.googleapis.com/compute/v1/projects/HOST_PROJECT_ID/global/networks/NETWORK_NAME",
  "backendService": "https://www.googleapis.com/compute/v1/projects/SERVICE_PROJECT_ID/regions/us-west1/backendServices/BE_NAME",
  "networkTier": "PREMIUM"
}

更改下列內容:

  • SERVICE_PROJECT_ID:服務專案的 ID。
  • REGION:包含共用子網路的區域。
  • FR_NAME:轉送規則的名稱。
  • IP_ADDRESS:共用子網路中的內部 IP 位址。
  • IP_PROTOCOL:TCP 或 UDP,與負載平衡器後端服務的通訊協定相符。
  • PORT:負載平衡器的數字通訊埠或通訊埠清單。
  • HOST_PROJECT_ID:Shared VPC 主專案的 ID。
  • SUBNET:共用子網路的名稱。
  • NETWORK_NAME:網路名稱。
  • BE_NAME:後端服務的名稱 (已在建立內部直通式網路負載平衡器的一般程序中建立)。

詳情請參閱 forwardingRules.insert 方法。

Terraform

您可以使用 Terraform 資料區塊指定主機子網路和主機網路。然後使用 Terraform 資源建立轉送規則。

指定主機網路:

data "google_compute_network" "network" {
  name    = "my-network-123"
  project = var.project
}

指定主機子網路:

data "google_compute_subnetwork" "subnet" {
  name    = "my-subnet-123"
  project = var.project
  region  = "us-central1"
}

在服務專案中,於主專案的網路和子網路中建立轉送規則:

resource "google_compute_forwarding_rule" "default" {
  project               = var.service_project
  name                  = "l4-ilb-forwarding-rule"
  backend_service       = google_compute_region_backend_service.default.id
  region                = "europe-west1"
  ip_protocol           = "TCP"
  load_balancing_scheme = "INTERNAL"
  all_ports             = true
  allow_global_access   = true
  network               = data.google_compute_network.network.self_link
  subnetwork            = data.google_compute_subnetwork.subnet.self_link
}

如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。

後續步驟