本文档是 Cross-Cloud Network 设计指南系列文章中的一篇。
该系列包含以下部分:
- 适用于分布式应用的 Cross-Cloud Network
- Cross-Cloud Network 中分布式应用的网络分段和连接
- 跨云网络中分布式应用的服务网络(本文档)
- Cross-Cloud Network 中分布式应用的网络安全
本文档介绍了如何从一组所选或创建的组件服务组建应用。建议您先通读一遍整个文档,然后再按照步骤操作。
本文档将引导您做出以下决策:
- 您是自行创建个别服务,还是使用第三方服务
- 服务是在全球范围内还是在区域范围内提供
- 服务是在本地、其他云还是两者都不是使用的
- 您是通过共享服务 VPC 访问服务端点,还是通过所有相关的应用 VPC 分发端点
本文档将引导您完成以下步骤:
- 确定应用是全球级还是区域级的
- 选择第三方托管式服务或创建并发布自己的服务
- 使用共享模式或专用模式设置对服务端点的专用访问通道
- 将服务组建到应用中,以匹配全球或区域原型
开发者为跨云网络定义服务网络层。在此阶段,管理员已为跨云网络设计了连接层,从而可以灵活地选择本文档中所述的服务网络选项。在某些情况下,由于跨 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 端点部署在使用方 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 作为后端,如下图所示:
您可以使用 Private Service Connect 端点和后端以非公开方式访问 Google API。一般建议使用端点,因为 Google API 提供方会提供弹性和基于证书的身份验证。
在需要访问服务的每个 VPC 中创建一个 Private Service Connect 端点。由于使用方 IP 地址是专用全球 IP 地址,因此即使多个 VPC 中存在端点实例,也只需要为每个服务提供一个 DNS 映射,如下图所示:
定义已发布服务的使用模式
已发布的服务可以在各种位置运行:您的 VPC 网络、另一个 VPC 网络、本地数据中心或云端。无论服务工作负载在何处运行,您的应用都会通过接入点(例如以下接入点之一)使用这些服务:
- 专用服务访问通道子网中的 IP 地址
- Private Service Connect 端点
- 使用 Private Service Connect NEG 的负载均衡器的 VIP
使用方接入点可以在多个网络之间共享,也可以专用于单个网络。根据您的组织是将创建使用方服务接入点的任务委托给每个应用组,还是以统一方式管理对服务的访问权限,决定是创建共享使用方接入点还是专用使用方接入点。
管理服务访问通道涉及以下活动:
- 创建接入点
- 在服务访问通道 VPC 中部署接入点,该 VPC 具有适当的可达性类型
- 在 DNS 中注册使用方接入点的 IP 地址和网址
- 在使用方接入点前面添加负载均衡时,在使用方空间中管理服务的安全证书和弹性
对于某些组织,将服务访问管理分配给中央团队可能可行,而另一些组织可能采用更灵活的结构,为每个使用方或应用团队提供更高的独立性。在专用模式下运行的附带结果是,某些元素会被复制。例如,某个服务由每个应用组注册了多个 DNS 名称,并管理多组 TLS 证书。
跨云网络中分布式应用的网络分段和连接中所述的 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 网络中的服务使用方(客户端)可以使用该服务提供方,如下图所示:
如果您希望使混合服务在托管负载均衡器的 VPC 网络以外的其他 VPC 网络中可用,则可以使用 Private Service Connect 发布服务。通过将服务连接置于内部区域级 TCP 代理负载均衡器前面,您可以让其他 VPC 网络中的客户端访问在本地或在其他云环境中运行的混合服务。
在跨云环境中,使用混合 NEG 可实现安全的应用到应用通信。
当其他组织发布应用服务时,请使用混合 NEG 来扩展该服务的专用访问抽象。下图展示了此场景:
在上图中,应用服务层完全在相邻的 CSP 中组成,在未灰显的图表部分中突出显示。混合负载均衡器与 Private Service Connect 服务连接结合使用,作为发布外部应用服务以在Google Cloud内以非公开方式使用的机制。具有混合 NEG 和 Private Service Connect 服务连接的混合负载均衡器位于服务提供方项目的 VPC 中。此服务提供方项目通常可能与中转 VPC 不同,因为它在提供方组织或项目的管理范围内,因此与常见的传输服务分开。提供方 VPC 无需通过 VPC 对等互连或高可用性 VPN 与使用方 VPC(即图中的“服务共享 VPC”)建立连接。
集中服务访问通道
服务访问通道可以集中到某个 VPC 网络中,并从其他应用网络进行访问。下图展示了可实现接入点集中化的常见模式:
下图展示了从专用服务 VPC 访问的所有服务:
如果服务通过应用负载均衡器进行前端处理,您可以使用网址映射来引导不同服务后端的流量,而不是为每个服务使用不同的负载均衡器,从而可以整合到数量较少的负载均衡器。 原则上,应用栈可以完全由单个应用负载均衡器、服务后端和适当的网址映射组成。
在此实现中,您必须跨 VPC 使用混合 NEG 来实现大多数后端类型。例外情况是 Private Service Connect NEG 或后端,如明确将 Google Cloud L7 负载均衡器与 Private Service Connect链接在一起。
跨 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 Agent 充当代理,从而克服 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 条目。
后续步骤
- 为跨云网络应用设计网络安全。
- 详细了解本设计指南中使用的 Google Cloud 产品:
- 如需查看更多参考架构、图表和最佳实践,请浏览 Cloud 架构中心。
贡献者
作者:
- Victor Morno | Cloud 网络产品经理
- Ghaleb Al-habian | 网络专家
- Deepak Michael | 网络专家客户工程师
- Osvaldo Costa | 网络专家客户工程师
- Jonathan Almaleh | 员工技术解决方案顾问
其他贡献者:
- Zach Seils | 网络专家
- Christopher Abraham | 网络专家客户工程师
- Emanuele Mazza | 网络产品专家
- Aurélien Legrand | 战略云工程师
- Eric Yu | 网络专家客户工程师
- Kumar Dhanagopal | 跨产品解决方案开发者
- Mark Schlagenhauf | 网络技术文档工程师
- Marwan Al Shawi | 合作伙伴客户工程师
- Ammett Williams | 开发者关系工程师