预配共享 VPC

您可以使用共享 VPC 将宿主项目 VPC 网络中的子网导出到同一组织中的其他服务项目。这些服务项目中的实例可以在该宿主项目的共享子网中进行网络连接。本页面介绍了如何设置和使用共享 VPC,包括为您的组织进行一些必要的管理准备。

配额、限制和符合条件的资源

在开始之前,请确保您已熟悉共享 VPC 概览IAM 概览。具体而言:

让您的组织做好准备

管理员和 IAM

让您的组织做好准备、设置共享 VPC 宿主项目以及使用共享 VPC 网络至少涉及三个不同的管理型 IAM 角色。要详细了解每个角色以及可选角色的相关信息,请参阅“共享 VPC 概览”的管理员和 IAM 部分。

管理员 用途
组织管理员 组织管理员指定共享 VPC 管理员定义组织级政策,以防止意外删除共享 VPC 宿主项目
共享 VPC 管理员 共享 VPC 管理员启用宿主项目并给宿主项目关联服务项目
服务项目管理员 共享 VPC 管理员可通过向 IAM 成员授予“网络用户”(compute.networkUser) 角色来定义服务项目管理员,以允许其访问整个宿主项目或者仅访问该项目的部分子网。此外,服务项目管理员还对服务项目中所定义的资源拥有所有权和控制权,因此,他们至少必须具有实例管理员 (compute.instanceAdmin) 角色或者成为其项目的项目所有者。

防止意外删除宿主项目

意外删除某个宿主项目会导致关联到其中的所有服务项目中断。如果将某个项目配置为共享 VPC 宿主项目,则系统会为该项目设置一种名为“安全锁”的特殊锁。只要有安全锁,就可防止该项目被意外删除。不再为共享 VPC 配置该宿主项目时,系统会自动从该宿主项目中移除安全锁。

组织管理员或拥有 orgpolicy.policyAdmin 角色的其他用户可指定组织级政策,将可移除安全锁的人员限制为组织所有者和拥有 resourcemanager.lienModifier 角色的其他用户。这样做可有效防止非组织所有者的项目所有者以及没有 resourcemanager.lienModifier 角色的用户意外删除共享 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 beta resource-manager org-policies enable-enforce \
        --organization [ORG_ID] compute.restrictXpnProjectLienRemoval
    
  4. 如果您以组织管理员的身份完成了任务,请退出 gcloud 以保护您的帐号。

    gcloud auth revoke [ORG_ADMIN]
    

指定共享 VPC 管理员

组织管理员可向一个或多个 IAM 成员授予共享 VPC 管理员角色 compute.xpnAdmin。此授权将在组织或文件夹级别(而非项目级别)建立绑定关系。因此,必须在组织中定义 IAM 成员,而不仅仅是在项目中进行定义。

Console

要在组织级别授予共享 VPC 管理员角色,请执行以下操作:

  1. 以组织管理员身份登录 Google Cloud Platform Console,然后转到 IAM 页面。
    转到 IAM 页面
  2. 从项目菜单中选择您的组织。
    如果您选择某个项目,则无法在角色菜单中看到正确的条目。
  3. 点击添加
  4. 输入成员的电子邮件地址。
  5. 角色下拉列表中,依次选择 Compute Engine > Compute Shared VPC Admin

  6. 点击保存

要在文件夹级别授予共享 VPC 管理员角色,请执行以下操作:

  1. 以组织管理员的身份登录 Google Cloud Platform Console,然后转到 IAM 页面。
    转到 IAM 页面
  2. 从项目菜单中选择您的文件夹。
    如果您选择了某个项目或组织,则无法看到正确的选项。
  3. 成员页面上,点击添加
  4. 输入新成员的电子邮件地址。
  5. 选择角色下,依次选择 Compute Engine > Compute Shared VPC Admin
  6. 点击保存

gcloud

  1. 以组织管理员的身份登录 gcloud。将 [ORG_ADMIN] 替换为组织管理员的名称:

    gcloud auth login [ORG_ADMIN]
    
  2. 通过查看此命令的输出结果来确定您的组织 ID 编号。

    gcloud organizations list
    
  3. 如果要在组织级别分配共享 VPC 管理员角色,请执行以下操作:

    1. 向某个现有的 IAM 成员应用共享 VPC 管理员角色。将 [ORG_ID] 替换为您在上一步确定的组织 ID 编号,并将 [EMAIL_ADDRESS] 替换为将被授予共享 VPC 管理员角色的用户的电子邮件地址。

       gcloud organizations add-iam-policy-binding [ORG_ID] 
      --member='user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  4. 如果要在文件夹级别分配共享 VPC 管理员角色,请执行以下操作:

    1. 通过查看此命令的输出结果来确定您的文件夹 ID。

      gcloud beta resource-manager folders list --organization=[ORG_ID]
      
    2. 向某个现有的 IAM 成员应用共享 VPC 管理员角色。将 [ORG_ID] 替换为您在上一步确定的组织 ID 编号,并将 [EMAIL_ADDRESS] 替换为将被授予共享 VPC 管理员角色的用户的电子邮件地址。

       gcloud beta resource-manager folders add-iam-policy-binding [FOLDER_ID] 
      --member=`user:[EMAIL_ADDRESS]'
      --role="roles/compute.xpnAdmin"

  5. 执行完任务后,请在 gcloud 命令行工具中退出您的组织管理员帐号以保护帐户。

    gcloud auth revoke [ORG_ADMIN]
    

设置共享 VPC

本部分中的所有任务都必须由共享 VPC 管理员执行。

启用宿主项目

在组织内,共享 VPC 管理员可以按照下文所述的步骤,将项目指定为共享 VPC 宿主项目(受配额和限制的约束)。此外,如果共享 VPC 管理员具有组织的 resourcemanager.projectCreatorresourcemanager.projectDeleter 角色,那么他们还可以创建和删除项目。

Console

  1. 转到 Google Cloud Platform Console 中的“共享 VPC”页面。
    转到“共享 VPC”页面
  2. 以共享 VPC 管理员的身份登录。
  3. 从项目选择器中选择要作为共享 VPC 宿主项目启用的项目。
  4. 点击设置共享 VPC
  5. 在下一页上,点击启用宿主项目下的保存并继续
  6. 选择子网下,执行以下任一操作:
    1. 如果您需要与后续步骤中指定的服务项目和服务项目管理员共享宿主项目 VPC 网络中当前和未来的所有子网,请点击共享所有子网(项目级权限)
    2. 如果您需要与服务项目和服务项目管理员有选择性地共享宿主项目 VPC 网络中的子网,请点击个别子网(子网级权限),然后选择要共享的子网
  7. 点击继续
    系统会显示下一页。
  8. 项目名称中,指定要关联到宿主项目的服务项目。请注意,关联服务项目时不会定义任何服务项目管理员;这项操作将在下一步中完成。
  9. 按角色选择用户部分中,添加服务项目管理员。系统会为这些用户授予共享子网的 IAM 角色 compute.networkUser。只有服务项目管理员可以在共享 VPC 宿主项目的子网中创建资源。
  10. 点击保存

gcloud

  1. 以共享 VPC 管理员的身份登录 gcloud。将 [SHARED_VPC_ADMIN] 替换为共享 VPC 管理员的名称:

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 为需要成为宿主项目的项目启用共享 VPC。将 [HOST_PROJECT_ID] 替换为相应项目的 ID。

    如有组织级别的共享 VPC 管理员角色,请运行以下命令:

    gcloud compute shared-vpc enable [HOST_PROJECT_ID]
    

    如有文件夹级别的共享 VPC 管理员角色,请运行以下命令:

    gcloud beta 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,以保护您的共享 VPC 管理员帐号凭据。否则,请跳过此步骤,继续执行关联服务项目的步骤。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

关联服务项目

服务项目必须先关联到宿主项目,其服务项目管理员才可以使用共享 VPC。要完成这种关联,共享 VPC 管理员必须执行以下步骤。

一个服务项目只能关联到一个宿主项目,但一个宿主项目可以关联多个服务项目。如需了解详情,请参阅 VPC 配额页面上特定于共享 VPC 的限制。

Console

  1. 以共享 VPC 管理员的身份登录 Google Cloud Platform Console。
  2. 转到 Google Cloud Platform Console 中的“共享 VPC”页面。
    转到“共享 VPC”页面
  3. 点击关联的项目标签。
  4. 关联的项目标签下,点击关联项目按钮。
  5. 项目名称部分中,选中要关联的服务项目所对应的复选框。请注意,关联服务项目时不会定义任何服务项目管理员;这项操作将在下一步中完成。
  6. VPC 网络权限部分中,选择“服务项目管理员”。然后,系统会为所选用户授予共享子网的 IAM 角色 compute.networkUser。只有服务项目管理员可以在共享 VPC 宿主项目的子网中创建资源。
  7. VPC 网络共享模式部分中,执行以下任一步骤:
    1. 点击共享所有子网(项目级权限),以与所有服务项目和服务项目管理员共享宿主项目 VPC 网络中当前和未来的所有子网。
    2. 如果您需要与服务项目和服务项目管理员有选择性地共享宿主项目 VPC 网络中的子网,请点击个别子网(子网级权限),然后选择要共享的子网
  8. 点击保存

gcloud

  1. 以共享 VPC 管理员的身份登录 gcloud(如果您尚未这样做)。将 [SHARED_VPC_ADMIN] 替换为共享 VPC 管理员的名称:

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 将服务项目关联到之前启用的宿主项目。将 [SERVICE_PROJECT_ID] 替换为服务项目的项目 ID,并将 [HOST_PROJECT_ID] 替换为宿主项目的项目 ID。

    如有组织级别的共享 VPC 管理员角色,请运行以下命令:

    gcloud compute shared-vpc associated-projects add [SERVICE_PROJECT_ID] \
        --host-project [HOST_PROJECT_ID]
    

    如有文件夹级别的共享 VPC 管理员角色,请运行以下命令:

    gcloud beta 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,以保护您的共享 VPC 管理员帐号凭据。否则,请跳过此步骤,然后针对所有子网仅针对部分子网定义服务项目管理员。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

有权访问所有子网的服务项目管理员

共享 VPC 管理员可以将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的所有子网。系统会向此类服务项目管理员授予整个宿主项目的 compute.networkUser 角色。这意味着,他们有权访问宿主项目中当前指定的子网和未来的所有子网。

Console

要通过 GCP Console 将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的所有子网,请参阅关联服务项目部分。

gcloud

下面的步骤介绍了如何将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的所有子网。在执行这些步骤之前,您必须先启用宿主项目,并将服务项目关联到该宿主项目

  1. 以共享 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,以保护您的共享 VPC 管理员帐号凭据。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

有权访问部分子网的服务项目管理员

共享 VPC 管理员可以将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的部分子网。借助此选项,共享 VPC 管理员能够以一种更为细致的方式来指定服务项目管理员,即仅向他们授予宿主项目中部分子网的 compute.networkUser 角色。

Console

要通过 GCP Console 将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的部分子网,请参阅关联服务项目部分。

gcloud

下面的步骤介绍了如何将服务项目中的 IAM 成员指定为服务项目管理员,并使其有权访问宿主项目中的部分子网。在定义此类管理员之前,您必须先启用宿主项目,并将服务项目关联到该宿主项目

  1. 以共享 VPC 管理员的身份登录 gcloud(如果您尚未这样做)。将 [SHARED_VPC_ADMIN] 替换为共享 VPC 管理员的名称:

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 在宿主项目中选择服务项目管理员应有权访问的子网。获取该子网当前的 IAM 政策(采用 JSON 格式)。将 [SUBNET_NAME] 替换为宿主项目中相应子网的名称,并将 [HOST_PROJECT_ID] 替换为宿主项目的项目 ID。

    gcloud beta 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 beta compute networks subnets set-iam-policy [SUBNET_NAME] subnet-policy.json \
        --region [SUBNET_REGION] \
        --project [HOST_PROJECT_ID]
    
  6. 在定义服务项目管理员后,您可以退出 gcloud,以保护您的共享 VPC 管理员帐号凭据。

    gcloud auth revoke [SHARED_VPC_ADMIN]
    

服务帐号作为服务项目管理员

共享 VPC 管理员还可以将服务项目中的服务帐号指定为服务项目管理员。本部分介绍了如何将两种不同类型的服务帐号定义为服务项目管理员:

与其他 IAM 成员一样,可以针对宿主项目的所有子网或者仅部分子网授予授予服务项目管理员角色 (compute.networkUser)。不过为了简单起见,本部分仅介绍如何将这两种类型的服务帐号指定为服务项目管理员,并使其有权访问宿主项目的所有子网

用户管理服务帐号作为服务项目管理员

下面的内容说明了如何将用户管理服务帐号指定为服务项目管理员,并使其有权访问共享 VPC 宿主项目的所有子网。

Console

  1. 以共享 VPC 管理员的身份登录 Google Cloud Platform Console。
  2. 转到 Google Cloud Platform Console 中的“设置”页面。
    转到“设置”页面
  3. 将项目更改为需要定义为服务项目管理员的服务帐号所在的服务项目。
  4. 复制服务项目的项目 ID。为简明起见,这些步骤将服务项目 ID 表示为 [SERVICE_PROJECT_ID]
  5. 将项目更改为共享 VPC 宿主项目。
  6. 转到 Google Cloud Platform Console 中的 IAM 页面。
    转到 IAM 页面
  7. 点击添加
  8. [SERVICE_ACCOUNT_NAME]@[SERVICE_PROJECT_ID].iam.gserviceaccount.com 添加到成员字段,并将 [SERVICE_ACCOUNT_NAME] 替换为服务帐号的名称。
  9. 角色菜单中依次选择 Compute Engine > 计算网络用户
  10. 点击添加

gcloud

  1. 以共享 VPC 管理员的身份登录 gcloud(如果您尚未这样做)。将 [SHARED_VPC_ADMIN] 替换为共享 VPC 管理员的名称:

    gcloud auth login [SHARED_VPC_ADMIN]
    
  2. 确定相应服务项目的项目 ID。为简明起见,这些步骤将服务项目 ID 表示为 [SERVICE_PROJECT_ID]。将 [SERVICE_PROJECT_ID] 替换为相应服务项目的项目 ID。

    gcloud projects describe [SERVICE_PROJECT_ID] --format='get(projectId)'
    
    • 如果您不知道该服务项目的项目 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"
    

Google API 服务帐号作为服务项目管理员

下面的内容说明了如何将 Google API 服务帐号指定为服务项目管理员,并使其有权访问共享 VPC 宿主项目的所有子网。要将托管实例组与共享 VPC 结合使用,需要将 Google API 服务帐号设为服务项目管理员,因为创建实例等任务是由此类服务帐号执行的。要详细了解这种关系,请参阅托管实例组和 IAM

Console

  1. 以共享 VPC 管理员的身份登录 Google Cloud Platform Console。
  2. 转到 Google Cloud Platform Console 中的“设置”页面。
    转到“设置”页面
  3. 将项目更改为需要定义为服务项目管理员的服务帐号所在的服务项目。
  4. 复制服务项目的项目编号。为简明起见,这些步骤将服务项目编号表示为 [SERVICE_PROJECT_NUMBER]
  5. 将项目更改为共享 VPC 宿主项目。
  6. 转到 Google Cloud Platform Console 中的 IAM 页面。
    转到 IAM 页面
  7. 点击添加
  8. [SERVICE_PROJECT_NUMBER]@cloudservices.gserviceaccount.com 添加到成员字段。
  9. 角色菜单中依次选择 Compute Engine > 计算网络用户
  10. 点击添加

gcloud

  1. 以共享 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"
    

使用共享 VPC

在共享 VPC 管理员完成以下任务后,服务项目管理员可以使用宿主项目的子网在服务项目中创建实例、模板和内部负载平衡器:启用宿主项目将必要的服务项目关联到宿主项目;以及针对宿主项目的全部部分子网定义服务项目管理员。

本部分中的所有任务都必须由服务项目管理员执行。

请务必注意,共享 VPC 管理员仅授予服务项目管理员 compute.networkUser 角色,使其能够访问整个宿主项目或该项目的部分子网。服务项目管理员还应拥有管理其各自服务项目所必需的其他角色。例如,服务项目管理员可以同时是项目所有者,或者至少应该具有项目的 compute.instanceAdmin 角色

列出可用的子网

服务项目管理员可以按以下步骤列出其获得权限的子网。

Console

转到 Google Cloud Platform Console 中的“共享 VPC”页面。
转到“共享 VPC”页面

gcloud

  1. 以服务项目管理员的身份登录 gcloud(如果您尚未这样做)。将 [SERVICE_PROJECT_ADMIN] 替换为服务项目管理员的名称:

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. 运行以下命令,将 [HOST_PROJECT_ID] 替换为共享 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 命令。

保留静态内部 IP

服务项目管理员可以在共享 VPC 网络的子网中保留内部 IP 地址。请注意,IP 地址配置对象是在服务项目中创建的,而其值在所选共享子网中的可用地址范围内。

gcloud

  1. 以服务项目管理员的身份登录 gcloud(如果您尚未这样做)。将 [SERVICE_PROJECT_ADMIN] 替换为服务项目管理员的名称:

    gcloud auth login [SERVICE_PROJECT_ADMIN]
    
  2. 运行以下命令,将 [HOST_PROJECT_ID] 替换为共享 VPC 宿主项目的项目 ID:

    gcloud compute addresses create [IP_ADDR_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --subnet projects/[HOST_PROJECT_ID]/regions/[REGION]/subnetworks/[SUBNET]
    

其中,您需要替换以下项:

  • [IP_ADDR_NAME] 替换为 IP 地址对象的名称
  • [SERVICE_PROJECT_ID] 替换为服务项目的 ID
  • [HOST_PROJECT_ID] 替换为共享 VPC 宿主项目的 ID
  • [REGION] 替换为包含共享子网的区域
  • [SUBNET] 替换为共享子网的名称

有关创建 IP 地址的其他详情发布在 SDK 文档中。

创建实例

使用共享 VPC 创建实例时,请注意以下事项:

  • 创建实例的标准流程涉及选择地区、网络和子网。所选子网和地区必须位于同一区域。如果服务项目管理员使用共享 VPC 网络中的子网创建实例,那么为该实例选择的地区必须与所选子网位于同一区域。

    • 在创建具有保留的静态内部 IP 地址的实例时,子网(及区域)在该静态 IP 地址创建之时就已选定。本部分提供的 gcloud 示例介绍了如何创建具有静态内部 IP 地址的实例。
  • 服务项目管理员只能使用其有权使用的子网创建实例。要确定可以使用哪些子网,请参阅列出可用的子网

  • GCP 收到在共享 VPC 网络的子网中创建实例的请求时,会检查发出该请求的 IAM 成员是否有权使用该共享子网。如果检查结果为否,则不会创建实例,并且 GCP 会返回权限错误。请联系共享 VPC 管理员以获取帮助。

Console

  1. 转到 Google Cloud Platform Console 中的“虚拟机实例”页面。
    转到“虚拟机实例”页面
  2. 点击创建
  3. 为该实例指定名称
  4. 点击管理、安全、磁盘、网络、单独租用
  5. 点击网络
  6. 点击与我共享的网络单选按钮。
  7. 选择您想要在其中创建实例的共享子网
  8. 为该实例指定任何其他必要参数。
  9. 点击创建

gcloud

  • 要在共享 VPC 网络的共享子网中创建具有临时内部 IP 地址的实例,请运行以下命令:

    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] 替换为共享 VPC 宿主项目的 ID
    • [REGION] 替换为包含共享子网的区域
    • [SUBNET] 替换为共享子网的名称
    • [ZONE] 替换为指定区域中的地区
  • 要在共享 VPC 网络中创建具有保留的静态内部 IP 地址的实例,请执行以下操作:

    1. 在宿主项目中保留静态内部 IP 地址
    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
      • [HOST_PROJECT_ID] 替换为共享 VPC 宿主项目的 ID
      • [IP_ADDR_NAME] 替换为静态 IP 地址的名称
      • [ZONE] 替换为 [IP_ADDR_NAME] 所在区域中的地区
      • [SUBNET] 替换为与静态内部 IP 地址关联的共享子网的名称。

创建实例模板

使用共享 VPC 创建实例模板时,请注意以下事项:

  • 创建实例模板的流程涉及选择网络和子网。

    • 如果要创建在自定义模式共享 VPC 网络中使用的模板,必须同时指定网络和子网。

    • 如果要创建在自动模式共享 VPC 网络中使用的模板,可以选择性地推迟选择子网。在此类情况下,系统会自动在使用该模板的托管实例组所在的区域中选择子网。(根据定义,自动模式网络在每个区域都有一个子网。)

  • 当 IAM 成员创建实例模板时,GCP 不会执行权限检查,即不会检查该成员是否可以使用指定的子网。此权限检查会一直推迟,直到请求了使用该模板的托管实例组为止。

Console

  1. 转到 Google Cloud Platform Console 中的“实例模板”页面。
    转到“实例模板”页面
  2. 点击创建实例模板
  3. 为该实例模板指定名称
  4. 点击管理、安全、磁盘、网络、单独租用
  5. 点击网络
  6. 点击与我共享的网络单选按钮。
  7. 选择您想要在其中创建实例模板的共享子网
  8. 为该实例模板指定任何其他必要参数。
  9. 点击创建

gcloud

  • 要创建实例模板,以用于自动模式共享 VPC 网络中自动创建的任何子网,请运行以下命令:

    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] 替换为共享 VPC 宿主项目的 ID
    • [NETWORK] 替换为共享 VPC 网络的名称
  • 要在自动模式或自定义模式共享 VPC 网络中为手动创建的子网创建实例模板,请运行以下命令:

    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
    • [HOST_PROJECT_ID] 替换为共享 VPC 宿主项目的 ID
    • [REGION] 替换为包含共享子网的区域
    • [SUBNET] 替换为共享子网的名称

创建托管实例组

使用共享 VPC 创建托管实例组时,请注意以下事项:

  • 要将托管实例组与共享 VPC 结合使用,需要将 Google API 服务帐号设为服务项目管理员,因为通过自动调节来自动创建实例等任务是由该服务帐号执行的。

  • 创建托管实例组的标准流程涉及选择地区或区域(具体取决于组类型)以及实例模板。(网络和子网详情取决于实例模板。)符合条件的实例模板仅限于那些引用的子网与托管实例组位于同一区域的模板。

  • 对于服务项目管理员创建的托管实例组,实例组的成员实例只能使用服务项目管理员有权使用的子网。由于网络和子网详情取决于实例模板,因此服务项目管理员只能使用引用了其有权使用的子网的模板。

  • GCP 收到创建托管实例组的请求时,会检查发出该请求的 IAM 成员是否有权使用实例模板中指定的子网(与实例组位于同一区域)。如果检查结果显示为否,则无法创建托管实例组,并且 GCP 会返回权限错误。请列出可用的子网以确定可以使用哪些子网,然后联系共享 VPC 管理员以获取帮助。

Console

  1. 转到 Google Cloud Platform Console 中的“实例组”页面。
    转到“实例组”页面
  2. 点击创建实例组
  3. 为该实例组指定名称
  4. 位置部分中,选择是创建一个地区组还是区域(多地区)组。
  5. 根据需要选择地区区域
  6. 如果是创建地区组,请务必选择组类型下的托管实例组。区域实例组必须是托管实例组。
  7. 实例模板下,选择为共享 VPC 网络定义的实例模板。必须已为子网(该子网与实例组位于同一区域)定义可用模板。
  8. 指定自动调节选项;否则,请指定实例数
  9. 指定自动修复选项。
  10. 点击创建

gcloud

如果服务项目管理员有权使用实例模板中指定的共享子网,则可以使用 gcloud 创建托管实例组:

gcloud compute instance-groups managed create [INSTANCE_GROUP_NAME] \
    --project [SERVICE_PROJECT_ID] \
    --template [INSTANCE_TEMPLATE_NAME] \
    --size [NUMBER_OF_INSTANCES] \
    --zone [ZONE]

其中,您需要替换以下项:

  • [INSTANCE_GROUP_NAME] 替换为实例组的名称
  • [SERVICE_PROJECT_ID] 替换为服务项目的 ID
  • [INSTANCE_TEMPLATE_NAME] 替换为实例模板的名称
  • [NUMBER_OF_INSTANCES] 替换为要在实例组中创建的实例数
  • [ZONE] 替换为子网(在实例模板中定义)所在区域中的地区

要创建区域实例组,请将 --zone 参数替换为 --region 参数,并指定相应区域(必须是实例模板中定义的子网所使用的区域)。

要详细了解如何配置自动调节和自动修复,请参阅 SDK 文档

创建内部负载平衡器

下面的内容介绍了如何创建内部负载平衡器,其转发规则使用共享 VPC 宿主项目中的子网。请注意,转发规则本身仍然在服务项目中指定,并且子网引用仅由内部转发规则使用。

在宿主项目中创建内部负载平衡器之前,您可能需要查看以下内容:

Console

  1. 转到 Google Cloud Platform Console 中的“负载平衡”页面。
    转到“负载平衡”页面

  2. 按照一般流程创建内部负载平衡器,并进行以下调整:

    • 配置前端服务部分中,从子网菜单的由其他项目共享的网络部分中选择您需要的共享 VPC 子网。
  3. 完成内部负载平衡器的创建。

gcloud

服务项目管理员可以在其有权访问的宿主项目的子网中创建内部负载平衡器。按照一般流程创建内部负载平衡器,但在创建转发规则时要使用 --subnet 参数指定共享 VPC 的子网。

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] 替换为要使用的 IP 协议;默认协议为 TCP
  • [PORT] 替换为负载平衡器的数字端口或端口列表
  • [BACKEND_SERVICE_NAME] 替换为后端服务(已在创建内部负载平衡器的一般流程中创建)的名称
  • [HOST_PROJECT_ID] 替换为共享 VPC 宿主项目的 ID
  • [SUBNET] 替换为共享子网的名称
  • [INTERNAL_IP] 替换为共享子网中的内部 IP 地址(如果未指定,系统会选择可用的地址)

如需了解可与 gcloud compute forwarding-rules create 搭配使用的更多选项,请参阅此页面

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页