跨云网络中分布式应用的服务网络

Last reviewed 2025-01-30 UTC

本文档是 Cross-Cloud Network 设计指南系列文章中的一篇。

该系列包含以下部分:

本文档介绍了如何从一组所选或创建的组件服务组装应用。建议您先通读一遍整个文档,然后再按照步骤操作。

本文档将引导您做出以下决策:

  • 您是自行创建各个服务,还是使用第三方服务
  • 服务是在全球范围内还是在区域范围内提供
  • 服务是从本地、其他云还是两者都不是消耗的
  • 无论您是通过共享服务 VPC 访问服务端点,还是通过所有相关的应用 VPC 分发端点

本文档将引导您完成以下步骤:

  1. 确定应用是全球性还是区域性的
  2. 选择第三方托管式服务或创建并发布自己的服务
  3. 使用共享模式或专用模式设置对服务端点的私密访问权限
  4. 将服务组装到应用中,以匹配全球或区域原型

开发者为 Cross-Cloud Network 定义服务网络层。在此阶段,管理员已为 Cross-Cloud Network 设计了连接层,从而可以灵活选择本文档中介绍的服务网络选项。在某些情况下,由于跨 VPC 传递性有限,因此存在限制。如果这些限制可能会影响设计决策,我们会进行说明。

确定您的应用是区域级应用还是全球级应用

确定您创建的应用的客户是否需要区域或全球部署原型。您可以通过将负载分散到区域的各个可用区来实现区域弹性。您可以通过在多个区域之间分摊负载来实现全球弹性。

选择原型时,请考虑以下因素:

  • 应用的可用性要求
  • 应用的使用位置
  • 费用

如需了解详情,请参阅Google Cloud 部署原型

本设计指南讨论了如何支持以下部署原型:

在跨云分布式应用中,该应用的不同服务可以由不同的云服务提供商 (CSP) 或私有数据中心提供。 为帮助确保一致的恢复能力结构,请将托管在不同 CSP 中的服务放置在地理位置相近的 CSP 数据中心内。

下图展示了一个分布在多个云中的全球应用堆栈,其中不同的应用服务部署在不同的 CSP 中。每个全球应用服务在同一 CSP 的不同区域中都有工作负载实例。

分布在多个云平台上的全球应用栈。

定义和访问应用服务

如需组装应用,您可以使用现有的第三方托管服务、创建并托管自己的应用服务,也可以将两者结合使用。

使用现有的第三方托管服务

确定可用于应用的第三方托管式服务。确定哪些服务是作为区域服务或全球服务构建的。此外,还要确定每项服务支持哪些专用访问通道选项。

了解可以使用哪些受管服务后,您就可以确定需要创建哪些服务。

创建和访问应用服务

每个服务都由一个或多个工作负载实例托管,这些实例可以作为单个端点或一组端点进行访问。

应用服务的一般模式如下图所示。应用服务部署在一系列工作负载实例中。(在本例中,工作负载实例可以是 Compute Engine 虚拟机、Google Kubernetes Engine (GKE) 集群或运行代码的其他后端。) 工作负载实例以与负载均衡器关联的一组后端的形式进行组织。

下图展示了一个具有一组后端的通用负载均衡器。

具有后端的负载平衡器。

为了实现所选的负载分配并自动执行故障转移,这些端点组使用前端负载均衡器。通过使用托管式实例组 (MIG),您可以自动扩缩构成负载平衡器后端的端点,从而弹性地增加或减少服务容量。此外,根据应用服务的需求,负载均衡器还可以提供身份验证、TLS 终结和其他连接特定服务。

确定服务范围 - 区域级或全球级

确定您的服务是否需要并能够支持区域性或全球性弹性。区域软件服务可以设计为在区域延迟预算内进行同步。全球应用服务可以支持跨区域分布的节点之间的同步故障转移。如果您的应用是全球性的,您可能希望支持它的服务也是全球性的。但是,如果您的服务需要在其各个实例之间进行同步以支持故障切换,则必须考虑区域之间的延迟。在您的情况下,您可能需要依赖于在同一区域或附近区域中具有冗余的区域服务,从而支持低延迟的故障切换同步。

Cloud Load Balancing 支持托管在单个区域内或分布在多个区域中的端点。因此,您可以创建面向全球客户的层,该层可以与全球、区域或混合服务层进行通信。选择服务部署,确保动态网络故障切换(或跨区域负载均衡)与应用逻辑的弹性状态和功能相符。

下图展示了如何通过区域级负载平衡器构建全球服务,从而访问其他区域中的后端,实现跨区域自动故障切换。在此示例中,应用逻辑是全局的,所选后端支持跨区域同步。每个负载平衡器主要将请求发送到本地区域,但可以故障切换到远程区域。

后端位于不同区域的负载平衡器。

  • 全局后端是指可供一个或多个负载平衡器访问的区域级后端集合。
  • 虽然后端是全球性的,但每个负载均衡器的前端都是区域性的。
  • 在此架构模式中,负载平衡器主要仅在其区域内分配流量,但当本地区域中的资源不可用时,也可以将流量均衡到其他区域。
  • 一组区域级负载均衡器前端,每个前端都可从其他区域访问,并且每个前端都能访问其他区域中的后端,这些前端共同构成一个聚合的全球服务。
  • 设计全球应用堆栈中所述,如需组建全球应用堆栈,您可以使用 DNS 路由和健康检查来实现前端的跨区域故障切换。
  • 负载均衡器前端本身可使用全球访问权限从其他区域访问(未在图中显示)。

此模式同样可用于包含具有全局故障切换功能的已发布服务。下图展示了使用全球后端的已发布服务。

可从不同区域访问的负载平衡器。

在图中,请注意,已发布的服务在生产者环境中实现了全局故障切换。在消费者环境中添加了全局故障切换功能,可提高消费者负载均衡基础架构的区域性故障恢复能力。必须在服务应用逻辑和服务提供方的负载均衡设计中实现服务的跨区域故障切换。服务提供方可以实现其他机制。

如需确定要使用的 Cloud Load Balancing 产品,您必须先确定负载均衡器必须处理的流量类型。请考虑以下一般规则:

  • 使用应用负载平衡器处理 HTTP(S) 流量。
  • 对于非 HTTP(S) TCP 流量,请使用代理网络负载平衡器。此代理负载均衡器还支持 TLS 分流。
  • 使用直通式网络负载平衡器来保留标头中的客户端来源 IP 地址,或支持 UDP、ESP 和 ICMP 等其他协议。

如需详细了解如何为您的使用场景选择最佳负载均衡器,请参阅选择负载均衡器

具有无服务器后端的服务

可以使用无服务器后端定义服务。生产者环境中的后端可以组织在无服务器 NEG 中,作为负载均衡器的后端。通过创建与提供方负载均衡器的前端相关联的服务连接,可以使用 Private Service Connect 发布此服务。已发布的服务可以通过 Private Service Connect 端点或 Private Service Connect 后端使用。如果服务需要由生产者发起的连接,您可以使用无服务器 VPC 访问通道连接器让 Cloud Run、App Engine 标准环境和 Cloud Run functions 环境将数据包发送到 VPC 网络中资源的内部 IPv4 地址。无服务器 VPC 访问通道还支持将数据包发送到连接到所选 VPC 网络的其他网络。

以私密方式访问服务的方法

您的应用可以包含 Google 提供的受管服务、外部供应商或组织中的同类群组提供的第三方服务,以及您的团队开发的服务。其中一些服务可能可以通过互联网使用公共 IP 地址进行访问。本部分介绍了您可以使用专用网络访问这些服务的方法。存在以下服务类型:

  • Google 公共 API
  • Google 无服务器 API
  • Google 发布的代管式服务
  • 供应商和同行的已发布代管式服务
  • 您已发布的服务

在阅读后续部分时,请牢记这些选项。您可以根据服务的分配方式,使用上述一种或多种专用访问通道选项。

组装、发布和管理服务的组织(或组织内的群组)称为服务提供方。您和您的应用被称为服务使用方。

某些代管式服务只能通过专用服务访问通道发布。 内部连接和 VPC 网络中推荐的网络设计可容纳通过专用服务访问通道和 Private Service Connect 发布的服务。

如需大致了解以私密方式访问服务的选项,请参阅服务的专用访问通道选项

我们建议您尽可能使用 Private Service Connect 连接到代管式服务。如需详细了解 Private Service Connect 的部署模式,请参阅 Private Service Connect 部署模式

Private Service Connect 有两种类型,不同的服务可以发布为任一类型:

以 Private Service Connect 端点形式发布的服务可直接供其他工作负载使用。这些服务依赖于服务提供方提供的身份验证和弹性。如果您希望进一步控制服务身份验证和弹性,可以使用 Private Service Connect 后端在使用方网络中添加一层负载均衡,以实现身份验证和弹性。

下图展示了通过 Private Service Connect 端点访问服务:

通过 Private Service Connect 端点访问服务。

该图显示了以下模式:

  • Private Service Connect 端点部署在使用方 VPC 中,这使得提供方服务可供虚拟机和 GKE 节点使用。
  • 使用方网络和提供方网络都必须部署在同一区域中。

上图显示了作为区域性资源的端点。由于启用了全球访问权限,因此可以从其他区域访问端点。

如需详细了解部署模式,请参阅 Private Service Connect 部署模式

Private Service Connect 后端使用配置了 Private Service Connect 网络端点组 (NEG) 后端的负载均衡器。如需查看受支持的负载平衡器列表,请参阅 Private Service Connect 后端简介

Private Service Connect 后端可让您创建以下后端配置:

  • 托管式服务前面的客户拥有的网域和证书
  • 不同区域中的托管式服务之间使用方控制的故障切换
  • 针对托管式服务的集中式安全配置和访问权限控制

在下图中,全球负载均衡器使用 Private Service Connect NEG 作为后端,以建立与服务提供商的通信。无需进一步配置网络,数据通过 Google 的 SDN 结构传输。

使用网络端点组的全球负载均衡器。

大多数服务都旨在用于由使用方发起的连接。如果服务需要从提供方发起连接,请使用 Private Service Connect 接口

部署专用服务访问通道或 Private Service Connect 时,一个重要的考虑因素是传递性。Private Service Connect 使用方访问点可通过 Network Connectivity Center 访问。对于 Private Service Connect 或专用服务访问通道使用方访问点,无法通过 VPC 网络对等互连连接访问已发布的服务。由于所有服务使用方接入点都不具备 VPC 间传递性,因此 VPC 拓扑中服务接入子网或端点的位置决定了您是为共享服务部署还是专用服务部署设计网络。

高可用性 VPN 和客户管理的代理等选项提供了一些方法,可实现 VPC 间传递性通信。

无法通过 VPC 网络对等互连访问 Private Service Connect 端点。如果您需要这种类型的连接,请部署内部负载均衡器和 Private Service Connect NEG 作为后端,如下图所示:

使用 NEG 提供可访问性。

您可以使用 Private Service Connect 端点和后端以私密方式访问 Google API。一般建议使用端点,因为 Google API 生产者提供弹性和基于证书的身份验证。

在需要访问服务的每个 VPC 中创建 Private Service Connect 端点。由于使用方 IP 地址是专用全球 IP 地址,因此即使多个 VPC 中存在端点实例,也只需要为每个服务提供一个 DNS 映射,如下图所示:

Private Service Connect 与 Google API。

定义已发布服务的使用模式

已发布的服务可以在各种位置运行:您的 VPC 网络、另一个 VPC 网络、本地数据中心或云端。无论服务工作负载在何处运行,您的应用都会通过接入点(例如以下任一接入点)使用这些服务:

  • 专用服务访问通道子网中的 IP 地址
  • Private Service Connect 端点
  • 使用 Private Service Connect NEG 的负载均衡器的 VIP

消费者接入点可以在多个网络之间共享,也可以专用于单个网络。根据贵组织是否将创建消费者服务访问点的任务委托给每个应用组,或者是否以统一方式管理对服务的访问权限,来决定是创建共享的消费者访问点还是专用的消费者访问点。

管理服务访问权限涉及以下活动:

  • 创建接入点
  • 在服务访问 VPC 中部署接入点,该 VPC 具有适当的可访问性类型
  • 在 DNS 中注册使用方接入点的 IP 地址和网址
  • 在消费类空间中,当在消费类访问点前面添加负载均衡时,管理服务的安全证书和恢复能力

对于某些组织,将服务访问权限管理分配给中央团队可能可行,而另一些组织可能采用更灵活的结构,为每个消费者或应用团队提供更大的独立性。在专用模式下运行的副产品是,某些元素会被复制。例如,某个服务由每个应用组注册了多个 DNS 名称,并管理多组 TLS 证书。

Cross-Cloud Network 中分布式应用的网络分段和连接中所述的 VPC 设计支持以共享或专用模式部署服务访问点,从而实现可达性。共享的使用方访问点部署在服务访问 VPC 中,可从任何其他 VPC 或外部网络进行访问。专用使用方接入点部署在应用 VPC 中,只能从该应用 VPC 中的资源访问。

服务访问 VPC 与应用 VPC 之间的主要区别在于,服务访问 VPC 可实现服务访问点的传递连接。服务访问 VPC 不仅限于托管使用方访问点。VPC 可以托管应用资源以及共享的使用方接入点。在这种情况下,应将 VPC 配置并处理为服务 VPC。

共享的受管服务访问权限

对于所有服务使用方法(包括 Private Service Connect),请确保执行以下任务:

  • 在服务 VPC 中部署服务使用方接入点。服务 VPC 对其他 VPC 具有传递性可达性。
  • 如果服务访问 VPC 通过高可用性 VPN 连接,请从通过高可用性 VPN 与其他网络对等的 Cloud Router 路由器通告使用方接入点的子网,作为自定义路由通告。对于 Google API,请通告 API 的宿主 IP 地址。
  • 更新多云防火墙规则,以允许专用服务访问通道子网。

对于专用服务访问,请确保您可以满足以下附加要求:

  • 将自定义路由导出到服务提供方的网络。如需了解详情,请参阅本地主机无法与服务提供方的网络进行通信
  • 创建入站防火墙规则,以允许专用服务访问通道子网进入应用 VPC
  • 创建入站防火墙规则,以允许专用服务访问通道子网进入服务 VPC

对于无服务器服务访问,请确保您能满足以下要求:

  • 访问通道连接器需要专用的 /28 常规子网
  • Cloud Router 默认通告常规子网
  • 创建入站防火墙规则,以允许 VPC 内的所有 VPC 访问子网
  • 更新多云防火墙规则以允许 VPC 访问连接器子网
  • 创建入站防火墙规则,以允许专用服务访问子网进入应用 VPC

专用托管式服务访问通道

请确保您执行了以下任务:

  • 在需要访问权限的每个应用 VPC 中,为服务部署转发规则以创建访问点。
  • 对于专用服务访问通道,请创建入站防火墙规则,以允许专用服务访问通道子网进入应用 VPC。

对于无服务器服务访问,请确保您能满足以下要求:

  • 访问通道连接器需要专用的 /28 常规子网
  • 创建入站防火墙规则,以允许应用 VPC 中的 VPC 访问连接器子网

组装应用堆栈

本部分介绍了如何组装区域级或全球级应用堆栈。

设计区域应用栈

如果应用遵循单区域或多区域部署原型,请使用单区域应用堆栈。区域级应用堆栈可以视为区域级应用服务层的串联。例如,一个区域性 Web 服务层与同一区域中的应用层通信,而应用层又与同一区域中的数据库层通信,这就是一个区域性应用堆栈。

每个区域应用服务层都使用负载平衡器将流量分配到该区域中相应层的各个端点。通过将后端资源分布到区域中的三个或更多可用区来实现可靠性。

其他 CSP 或本地数据中心内的应用服务层应部署在外部网络中的对等区域。此外,还需在堆栈区域中提供已发布的服务。为了使区域内的应用堆栈保持一致,应用服务层网址必须解析为特定的负载均衡器前端区域 IP 地址。这些 DNS 映射已在每个应用服务的相关 DNS 区域中注册。

下图显示了具有主动/被动恢复能力的区域堆栈:

具有主动-被动弹性的区域级堆栈。

应用堆栈的完整实例部署在不同云数据中心的每个区域中。当任何应用服务层发生区域性故障时,另一个区域中的堆栈会接管整个应用的交付。此故障切换是响应不同应用服务层的带外监控而完成的。

当某个服务层报告故障时,应用前端会重新锚定到备份堆栈。该应用编写为引用一组反映 DNS 中区域 IP 地址堆栈的区域名称记录,以便应用的每个层在同一区域内保持其连接。

设计全球应用堆栈

如果应用遵循全球应用部署原型,则每个应用服务层都包含多个区域中的后端。在多个区域中包含后端可将应用服务层的弹性池扩展到单个区域之外,并实现自动故障切换检测和重新聚合。

下图展示了全球应用栈:

使用枢纽项目和应用项目的全局堆栈。

上图显示了一个由以下组件组装而成的全球应用:

  • 在本地数据中心内运行且具有负载均衡器前端的服务。负载均衡器接入点可通过 Cloud Interconnect 从传输 VPC 访问。
  • 传输 VPC 托管外部数据中心与应用 VPC 之间的混合连接。
  • 一个应用 VPC,用于托管在工作负载实例上运行的核心应用。这些工作负载实例位于负载平衡器后面。负载平衡器可从网络中的任何区域访问,并且可以访问网络中任何区域的后端。
  • 一个服务 VPC,用于托管在其他位置(例如第三方 VPC)运行的服务的接入点。这些服务访问点可通过服务 VPC 与中转 VPC 之间的高可用性 VPN 连接访问。
  • 由其他组织或主组织托管的服务提供方 VPC,以及在其他位置运行的应用。通过部署为服务 VPC 中托管的区域级负载平衡器的全局后端的 Private Service Connect 后端,可以访问相关服务。区域级负载平衡器可从任何其他区域访问。

如果您希望创建的应用可从互联网访问,可以添加一个指向应用 VPC 中应用工作负载的全球外部应用负载平衡器(未在图表中显示)。

为了支持全球应用栈,我们为每个应用层使用了全球后端。这样一来,即使一个区域中的所有后端端点都发生故障,也能实现恢复。每个区域都为每个应用服务层提供区域级负载均衡器前端。发生区域级故障切换时,内部区域负载均衡器前端可跨区域访问,因为它们使用全球访问权限。由于应用堆栈是全球性的,因此使用 DNS 地理位置路由政策来为特定请求或流程选择最合适的区域级前端。如果前端发生故障,可以使用 DNS 健康检查自动执行从一个前端到另一个前端的故障切换。

使用 Private Service Connect 后端发布的服务的优势在于,它们可以通过 Private Service Connect 进行全球访问。借助此功能,Private Service Connect 后端可从任何区域访问,并减少应用服务层故障造成的中断。这意味着,Private Service Connect 后端可以作为全球后端来使用,如确定服务的范围 - 区域级或全球级中所述。

提供对外部网络中托管的服务的专用访问权限

您可能需要为托管在其他网络中的服务发布本地接入点。在这些情况下,您可以使用采用混合 NEG 的内部区域级 TCP 代理负载平衡器。您可以创建托管在本地或其他云环境中的服务提供方,以供 VPC 网络中的服务使用方(客户端)使用,如下图所示:

使用混合 NEG 的本地接入点。

如果您希望使混合服务在托管负载均衡器的 VPC 网络以外的其他 VPC 网络中可用,则可以使用 Private Service Connect 发布服务。通过将服务连接置于内部区域 TCP 代理负载均衡器之前,您可以让其他 VPC 网络中的客户端访问在本地或其他云环境中运行的混合服务。

在跨云环境中,使用混合 NEG 可实现安全的应用程序到应用程序通信。

当其他组织发布应用服务时,请使用混合 NEG 来扩展该服务的专用访问抽象。下图说明了这种情况:

位于其他网络中的服务前面的混合 NEG。

在上图中,应用服务层完全在相邻的 CSP 中组成,在未灰显的图表部分中突出显示。混合负载平衡器与 Private Service Connect 服务连接搭配使用,作为在Google Cloud内发布外部应用服务以供私下使用的机制。具有混合 NEG 和 Private Service Connect 服务连接的混合负载平衡器位于服务提供方项目的 VPC 中。此服务提供方项目通常可能与传输 VPC 不同,因为它位于提供方组织或项目的管理范围内,因此与常见的传输服务分开。提供方 VPC 无需通过 VPC 对等互连或高可用性 VPN 与使用方 VPC(即图中的“服务共享 VPC”)建立连接。

集中管理服务访问权限

服务访问权限可以集中到某个 VPC 网络中,并从其他应用网络进行访问。下图展示了可实现接入点集中化的常见模式:

专用服务 VPC。

下图显示了从专用服务 VPC 访问的所有服务:

具有集中式负载平衡器的专用服务 VPC。

如果服务通过应用负载平衡器进行前端处理,您可以使用网址映射来引导不同服务后端的流量,而不是为每个服务使用不同的负载平衡器,从而减少负载平衡器的数量。 原则上,应用堆栈可以完全由单个应用负载均衡器、服务后端和适当的网址映射组成。

在此实现中,您必须跨 VPC 使用混合 NEG 来实现大多数后端类型。Private Service Connect NEG 或后端除外,如使用 Private Service Connect 显式链接 Google Cloud L7 负载平衡器中所述。

跨 VPC 使用混合 NEG 会导致后端无法进行自动修复和自动扩缩。已发布的服务在提供方租户中已有一个提供自动扩缩功能的负载均衡器。因此,只有在您集中处理以原生方式组成(而非从发布中消耗)的服务层的负载均衡功能时,才会遇到混合 NEG 的限制。

使用此服务联网模式时,请注意服务是通过额外的负载均衡层来使用的。

Private Service Connect 服务端点可在 Network Connectivity Center spoke VPC 之间访问。

集中式模式在服务的消费方添加了一层负载均衡。使用此模式时,您还需要在消费者项目中管理证书、弹性以及其他 DNS 映射。

其他注意事项

本部分包含未在本文档中明确涵盖的常见产品和服务的注意事项。

GKE 控制平面注意事项

GKE 控制平面部署在 Google 管理的租户项目中,该项目通过 VPC 网络对等互连连接到客户的 VPC。由于 VPC 网络对等互连不具有传递性,因此无法通过中心辐射型 VPC 对等互连网络拓扑直接与控制平面通信。

在考虑 GKE 设计方案(例如集中式或分散式)时,从多云来源直接访问控制平面是一个关键考虑因素。如果 GKE 部署在集中式 VPC 中,则可以在云端和Google Cloud内访问控制平面。不过,如果 GKE 部署在分散式 VPC 中,则无法直接与控制平面通信。如果组织的要求需要访问 GKE 控制平面,并且采用分散式设计模式,则网络管理员可以部署充当代理的 Connect 代理,从而克服 GKE 控制平面的非传递对等互连限制。

安全性 - VPC Service Controls

在涉及敏感数据的工作负载中,您可以使用 VPC Service Controls 为您的 VPC 资源及 Google 托管式服务配置服务边界,并控制跨边界的数据移动。使用 VPC Service Controls 将您的项目和本地网络组合到单个边界中,以防通过 Google 托管式服务来访问数据。VPC Service Controls 入站流量和出站流量规则可用于允许不同服务边界中的项目和服务进行通信(包括不在边界内的 VPC 网络)。

如需了解推荐的部署架构、全面的新手入门流程和操作最佳实践,请参阅面向企业的 VPC Service Controls 最佳实践安全基础蓝图

API/服务的 DNS

服务提供方可以使用 Private Service Connect 发布服务。服务提供方可以选择配置 DNS 域名并与服务关联。如果配置了域名,并且服务使用方创建了以该服务为目标的端点,则 Private Service Connect 和 Service Directory 会自动在服务使用方 VPC 网络中的专用 DNS 区域中为该服务创建 DNS 条目。

后续步骤

贡献者

作者:

其他贡献者: