前言
网络是最重要的云资源之一。不同的云厂商提供的网络服务虽然有一些细节差别,但是他们整体上的分类基本是一致的。云厂商针对不同的网络应用场景设计了不同的网络服务,从而使得用户可以根据自己的需求选择最合适的网络服务。
AutoMQ[11] 是与 Apache Kafka 100% 兼容的新一代云原生事件流平台。AutoMQ 充分利用云的弹性和具有规模化技术、成本红利的云服务来构建自身,为用户提供低成本、高性能、弹性的 Kafka 服务。因此,充分了解云的知识对我们来说也同样十分重要。今天,将和大家分享的是云上各种网络方案的原理及其应用场景。
VPC 及相关概念
在我们讨论具体方案之前,需要先理解一些与云网络相关的概念。
经典网络(Classic Network) : 早期云上经典网络中云上租户机器处于云厂商内网中并共享资源池,私有IP从池中进行的随机分配。同时由于处于同一内网中,机器之间的网络能够互相访问互相联通,隔离性不足,为了保障机器的安全,需要配置机器的安全组以控制准入规则,而文献[1]中安全事故案例就是因为安全组配置错误导致只开启内网访问的机器受到阿里云内网其他机器的攻击。而另一方面对于大型集群,新增节点、删除节点都需要编辑整个集群所有节点的安全组来维护准入规则保证其隔离性,非常繁琐且容易遗漏造成安全问题[1]。
VPC(Virtual Private Cloud) : VPC是托管在公有云内的安全的、独立的虚拟私有云[2]。通俗的讲,私有网络就是一张属于你自己的内网。在公有云的多租户环境中,VPC之间网络环境相互隔离默认无法互相访问,VPC内部的网络相互之间互联互通。且用户能够自定义VPC的内网网段(即使与其他租户的网段重复也不影响),并能通过虚拟交换机对网络划分进行网络规划,VPC提供了良好的隔离性和自由度。因此基于公有云VPC构建云上服务就像在私有云中一样。而云厂商也允许用户创建多个VPC以构建更复杂的网络架构,实现模块的隔离性以及跨区域的容灾等需求。
当前,云服务供应商默认已不再使用经典网络,而是采用VPC(私有虚拟云)。因此,我们在云端创建的设备和服务基本都是连接在VPC上。也因此,当我们讨论云上的网络连接方案时,实质上我们是在探讨如何从VPC的外部访问到VPC内部的服务。
网络方案应用场景
由于VPC是一个隔离的内网环境,VPC内的服务默认只能与VPC内的其他服务通信。而VPC内的服务可能有以下通信需求 场景 :
VPC内的服务需要访问公网
VPC内的服务需要暴露到公网访问
企业的服务处于同一云厂商的不同VPC,服务需要跨VPC(同区域或跨区域)进行单向通信
企业的服务处于同一云厂商的不同VPC,服务需要跨VPC(同区域或跨区域)进行双向通信
企业中由于业务需要,不同的服务可能处于包含不同的公有云、私有云以及本地数据中心的混合云中[3],而这些服务中的部分需要消费另外一部分服务
连通方案
云上网络方案对比
我们对所有方案进行一个对比,对比结果如下表所示。由于服务或设备在不同地区的收费不一,因此价格参考只列出了一个地区的价格,更详细的服务报价请参考云厂商官方网站。

公网 IP
在不考虑安全性风险的情况下,最简单的方案就是为VPC内的服务所在机器分配公网IP,这样服务既能访问公网,也能够被公网上的其他机器访问,但也因此增加了 安全性风险 ,因此用户应根据需要添加认证及数据加密手段。同时由于通过公网进行通信,网络的 延迟 相较于内网访问大大增加,且存在额外的 流量费用 成本。当然用户也可以选择按固定带宽收费,但费用也与带宽的大小挂钩。
VPN 网关
为了打通本地数据中心与云上VPC的网络,可以采用云厂商提供的VPN网关服务。在目标VPC中部署VPN网关,使得VPN能访问VPC中的服务,并通过VPN的加密隧道提供给本地数据中心安全的访问通道。VPN客户端与VPN网关建立安全连接后,网络流量将通过VPN网关转发到VPC内的服务,从而实现网络的打通。相对于公网更安全但是配置更为复杂。同时流量走公网进行通信,因此网络延迟比之内网明显增加[4]。
专线
如果需要保证非公网通信、低延迟、高速的同时打通本地数据中心与VPC的通信。则需要通过运营商或者云厂商的专线服务,在物理上搭建一条本地数据中心到阿里云接入点。专线最大支持 100GBps的带宽,能够很好的支持企业的网络带宽需求,但在物理链路端口的搭建上需要巨额费用,同时端口每月也会产生占用费[5]。
NAT 网关
而若是想要限制VPC单方向的流量访问,则可以采用NAT(网络地址转换)技术,其运行在TCP层。将NAT 网关部署在目标服务的VPC中,目标服务即可与NAT 网关互通,通过SNAT(源网络地址转换),NAT 网关将目标服务的源地址改为NAT 网关的公网地址并临时映射随机端口进行数据转发,使得目标服务能够通过NAT 网关进行公网访问,而由于源端口的随机性和临时性,外部无法通过NAT 网关直接访问目标服务。而采用DNAT(目标网络地址转换)则可以将目标服务映射到固定端口,外部通过NAT网关IP与映射的端口访问NAT 网关,NAT 网关会将数据转发给内网的目标服务从而实现通信。公网NAT 网关通过 DNAT转换,能够让 VPC内的多个服务通过一个公网 IP的不同端口向外提供服务,能够大大减少公网 IP的数量需求。云上NAT 网关支持配置DNAT和SNAT规则进行支持。需要注意的是,NAT网关通过端口进行映射,因此通过NAT网关的并发连接数有上限[6]。
如下图所示,NAT网关与目标服务在同一个 VPC中,且 NAT 网关绑定了公网 IP。而目标服务的虚拟交换机配置了路由使得私网外的流量都从 NAT 网关出去,目标服务发出的数据包经过 NAT网关,网关为目标服务建立随机的端口映射 5678,并将源地址源端口修改为公网地址 1.0.0.2 以及映射端口 5678去访问外部服务。当外部服务回复数据时则根据映射端口 5678 找到目标服务,并将数据包的目标地址和端口改为10.0.0.2和 1234。而在 DNAT中与这类似,区别是映射规则是用户配置的,只能由外部发起连接。

Private Link
PrivateLink(私网连接)与NAT类似,都是通过请求的转发来实现单方向的通信,能够一定程度上保证安全性,但不同的是PrivateLink是在内网环境进行通信的, 只有同一云厂商的同一区域的VPC 才能够建立,无法跨区域通信。PrivateLink需要LoadBalancer(负载均衡器简称LB)在目标VPC中将目标服务加入到LB的后端服务器配置中以对外提供服务,从而创建EndpointNodeService(终端节点服务),其他VPC可以创建EndpointNode(终端节点)来访问EndpointNodeService。不过EndpointNode本身存在实例费用以及访问服务产生的流量费用。PrivateLink对外暴露的是服务的私有域名(随机),因此不会因为VPC的网段重叠导致路由冲突[7]。
如下图所示,在VPC1中的两个可用区部署LB并将目标服务配置为LB的后端服务器,随后创建终端节点服务与一个或多个LB关联(多可用区部署可以提高终端节点服务的可用性)。而对端VPC2需要与VPC1同区域才能建立终端节点,终端节点本身需要绑定VPC的子网中,要求可用区为终端节点服务的LB所在的可用区的子集,由于VPC内互通,因此建立终端节点后VPC2中的机器就能够通过私有域名访问终端节点从而访问终端节点服务后面的目标服务。

VPC Peering
在同一云厂商的VPC之间 ,可以通过对等连接建立VPC之间的通信,也是最为推荐的做法。对等连接可以跨可用区、跨区域甚至跨账号,而根据传输距离网络与云厂商的差异流量的费用也不相同,如阿里云同一区域的VPC对等连接无流量费,而AWS则是同一区域同一可用区的流量免费。对等连接要求VPC的网络无重叠,至少需要保证相互通信的虚拟子网的网络无重叠(部分云支持,如阿里云),从而保证能够正常路由。需要注意,对等连接不具备传递性,即VPC1与VPC2建立对等连接,VPC2与VPC3建立对等连接,VPC1与VPC3是无法进行通信的。而相对较为复杂的是,需要为两个VPC中需要通信的子网配置路由表,对等连接作为下一跳来打通两个VPC[8]。
如下图所示,虽然VPC1与VPC3的网段相同,但是建立对等连接后,通过配置路由表为子网的网段,实现VPC之间子网的通信。而对于网络不冲突的情况,如VPC2与VPC3,则可以采用VPC的网段配置路由规则从而使得两个VPC的任何子网之间都能互相通信。当然也可以只配置需要通信的子网之间的路由规则来实现部分子网的打通。

Transit Gateway
针对VPC Peering仅能支持一对一连接的限制,若需将多个VPC进行网络组合,则需为每对VPC之间以网状建立VPC Peering连接,这相对复杂。如果有k个VPC,那么需要建立k*(k-1)/2个对等连接。由于对等连接本身存在配额限制,如果VPC数量较多,可能会出现配额不足的情况。
为了应对这样的场景,Transit Gateway应运而生[9]。Transit Gateway将网状网络转化为星形网络,各个VPC只需与Transit Gateway建立连接,而Transit Gateway则负责进行路由和转发,实现连接在Transit Gateway上的网络的互通性。同时,Transit Gateway还能连接各种网络资源,例如VPN、Direct Connect Gateway、其他Transit Gateway、SD/WAN等。Transit Gateway属于区域级别的资源,对于跨区域的需求,可以通过Transit Gateway Peering将不同区域的Transit Gateway连接起来。
然而,相比于VPC Peering,Transit Gateway的费用更高,因此在选择使用VPC Peering和Transit Gateway时,需要根据自己的需求和成本进行权衡。值得注意的是, Transit Gateway是AWS上的服务 ,在阿里云上与之相似的服务是云企业网中的Transit Router。
总结
本文对云上的不同网络方案进行了分析与总结。用户在云上部署自己的应用和程序时可以按照自己的实际需求,结合成本、便利性、功能等多个维度选择最适合自己的方案。
参考资料
[1] 科普一下公有云的网络: https://coolshell.me/articles/public-network-working-tutorial.html
[2] 虚拟私有云 (VPC): https://help.aliyun.com/zh/vpc/what-is-vpc
[3] 混合云: https://www.cloudflare.com/zh-cn/learning/cloud/what-is-hybrid-cloud/
[4] VPN网关: https://help.aliyun.com/zh/vpn/product-overview/what-is-vpn-gateway
[5] 专线: https://help.aliyun.com/zh/express-connect/user-guide/what-is-a-physical-connection
[6] NAT网关: https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html
[7] PrivateLink: https://help.aliyun.com/zh/privatelink/getting-started/getting-started-overview
[8] 对等连接: https://help.aliyun.com/zh/vpc/user-guide/overview-6
[9] Transit Gateway: https://network.kpingfan.com/01-%E6%A6%82%E8%BF%B0/06.transit-gateway/
[10] 阿里云 VPC 产品文档: https://help.aliyun.com/zh/vpc/product-overview/what-is-a-vpc
[11] AutoMQ: https://www.automq.com
