本文档是 Cross-Cloud Network 设计指南系列文章中的一篇。
该系列包含以下部分:
- 适用于分布式应用的 Cross-Cloud Network
- Cross-Cloud Network 中分布式应用的网络分段和连接
- 跨云网络中分布式应用的服务网络(本文档)
- Cross-Cloud Network 中分布式应用的网络安全
本文档介绍了如何从一组选定的或创建的组件服务中组装应用。我们建议您先通读本文档,然后再按照步骤操作。
本文档将引导您完成以下决策:
- 您是自行创建各项服务,还是使用第三方服务
- 服务是面向全球还是面向区域提供
- 服务是从本地、其他云还是从两者都使用
- 您是通过共享服务 VPC 访问服务端点,还是通过所有相关应用 VPC 分发端点
本文档将引导您完成以下步骤:
- 确定您的应用是全球性还是区域性
- 选择第三方托管服务或创建和发布自己的服务
- 使用共享模式或专用模式设置对服务端点的专用访问
- 将服务组装到应用中,以匹配全球或区域架构
开发者为 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 端点部署在使用方 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 时,传递性是一项关键注意事项。通常,您无法通过 VPC 网络对等互连连接或通过 Network Connectivity Center 访问已发布的服务。服务访问子网或端点在 VPC 拓扑中的位置决定了您是将网络设计为共享服务部署还是专用服务部署。
HA-VPN 和客户管理的代理等选项提供了允许 VPC 间传递性通信的方法。
无法通过 VPC 网络对等互连访问 Private Service Connect 端点。如果您需要此类连接,请部署内部负载均衡器并将 Private Service Connect NEG 用作后端,如下图所示:
您可以使用 Private Service Connect 端点和后端私密访问 Google API。通常建议使用端点,因为 Google API 生产者提供基于证书的弹性和身份验证。
在需要访问该服务的每个 VPC 中创建一个 Private Service Connect 端点。由于使用方 IP 地址是专用全球 IP 地址,因此每个服务都需要单独的 DNS 映射,即使多个 VPC 中都有端点实例也是如此,如下图所示:
定义服务使用模式
服务可在多种位置运行:您的 VPC 网络、其他 VPC 网络、本地数据中心或云端。无论服务工作负载在何处运行,您的应用都将通过接入点(例如以下任一接入点)使用这些服务:
- 专用服务访问子网中的 IP 地址
- Private Service Connect 端点
- 使用 Private Service Connect NEG 的负载均衡器的 VIP
消费者接入点可供多个网络共用,也可以专用于单个网络。确定是创建共享的还是专用的使用方访问点,具体取决于贵组织是将创建使用方服务访问点的任务委托给每个应用组,还是以集中方式管理对服务的访问。
服务访问权限的管理涉及以下活动:
- 创建接入点
- 在具有适当可单播类型的 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。
- 通过通过高可用性 VPN 与其他网络对等的 Cloud Router 将消费者接入点的子网通告为自定义路由通告。对于 Google API,请通告 API 的主机 IP 地址。
- 更新多云防火墙规则,以允许专用服务访问子网。
具体而言,对于专用服务访问权限,请确保您可以满足以下额外要求:
- 将自定义路由导出到服务提供方的网络。如需了解详情,请参阅本地主机无法与服务提供方的网络进行通信
- 创建入站防火墙规则,以允许专用服务访问应用 VPC 中的子网
- 创建入站防火墙规则,以允许专用服务访问服务 VPC 中的子网
对于无服务器服务访问,请确保您可以满足以下要求:
- 访问连接器需要专用的 /28 常规子网
- Cloud Router 默认会通告常规子网
- 创建入站防火墙规则,以允许所有 VPC 访问 VPC 内的子网
- 更新多云防火墙规则,以允许 VPC 访问连接器子网
- 创建入站防火墙规则,以允许专用服务访问应用 VPC 中的子网
专用托管式服务访问权限
请确保您执行了以下任务:
- 在需要访问权限的每个应用 VPC 中,为该服务部署转发规则以创建访问点。
- 对于专用服务访问,请创建入站防火墙规则,以允许专用服务访问应用 VPC 中的子网。
对于无服务器服务访问,请确保您可以满足以下要求:
- 访问连接器需要专用的 /28 常规子网
- 创建入站防火墙规则,以允许应用 VPC 中的 VPC Access 连接器子网
组装应用堆栈
本部分介绍了如何组装区域级或全球应用堆栈。
设计区域性应用堆栈
当应用遵循区域级或多区域部署架构时,请使用区域级应用堆栈。区域应用堆栈可视为区域应用服务层的串联。例如,与同一区域中的应用层通信的区域性 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 中组合,图中未灰显的部分突出显示了该 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 的限制。
使用此服务网络模式时,请注意服务是通过额外的负载均衡层来使用。
使用代理负载均衡可获得跨 VPC 的 Network Connectivity Center spoke VPC 连接带来的规模优势,同时通过代理负载平衡器提供对已发布服务的传递连接。
无法跨 Network Connectivity Center spoke VPC 访问 Private Service Connect 服务端点和专用服务访问的转发规则。同样,混合连接(Cloud Interconnect 或高可用性 VPN)后面的网络无法跨 Network Connectivity Center spoke VPC 访问,因为动态路由不会通过 Network Connectivity Center 传播。
可以通过部署代理负载平衡器并将非传递资源作为混合 NEG 处理来克服这种传递性缺失。因此,我们可以在服务前端和可通过混合连接访问的工作负载前面部署代理负载平衡器。
负载均衡器代理前端部署在 VPC 子网中,这些子网传播到 Network Connectivity Center spoke VPC。这种传播可通过代理负载平衡器实现非传递资源在 Network Connectivity Center 中的可达性。
集中式模式会在服务的使用方添加一层负载均衡。使用此模式时,您还需要在使用方项目中管理证书、弹性和其他 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 最佳实践和 Security Foundation 蓝图。
API/服务的 DNS
服务提供方可以使用 Private Service Connect 发布服务。服务提供方可以选择配置 DNS 域名并与服务关联。如果配置了域名,并且服务使用方创建了以该服务为目标的端点,则 Private Service Connect 和 Service Directory 会自动在服务使用方 VPC 网络中的专用 DNS 区域中为该服务创建 DNS 条目。
后续步骤
贡献者
作者:
- 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 | 开发者关系工程师