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

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

该系列包含以下部分:

本文档介绍了如何通过一组选择或创建的组件服务组建应用。在执行这些步骤之前,我们建议您通读一遍文档。

本文档将指导您做出以下决定:

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

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

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

开发者定义 Cross-Cloud Network 的服务网络层。到此阶段,管理员已为 Cross-Cloud 网络设计一个连接层,可灵活选择本文档中所述的服务网络选项。在某些情况下,存在来自有限的跨 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 函数环境将数据包发送到 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 时的关键考虑因素是传递性。可通过 Network Connectivity Center 访问 Private Service Connect 使用方接入点。对于 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 with Google API。

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

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

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

使用方接入点可以跨网络共享,也可以专用于单个网络。根据您的组织是将创建使用方服务接入点的任务委托给每个应用组,还是以整合的方式管理服务访问权限,决定是创建共享使用方接入点还是专用使用方接入点。

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

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

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

跨 Cloud 网络中分布式应用的网络分段和连接中所述的 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 访问连接器子网

组建应用堆栈

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

设计区域级应用堆栈

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

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

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

下图显示了具有“主动-备用”弹性的区域级堆栈:

具有“主动-备用”弹性的区域堆栈。

应用栈的完整实例会部署在跨不同云数据中心的每个区域中。当任何应用服务层发生区域级故障时,其他区域中的堆栈将接管整个应用的传送。此故障切换是为了响应不同应用服务层的带外监控。

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

设计全局应用堆栈

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

下图展示了全局应用堆栈:

使用 Hub 项目和应用项目的全球堆栈。

上图显示了由以下组件汇编的全局应用:

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

如果您希望可以通过互联网访问创建的应用,可以添加一个全局外部应用负载平衡器,它指向应用 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 不需要通过 VPC 对等互连或高可用性 VPN 与使用方 VPC(即图中的服务共享 VPC)连接。

集中服务访问权限

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

专用服务 VPC。

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

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

当服务位于应用负载平衡器的前端时,您可以使用网址映射为不同的服务后端引导流量,而不是为每项服务使用不同的负载平衡器,从而整合到更少的负载平衡器上。原则上,应用堆栈可以使用单个应用负载平衡器以及服务后端和适当的网址映射完全构成。

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

跨 VPC 使用混合 NEG 的代价是后端的自动修复和自动扩缩功能。已发布的服务在生产者租户中已具有提供自动扩缩功能的负载平衡器。因此,仅当您针对以原生方式组合而不是从发布后使用的服务层来集中处理负载均衡函数时,才会遇到混合 NEG 的限制。

使用此服务网络模式时,请记住服务是通过额外一层负载均衡进行的。

可通过 Network Connectivity Center Spoke VPC 访问 Private Service Connect 服务端点。

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

其他注意事项

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

GKE 控制平面注意事项

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

在考虑 GKE 设计选项(如集中式或分散式)时,从多云来源直接访问控制平面是一个关键考虑因素。如果 GKE 部署在集中式 VPC 中,则可以跨云和Google Cloud访问控制平面。但是,如果 GKE 部署在分散式 VPC 中,则无法与控制平面直接通信。如果组织的要求除了采用分散式设计模式之外还需要访问 GKE 控制平面,则网络管理员可以部署一个充当代理的连接代理,从而克服 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 条目。

后续步骤

贡献者

作者:

其他贡献者: