共享 VPC 概览

通过共享 VPC,组织可以将多个项目中的资源连接到一个公用 VPC 网络,让它们能够通过该网络使用内部 IP 安全高效地相互通信。在使用共享 VPC 时,您将项目指定为宿主项目,并将一个或多个其他服务项目连接到该项目。宿主项目中的 VPC 网络称为共享 VPC 网络。服务项目中的合格资源可以使用共享 VPC 网络中的子网。

通过共享 VPC,组织管理员可以将创建和管理实例等管理职责委托给服务项目管理员,同时保持对子网、路由和防火墙等网络资源的集中控制。此模型允许组织执行以下操作:

  • 为网络管理、审计和访问控制实施最小权限安全最佳做法。共享 VPC 管理员可以将网络管理任务委托给共享 VPC 网络中的网络和安全管理员,而不必允许服务项目管理员做出影响网络的更改。仅需给予服务项目管理员创建和管理使用共享 VPC 网络的实例的能力。如需了解详情,请参阅管理员和 IAM 部分。
  • 在网络级别上为组织中的多个服务项目应用和实施一致的访问控制策略,同时委托管理职责。例如,服务项目管理员可以是其项目中的计算实例管理员,在共享 VPC 宿主项目中创建和删除使用已批准子网的实例。
  • 使用服务项目来分隔预算或内部成本中心。如需了解详情,请参阅结算部分。

概念

组织、文件夹和项目

共享 VPC 可连接同一组织内的多个项目。参与其中的宿主项目和服务项目不能分属于不同的组织。关联的项目可位于同一文件夹内,也可以分别位于不同的文件夹中,但如果它们位于不同的文件夹中,则管理员必须同时拥有这两个文件夹的共享 VPC 管理员权限。如需详细了解组织、文件夹和项目,请参阅 GCP 资源层次结构

参与共享 VPC 的项目可以是宿主项目,也可以是服务项目。

  • 宿主项目包含一个或多个共享 VPC 网络共享 VPC 管理员必须先启用某个项目作为宿主项目。之后,共享 VPC 管理员可以将一个或多个服务项目连接到该项目。

  • 服务项目是由共享 VPC 管理员连接到宿主项目的任何项目。此连接可让其参与共享 VPC。在组织中,不同部门或团队运作和管理多个服务项目这种做法十分常见。

  • 一个项目不能既是宿主项目,又是服务项目。因此,一个服务项目不能成为其他服务项目的宿主项目。

  • 您可以创建和使用多个宿主项目;但是,每个服务项目只能连接到一个宿主项目。如需说明,请参阅多个宿主项目示例

为清楚起见,我们将不参与共享 VPC 的项目称为独立项目。这是为了强调它既不是宿主项目也不是服务项目。

网络

共享 VPC 网络是在宿主项目中定义的 VPC 网络,可用作服务项目中合格资源的集中共享网络。共享 VPC 网络可以采用自动模式或自定义模式,但不支持旧版网络

启用宿主项目后,其所有现有 VPC 网络都会成为共享 VPC 网络,而在其中创建的任何新网络也会自动成为共享 VPC 网络。因此,一个宿主项目可以具有多个共享 VPC 网络。

宿主项目和服务项目在项目级别上进行连接。服务项目管理员可以访问宿主项目中共享 VPC 网络的子网,如下一节管理员和 IAM 中所述。

管理员和 IAM

共享 VPC 利用 Identity and Access Management (IAM) 角色处理委托管理。您可以向用户、Google 群组、Google 网域或 GCP 服务帐号等 IAM 成员授予以下角色。如果您需要联系其中任何一位管理员,可以在您的组织或项目的 IAM 政策中进行查找。如果您没有所需的权限,则必须联系组织内的网络或项目管理员。

必需的管理角色

管理员 目的
组织管理员
• 组织中的 IAM 成员
组织管理员具有组织的 resourcemanager.organizationAdmin 角色。他们可以通过授予适当的项目创建和删除角色以及组织的“Shared VPC Admin”角色来指定共享 VPC 管理员。这些管理员可以定义组织级政策,但是特定的文件夹和项目操作需要额外的文件夹和项目角色。
共享 VPC 管理员
• 组织中的 IAM 成员,或者
• 文件夹中的 IAM 成员(测试版)
共享 VPC 管理员具有组织或者一个或多个文件夹的 Shared VPC Admin (compute.xpnAdmin) 角色。他们可以执行设置共享 VPC 所必需的各种任务,例如启用宿主项目、将服务项目连接到宿主项目,以及将共享 VPC 网络内部分或所有子网的访问权限委托给服务项目管理员。给定宿主项目的共享 VPC 管理员通常也是其项目所有者。
如果为某个用户分配了组织的共享 VPC 管理员角色,则该用户具有该组织内所有文件夹的对应角色。如果为某个用户分配了某个文件夹的这一角色,则该用户具有给定文件夹及其所嵌套的任何文件夹的对应角色。共享 VPC 管理员只能在具有两个不同文件夹的这一角色时才能将这两个文件夹中的项目相关联。
服务项目管理员
• 服务项目中的 IAM 成员,或者
• 组织中的 IAM 成员
共享 VPC 管理员可以通过将整个宿主项目或其共享 VPC 网络的选定子网Network User (compute.networkUser) 角色授予 IAM 成员来定义服务项目管理员。服务项目管理员还对服务项目中定义的资源拥有所有权和控制权,因此他们应该拥有对应服务项目的 Instance Admin (compute.instanceAdmin) 角色。他们可能还拥有服务项目的其他 IAM 角色,如 Project Owner。

服务项目管理员

在定义各服务项目管理员时,共享 VPC 管理员可以授予其使用整个宿主项目或仅使用部分子网的权限:

  • 项目级层权限:如果共享 VPC 管理员将整个宿主项目的 compute.networkUser 角色授予服务项目管理员,则可将服务项目管理员指定为有权使用宿主项目中的所有子网。此时,服务项目管理员拥有使用宿主项目所有 VPC 网络中所有子网的权限,包括将来添加到宿主项目的子网和 VPC 网络。

  • 子网级层权限:如果共享 VPC 管理员将选定子网的 compute.networkUser 角色授予服务项目管理员,则服务项目管理员可被授予一组较为有限的权限,即仅可使用部分子网的权限。仅具有子网级权限的服务项目管理员仅限使用这些子网。将新的共享 VPC 网络或新子网添加到宿主项目后,共享 VPC 管理员应审核 compute.networkUser 角色的权限绑定,以确保所有服务项目管理员的子网级权限均符合预期配置。

网络和安全管理员

共享 VPC 管理员可以完全控制宿主项目中的资源,包括管理共享 VPC 网络。他们可以选择将某些网络管理任务委托给其他 IAM 成员:

管理员 目的
网络管理员
• 宿主项目中的 IAM 成员,或者
• 组织中的 IAM 成员
共享 VPC 管理员可以通过将宿主项目的 Network Admin (compute.networkAdmin) 角色授予 IAM 成员来指定网络管理员。网络管理员可以完全控制除防火墙规则和 SSL 证书之外的所有网络资源。
安全管理员
• 宿主项目中的 IAM 成员,或者
• 组织中的 IAM 成员
共享 VPC 管理员可以通过将宿主项目的 Security Admin (compute.securityAdmin) 角色授予 IAM 成员来指定安全管理员。安全管理员可以管理防火墙规则和 SSL 证书。

规范

配额和限制

共享 VPC 宿主项目受标准的每项目 VPC 配额限制。共享 VPC 网络受限于 VPC 网络的每网络限制每实例限制。此外,宿主项目和服务项目之间的关系受特定于共享 VPC 的限制的约束。

结算

参与共享 VPC 网络的资源的结算要计入资源所在的服务项目,即使该资源在宿主项目中使用共享 VPC 网络也是如此。

  • 对于使用共享 VPC 网络的服务项目内的资源,用于计算结算金额的费率和规则与资源位于宿主项目本身中的情况相同。
  • 由资源生成的出站流量的结算计入资源定义时所在的项目:
    • 一个实例传出的出站流量计入包含该实例的项目。例如,如果在服务项目中创建了一个实例,但使用的是共享 VPC 网络,则其生成的出站流量的任何结算均计入其服务项目。通过这种方式,您就可以使用共享 VPC 将资源整理到组织的成本中心之中。
    • 负载平衡器相关的成本将计入包含负载平衡器组件的项目。如需详细了解负载平衡和共享 VPC,请参阅“负载平衡”部分
    • 到 VPN 的出站流量计入包含 VPN 网关资源的项目。例如,如果在共享 VPC 网络中创建 VPN 网关,则 VPN 网关会包含在宿主项目中。通过 VPN 网关传输的出站流量(无论出站流量由哪个服务项目发起)计入宿主项目。

资源

合格资源

以下服务项目资源可以参与共享 VPC,但受限于某些实际限制

合格资源的实际限制

以下限制适用于有资格参与共享 VPC 情景的资源:

  • 并非强制要求使用共享 VPC 网络。 例如,实例管理员可以在服务项目中创建实例,使用该服务项目中的 VPC 网络。服务项目中定义的网络不可共享。

  • 必须重新创建一些资源才能使用共享 VPC 网络。 在共享 VPC 管理员将现有项目连接到宿主项目时,该项目成为服务项目,但其现有资源不会自动使用共享网络资源。要使用共享 VPC 网络,服务项目管理员必须创建一项合格的资源,并将其配置为使用共享 VPC 网络的子网。例如,一个服务项目中的现有实例无法重新配置为使用共享 VPC 网络,但可以创建新实例,以使用共享 VPC 网络中的可用子网。此限制适用于专用地区。

不合格资源

在服务项目中,App Engine 柔性环境资源不能参与共享 VPC。

IP 地址

如果多个服务项目使用同一共享 VPC 网络连接到一个宿主项目,则这些服务项目中的实例可以使用临时或预留静态内部 IP 地址相互通信,但需要遵守适用的防火墙规则

可以为服务项目内的实例自动分配临时内部 IP 地址。例如,服务项目管理员在创建实例时要选择地区、共享 VPC 网络和可用子网。IP 地址来自所选共享子网中可用的 IP 地址范围。

此外,服务项目管理员可以选择预留静态内部 IP 地址。即使 IP 地址的值来自共享 VPC 网络的选定共享子网中的可用 IP 范围,IP 地址对象本身也必须与使用该对象的实例在同一服务项目中创建。如需了解更多信息,请参阅“预配共享 VPC”页面上的预留静态内部 IP 地址

在宿主项目中定义的外部 IP 地址只能由该项目中的资源使用。它们无法在服务项目中使用。服务项目可以维护自己的一组外部 IP 地址。例如,服务项目中的实例必须使用在同一服务项目中定义的外部 IP 地址。即使实例使用宿主项目来自共享 VPC 网络的内部 IP 地址,情况也是如此。

内部 DNS

同一服务项目中的虚拟机可以使用 GCP 自动创建的内部 DNS 名称相互访问。这些 DNS 名称使用创建虚拟机的服务项目的项目 ID,即使相应名称指向宿主项目中的内部 IP 地址也是如此。如需查看完整的说明,请参阅“内部 DNS”文档中的内部 DNS 名称和共享 VPC

Cloud DNS 专用地区

您可以在共享 VPC 网络中使用 Cloud DNS 专用地区。您必须在宿主项目中创建专用地区,并为共享 VPC 网络授予该地区的访问权限。

负载平衡

共享 VPC 可以与负载平衡结合使用。所有负载平衡组件必须存在于同一个项目中,可以全部位于一个宿主项目中,也可以全部位于一个服务项目中。支持在宿主项目中创建一部分负载平衡器组件,而在连接的服务项目中创建另一部分负载平衡器组件。但是,在服务项目中创建的内部负载平衡器的内部转发规则可以引用服务项目所连接的宿主项目中的共享子网。如需了解更多信息,请参阅“预配共享 VPC”页面上的创建内部负载平衡器

下表汇总了 HTTP(S)、SSL 代理和 TCP 代理负载平衡的组件。在大多数情况下,您可以在服务项目中创建后端实例。在这种情况下,所有负载平衡器组件都在相应项目中创建。您也可以在宿主项目中创建后端实例,在这种情况下,所有负载均衡器组件都需要在相应宿主项目中。

负载平衡器 IP 地址 转发规则 其他前端组件 后端组件
HTTP(S) 负载平衡 外部 IP 地址必须在与实现负载平衡的实例相同的项目(服务项目)中定义。 外部转发规则必须在与后端实例相同的项目(服务项目)中定义。 目标 HTTP 代理或目标 HTTPS 代理和关联的网址映射必须在后端实例所属的项目中定义。 全局后端服务必须在与后端实例相同的项目中定义。这些实例必须位于作为后端连接到后端服务的实例组中。与后端服务相关的运行状况检查也必须在与后端服务相同的项目中定义。
SSL 代理负载平衡 目标 SSL 代理必须在与后端实例相同的项目中定义。
TCP 代理负载平衡 目标 TCP 代理必须在与后端实例相同的项目中定义。

下表汇总了两种类型的区域负载平衡器的组件。它强调了内部负载平衡器的内部转发规则如何引用共享 VPC 网络中的共享子网,以在相应网络内提供内部负载平衡。

负载平衡器 IP 地址 转发规则 后端组件
网络负载平衡 区域外部 IP 地址必须在与实现负载平衡的实例相同的项目中定义。 区域外部转发规则必须在与目标池中的实例相同的项目(服务项目)中定义。 目标池必须在相应目标池中的实例所在的项目和区域中定义。与目标池关联的运行状况检查也必须在相同项目中定义。
内部负载平衡 内部 IP 地址可来自宿主项目,也可来自服务项目:
• 如果负载平衡器应可用于共享 VPC 网络,则内部 IP 地址必须来自共享子网的主要 IP 地址范围。
• 如果负载平衡器应位于一个服务项目本地,则内部 IP 地址可来自该服务项目中某个网络的子网。
内部转发规则必须在与实现负载平衡的实例相同的项目中定义;但其引用的子网决定了负载平衡器能否在共享 VPC 情景中正常工作:
• 如果负载平衡器应可用于共享 VPC 网络,则转发规则必须引用共享子网。如需查看具体的说明,请参阅“预配共享 VPC”页面上的创建内部负载平衡器
• 如果负载平衡器应位于一个服务项目本地,则转发规则可引用该服务项目中的子网。
区域后端服务必须在与实现负载平衡的实例相同的项目中定义。实现负载平衡的实例必须位于作为后端连接到后端服务的实例组中。与后端服务相关的运行状况检查也必须在与后端服务相同的项目中定义。

示例和用例

基本概念

以下示例展示了一个简单的共享 VPC 情景:

基本概念(点击可放大)
基本概念(点击可放大)
  • 该组织的共享 VPC 管理员创建了一个宿主项目,并为其连接了两个服务项目:

    • 可对 Service Project A 中的服务项目管理员进行配置,允许其访问共享 VPC 网络中的全部或部分子网。至少具有 10.0.1.0/24 Subnet 的子网级权限的服务项目管理员在 us-west1 区域的一个地区内创建了 Instance A。此实例从 10.0.1.0/24 CIDR 块获取其内部 IP 地址 10.0.1.3

    • 可对 Service Project B 中的服务项目管理员进行配置,允许其访问共享 VPC 网络中的全部或部分子网。至少具有 10.15.2.0/24 Subnet 的子网级权限的服务项目管理员在 us-east1 区域的一个地区内创建了 Instance B。此实例从 10.15.2.0/24 CIDR 块获取其内部 IP 地址 10.15.2.4

  • 独立项目完全不参与共享 VPC;它既不是宿主项目,也不是服务项目。独立实例由至少具有项目的 compute.InstanceAdmin 角色的 IAM 成员创建。

多个宿主项目

以下示例演示了如何使用共享 VPC 构建彼此分隔的测试和生产环境。在本例中,组织决定使用两个独立的宿主项目,即一个测试环境和一个生产环境

多个宿主项目(点击可放大)
多个宿主项目(点击可放大)
  • 该组织的共享 VPC 管理员创建了两个宿主项目,并为其连接了两个服务项目,如下所示:

    • Apps TestingMobile Testing 服务项目连接到 Test Environment 宿主项目。各服务项目内的服务项目管理员均可配置为访问 Testing Network 中的全部或部分子网。

    • Apps ProductionMobile Production 服务项目连接到 Production Environment 宿主项目。各服务项目内的服务项目管理员均可配置为访问 Production Network 中的全部或部分子网。

  • 两个宿主项目均有一个共享 VPC 网络,其子网配置为使用相同的 CIDR 范围。在 Testing NetworkProduction Network 中,两个子网均如下所示:

    • us-west1 区域内的 10.0.1.0/24 Subnet

    • us-east1 区域内的 10.15.2.0/24 Subnet

  • 考虑 Apps Testing 服务项目中的 Instance ATApps Production 服务项目中的 Instance AP

    • 服务项目管理员可以创建类似于它们的实例,只要这些管理员至少具有 10.0.1.0/24 Subnet 子网级权限即可。

    • 注意两个实例都使用 IP 地址 10.0.1.3。这是可以接受的做法,因为每个实例都存在于一个服务项目中,而该服务项目连接到包含自己的共享 VPC 网络的唯一宿主项目。测试和生产网络都以相同的方式进行了有针对性的配置。

    • 使用 10.0.1.0/24 Subnet 的实例必须位于与子网相同区域的地区中,即使子网和实例分别在单独的项目中定义时也是如此。由于 10.0.1.0/24 Subnet 位于 us-west1 区域,使用该子网创建实例的服务项目管理员必须在同一区域中选择一个地区,例如 us-west1-a

混合云情景

以下示例演示了如何在混合环境中使用共享 VPC。

混合云(点击可放大)
混合云(点击可放大)

在这个例子中,一个组织创建了一个具有单个共享 VPC 网络的单个宿主项目。共享 VPC 网络通过 Cloud VPN 连接到本地部署网络。一些服务和应用托管在 GCP 中,还有一些服务和应用则保留在本地:

  • 共享 VPC 管理员启用了宿主项目,并将三个服务项目连接到该宿主项目:Service Project AService Project BService Project C

    • 彼此分离的团队可以管理各服务项目。IAM 权限已配置为使一个项目的服务项目管理员没有其他服务项目的权限。

    • 共享 VPC 管理员向必要的服务项目管理员授予了子网级或项目级权限,以便他们可以创建使用共享 VPC 网络的实例

      • 拥有 10.0.1.0/24 Subnet 的子网级权限的 Service Project A 服务项目管理员可以在其中创建 Instance A。服务项目管理员必须为实例在 us-west1 区域中选择一个地区,因为这个区域包含 10.0.1.0/24 SubnetInstance A10.0.1.0/24 Subnet 中的可用 IP 地址范围内获取其 IP 地址 10.0.1.3

      • 拥有 10.15.2.0/24 Subnet 的子网级权限的 Service Project B 服务项目管理员可以在其中创建 Instance B。服务项目管理员必须为实例在 us-east1 区域中选择一个地区,因为这个区域包含 10.15.2.0/24 SubnetInstance B10.15.2.0/24 Subnet 中的可用 IP 地址范围内获取其 IP 地址 10.15.2.4

      • 拥有整个宿主项目的项目级权限的 Service Project C 服务项目管理员可以在宿主项目任意 VPC 网络内的任意子网中创建实例。例如,服务项目管理员可以在 10.7.1.0/24 Subnet 内创建 Instance C,在 us-east1 区域内选择一个地区,以匹配子网的区域。Instance C10.7.1.0/24 Subnet 中的可用 IP 地址范围内获取其 IP 地址 10.7.1.50

    • 每个服务项目均单独结算。

    • 各项目中的服务项目管理员负责创建和管理资源

  • 共享 VPC 管理员已将网络管理任务委托给属于共享 VPC 网络网络和安全管理员的其他 IAM 成员。

    • 网络管理员创建了一个 Cloud VPN 网关,并配置一个通过互联网连接到本地网关的 VPN 隧道。由于 us-east1 区域中的相应 Cloud Router 路由器已配置,因此 Cloud VPN 会与其本地对应方交换路由以及从对应方接收路由。

    • 如果 VPC 的动态路由模式是全局模式,则 Cloud Router 路由器会将学习到的路由应用于 VPC 网络中所有子网内的本地网络,并将连接到所有 VPC 子网的路由与其本地对应方共享。

    • 安全管理员在共享 VPC 网络中创建和管理防火墙规则,以控制 GCP 和本地网络中实例之间的流量。

    • 根据适用的防火墙规则,可以将服务项目中的实例配置为与内部服务(如位于本地的数据库或目录服务器)通信。

两层网络服务

以下示例演示了如何使用共享 VPC 委托管理职责,并坚持最小特权原则。在本例中,组织有一个分为两层的网络服务,各层分别由不同的团队管理。第 1 层代表全局 HTTP 负载平衡器后的对外组件。第 2 层表示第 1 层所依赖的内部服务,并使用内部负载平衡器进行平衡。

两层网络服务(点击可放大)
两层网络服务(点击可放大)

共享 VPC 允许您将网络服务的每一层映射到不同的项目,以便在共享一个通用 VPC 网络时由不同的团队进行管理各层:

  • 各层的资源(例如实例和负载平衡器组件)分别放置在由不同团队管理的不同服务项目中。

  • 各层服务项目由共享 VPC 管理员连接到宿主项目。共享 VPC 管理员也启用了宿主项目。

    • 彼此分离的团队可以通过成为适当服务项目中的服务项目管理员来管理网络服务的每一层。

    • 每个服务项目均单独结算。

    • 各项目中的服务项目管理员负责创建和管理资源

  • 网络访问控制的描述如下:

    • 仅在第 1 层工作的 IAM 成员是 Tier 1 Service Project 的服务项目管理员,并仅获得 10.0.1.0/24 Subnet 的子网级权限。在本例中,一名这样的服务项目管理员在该子网中创建了三个 Tier 1 Instances

    • 仅在第 2 层工作的 IAM 成员是 Tier 2 Service Project 的服务项目管理员,并仅获得 10.0.2.0/24 Subnet 的子网级权限。在本例中,另一名服务项目管理员在该子网中创建了三个 Tier 2 Instances,此外还创建了一个内部负载平衡器,使用该子网中可用范围内的 IP 地址转发规则。

    • 监督整个网络服务的 IAM 成员是两个服务项目的服务项目管理员,他们对宿主项目具有项目级权限,因此可以使用其中定义的任何子网。

    • 共享 VPC 管理员可以选择将网络管理任务委托给网络和安全管理员

后续步骤

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

发送以下问题的反馈:

此网页