亚马逊AWS官方博客

从客户 Amazon VPC 访问其他客户 Amazon VPC 内的服务或资源

专题摘要

本文是“在亚马逊云科技上围绕 Amazon VPC 打造内外兼修的合适架构”系列主题的第七部分,前面我们围绕着客户 VPC 内部的服务,VPC 外部的托管服务以及两者之间的交互进行了深入分析。而实际上,客户在实际的部署中往往不止一个 VPC,而这些 VPC 内部的资源之间可能需要进行交互,本章节我们主要探讨,围绕着客户多个 VPC 如何进行网络交互。

本系列专题由如下几部分组成:

背景介绍

当客户在亚马逊云科技上部署其工作负载时,工作负载中通常会开始出现常见的服务依赖关系。例如我们经常会把一些常见的服务放到单独的 Amazon VPC 中,通过把这些服务共享给其他 VPC 中的工作负载来达到统一管理和复用的目的。这些共享服务通常会包括安全服务、日志记录、监控、DevOps 工具和身份验证等等。

VPC 对等连接(VPC peering)是连接 VPC 的一个重要选项。但是,VPC 对等连接虽然容易实现,但往往会面临如下的问题:

  1. 在大规模部署的情况下,客户可能拥有数百个 Amazon VPC,如果在这些 VPC 之间全部构建对等连接,网络拓扑会变得非常复杂,难以扩展。而且,单个 VPC 配置对等连接的上限为 125 个,因此 VPC peering 只适用于少量的 VPC 之间建立连接。
  2. VPC 对等连接允许一个 Amazon VPC 中的实例与对等 VPC 中的实例进行通信。因此,客户需要负责实施细粒度的网络访问控制,来确保只有共享服务 VPC 中的某些特定资源能被连接的对等 VPC 内的实例访问。

针对上述问题中的第一个问题,我们通常会引入 Amazon Transit Gateway(TGW)来简化网络拓扑。TGW 可以充当连接多个 VPC,甚至包括本地数据中心的枢纽网关,让整个网络拓扑变得更加简单。通过 TGW,每个新加入的 VPC 连接只需建立一次,大大提高了可扩展性。

针对第二个问题, 我们可以借助 Amazon PrivateLink,基于 TCP 协议,以安全且可扩展的方式建立从服务消费者 VPC 到服务提供方 VPC 之间的服务连接。

Amazon PrivateLink 是一项具有高可用性的可扩展技术,我们在系列专题的“第二部分:从客户 Amazon VPC 内部访问外部亚马逊云科技托管服务”中分析的在客户 VPC 内部实例如何私密地访问客户 VPC 外部托管服务时,用的就是这项技术。这项技术除了访问托管服务的终端节点服务(Endpoint Service),还可以连接其他亚马逊云科技账户的 VPC 终端节点服务, 甚至以同样的方式支持 Marketplace 合作伙伴服务。

基于 Amazon PrivateLink,对于共享 VPC 来说, 只需要使用网络负载均衡(NLB)创建 PrivateLink 终端节点服务,并后端集成合适的目标组,就可以提供服务。当然,为了实现高可用和低延迟,网络负载均衡器的目标实例分布在至少两个可用区中。

这样,Amazon PrivateLink 流量不通过互联网,通过 VPC 终端节点,使用私有 IP 地址和安全组就可以私密地访问其他 VPC 的服务,就像直接托管在自身 VPC 中一样。因此,相对于别的方式,Amazon PrivateLink 更易于使用和管理,无需将公共 IP 列入白名单,也无需管理互联网网关、NAT 网关。这样 VPC 之间既建立了安全的连接,也不需要做过多的细粒度的访问控制。

利用 TGW 构建中转 HUB VPC,统一管控 PrivateLink 连接

除了通过本 VPC 中的终端节点直接访问亚马逊云科技的托管服务和其他 VPC 终端节点服务,还可以借助 TGW 通过共享 VPC 中的终端节点访问这些服务,可以达到统一管控的目的。

如上图所示,左侧的架构图中,Amazon EC2 中利用本 VPC 中创建的接口终端节点来访问亚马逊云科技专属 VPC 中的托管服务诸如 Amazon SQS,Amazon S3 等,还可以类似地访问其他 VPC 中创建的终端节点服务。而右侧的图中,通过在共享的 HUB VPC 中建立终端节点来统一完成对外部托管服务的私密访问,这样可以避免在每一个 VPC 中创建单独的 VPC 终端节点。

结论和总结

当一个 VPC 中的应用依赖于其他 VPC 中的应用时,可以考虑多种交互方式,例如:

  • VPC 对等连接和 TGW 可以在 VPC 之间建立网络第 3 层的 IP 连接,但是需要保证 CIDR 不冲突。这两种方式中,TGW 让整个网络拓扑更加简单,更具有可扩展性。
  • VPC 对等连接和 TGW 会使得相互连接的 VPC 可以相互访问,甚至可以直接连接到别的 VPC 的 EC2 实例,因此可能需要考虑非常细粒度的网络管控。
  • 当我们需要多个消费者 VPC 单向访问服务提供商的 VPC 中的特定服务或实例集时,可以使用 Amazon PrivateLink。PrivateLink 建立在网络第 4 层的传输层,只有消费者 VPC 中的客户端才能发起与服务提供者 VPC 中服务的连接,而且,也不需要考虑 VPC 中的 IP 地址冲突 。

在实际应用中,需要综合考虑这些技术的应用,以满足不同的场景。例如,Amazon PrivateLink 处理基于 API 的客户端-服务器连接,VPC 对等连接处理用于处理直接连接要求,而 Transit Gateway 可以简化 VPC 的网络拓扑,并且还可以和边缘端进行连接。我们还可以借助 Transit Gateway 构建中转 Hub VPC 来统一管控 PrivateLink。实际中除了这些因素,还需要综合考虑网络带宽,成本等的因素,我们这里不再详谈。

参考链接

Amazon VPC: VPC peering

https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html

Amazon VPC: Amazon Transit Gateway

https://docs.aws.amazon.com/vpc/latest/peering/vpc-pg.pdf

Building a Scalable and Secure Multi-VPC Amazon Network Infrastructure

https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/welcome.html

本篇作者

张亮

亚马逊云科技解决方案架构师,有近 17 年的 IT 从业经验,曾就职于 DXC,Misys 等公司。在多个行业的企业应用开发、架构设计及建设方面有丰富的实践经验。目前主要负责合作伙伴的架构咨询和方案设计,致力于亚马逊云科技云服务在国内的应用及推广。