VPC 全称是 Virtual Private Cloud,翻译成中文是虚拟私有云。但是在有些场合也被翻译成私有网络或者专有网络等。这里其实就有些让人迷惑,VPC 究竟是指云还是网络?答案是,VPC 即是一种云,也是一种网络模式,不过应该从服务和技术的角度分别来看。

虚拟私有云

首先从服务的角度来看,VPC 指的是一种云(Cloud),这与它的字面意思相符。**对于基础架构服务(IaaS),云就是指资源池。你或许听过公有云(Public Cloud),私有云(Private Cloud),混合云(Hybrid Cloud)。不过,VPC 不属于这三种云中任一种。这是一种运行在公有云上,将一部分公有云资源为某个用户隔离出来,给这个用户私有使用的资源的集合。**VPC 是这么一种云,它由公有云管理,运行在公共资源上,但是保证每个用户之间的资源是隔离,用户在使用的时候不受其他用户的影响,感觉像是在使用自己的私有云一样。

从这种意义上看,VPC 不是网络,我们可以对比 VPC 和它一个字面上相近的概念:VPN(Virtual Private Network)。VPN 在公共的网络资源上虚拟隔离出一个个用户网络,例如 IPsec VPN 可以是在互联网上构建连接用户私有网络的隧道,MPLS VPN 更是直接在运营商的 PE 设备上划分隔离的 VRF 给不同的用户。从提供服务的角度来,说如果 VPC 指的只是网络的话,那它跟 VPN 的概念是重复的。所以,从公有云所提供的服务来说,VPC 应该理解成,向用户提供的隔离资源的集合。

VPC 最早是由 AWS 在 2009 年提出[1],不过 VPC 的一些组成元素在其提出之前就已经存在。VPC 只是将这些元素以私有云的视角重新包装了一下。在 VPC 之后,云主机只能使用 VPC 内部的对应的元素。从这个角度看,VPC 更像是公有云服务商以打包的形式提供服务。

用户可以在公有云上创建一个或者多个 VPC,每个部门一个 VPC。对于需要连通的部门创建 VPC 连接。

img
img

同时,用户也可以通过 VPN 将自己内部的数据中心与公有云上的 VPC 连接,构成混合云。

不论哪种用例,VPC 都以更加直观形象让用户来设计如何在公有云上存放自己的数据。

VPC 硬件租用模式

VPC 硬件租用模式(Hardware Tenancy)本身也是公有云提供的一种服务模式。VPC 的硬件租用模式有两种,一种是共享(shared),一种是专属(dedicated)。

  • 共享是指 VPC 中的虚拟机运行在共享的硬件资源上,不同 VPC 中的虚拟机通过 VPC 进行隔离。
  • 专属是指 VPC 中的虚拟机运行在专属的硬件资源上,不同 VPC 中的虚拟机在物理上就是隔离的,同时 VPC 帮助实现网络上的隔离。
    • 专属模式相当于用户直接向公有云服务商租用物理主机。
    • 专属模式适合那些对于数据安全比较敏感的用户,不过这些物理主机还是由公有云服务商管理。

不论是共享模式还是专属模式,VPC 都运行在公有云资源上,由公有云服务商管理。

专有网络

从技术角度来看,VPC 是用户专属的一个二层网络。

经典网络 VS VPC

AWS 的网络产品,在 VPC 之前称为 EC2-Classic。去年的一个热点文章《关于阿里云的经典网络问题》说的就是这两种网络模式:Classic 和 VPC。他们之间最核心的区别是:经典网络提供的是多用户共享的网络,而 VPC 提供的是用户专属的网络。

这里的网络就是指二层网络,经典网络模型本身有很多问题,其中最大的问题就是安全问题。除非加了特定的防火墙规则去拦截,二层网络内的所有设备默认是可以通信的。这就好比大家都挤在一个房间里,彼此的隐私很难保障一样。稍有不慎,云主机就可能被同网络的其他用户恶意攻击。

VPC 能够为每个用户一个专属独立的二层网络。这样相当于给每个用户分了个房间,用户的隐私更容易得到保障。就算有恶意攻击,一般也要走到网关或者 VPN 设备,在这些集中的设备上,网络流量更可控。

由于每个用户都有专属的二层网络,那说明 VPC 模式下的可用二层网络的数量是远超经典模式的。虽然各家都没有公布自己的实现细节,但是这里有点类似 VXLAN 和 VLAN 的关系。VXLAN 可以有 1600 万个二层网络,VLAN 只有 4000 多个二层网络。公有云与私有云的区别在于用户数量巨大。如果采用 VLAN,每个用户一个二层网络,那最多只能带 4000 多个用户,公有云许多用户还是只有 1-2 个云主机那种,那必然不能满足公有云的需求,所以在早期的经典网络模式下,不得不让多个用户挤在一个网络里面。而如果采用 VXLAN 之类的技术,则可以保证在一个 region 里面为 1600 万个用户每人分到一个二层网络。

因为 VPC 是一个用户专属的网络,用户可以任意定义 VPC 内云主机的 IP 地址。二层隔离了,IP 地址想怎么玩就怎么玩。而在经典网络模式下,大家挤在一个二层网络里面,IP 地址首先要保证不要重合,这对用户和服务商来说都不是一件心情愉快的事情。

VPC 的网络 Overlay

从 AWS 公布的资料[2] 看,VPC 的数据封装与 VXLAN 这类网络 Overlay 技术也很像。从下图可以看出,桔色的 VPC 中,10.0.0.2 发往 10.0.0.3 的网络数据,最终被封装成主机之间的通信报文。

原始的二层帧,被 VPC 标签封装,之后封装在另一个 IP 报文里面。这与 VXLAN 的封装方式可以说是一模一样。**不过需要澄清的是,AWS 在 2010 年就已经开始应用 VPC,而 VXLAN 标准是 2014 年[3]才终稿。**AWS 的 VPC 或许和 VXLAN 不一样,但是按照 VXLAN 理解 VPC 的 overlay 会更容易些。

VPC 使用网络 Overlay 之后,可以构建一个 L3 之上的 L2。这样一个 VPC 内的虚机,可以任意的在数据中心分布。实际中云主机肯定不是任意分布的,会有一些主机的调度优化算法,但是至少,网络不会成为限制云主机部署的因素。举个反例,如果使用 VLAN,虚机必须部署在支持相应 VLAN 的设备上,哪怕这个设备已经接近饱和,而其他的设备却是空置的。如下图,因为左边的机架不支持相应的网络,对应的云主机只能往右边的机架塞,直到塞满。而同时,左边的机架负载还不到 50%。

Overlay 使得 VPC 不再受网络硬件的限制,VPC 内的云主机可以部署在整个机房。

VPC 与 SDN

AWS 在 2017 年提出,VPC 是构建在软件(代码)之上,VPC 就是 SDN[4]。我们前面说过,VPC 是一个二层网络,是一个构建在 L3 之上的 L2 Overlay 网络。这里说 VPC 就是 SDN,实际上是指,VPC 受 SDN 所控制。AWS 的 VPC 依靠一个叫 Mapping Service 的组件工作。当虚机之间要通信的时候,请求先发到 Mapping Service,再由它找到目的虚机对应的信息(例如目的虚机所在的主机 IP 地址),Mapping Service 用对应的信息,封装成 Overlay 数据(类似于封装成 VXLAN 数据),再进行传输。

如果是一个三层通信,传统上是要发到网关,由网关转发到目的虚机。而对于 AWS 的 VPC,Mapping Service 同样也会完成三层通信的信息查找,数据封装。这样连路由器都省了。

这里的 Mapping Service,与 SDN 控制器的作用可以说是一样的。SDN 控制器掌握了所有的网络信息,当需要进行二层,三层通信时,SDN 控制器会根据网络数据包下发 OpenFlow 流表,使得虚机之间直接通信。

如果说 Mapping Service 是 SDN 控制器,那么更具体点,它还是一个分布式 SDN 控制器,因为每个主机上都有一个 Mapping Service 的缓存。通过这种分布式,可以实现高速运算处理。

img
img

VPC 相关的网络资源

VPC 虽然指的是专有网络,但是跟网络配套的资源有很多,这些网络资源都是以 VPC 为单位来划分。也就是说,定义在一个 VPC 内的网络资源,只能被这个 VPC 内的虚机所使用。这在前面讲服务的时候提到过。这些资源[5]可以概括如下:

img
img

Security Group, Subnet, Network ACL, Routing Table, Router,这些都是老生常谈了。以 VPC 为单位来划分这些资源,可以更好的突出私有的感觉。但是实际上这些资源大多是虚拟的,每个用户占有一份也不会增加公有云运营商的成本。

需要注意的是,VPC 尽管是一个二层网络,但是 AWS 仍然是通过路由器连接一个 VPC 下的两个 Subnet。

VPC Edge device

前面讲服务的时候说过,VPC 从服务的角度来看是虚拟私有云,表示的公有云运营商提供给用户的隔离资源的集合。它相当于是漂浮在公有云上的孤岛。真正让 VPC 变得强大的是它各式各样的连接技术。AWS 提供了一个 Edge 设备(Blackfoot Edge Device),VPC 通过这个 Edge 设备可以:

  1. 与别的 VPC 相连
  2. 与互联网相连
  3. 与用户的私有云建立 VPN 连接。
  4. 与 AWS 的其他服务建立连接。

这才是公有云服务商在构建 VPC 网络时,真正的竞争力所在。有了这样的 Edge 设备,VPC 不再是孤岛,而是有了连接其他陆地的桥梁。这里的 Edge 设备,可以看成是 VNF,AWS 需要用户在 VPC 内部手动配置路由来引流到这个 Edge 设备。

最后

不论是对用户还是公有云服务商,VPC 都是一个更好的选择。对于用户来说,首先可以任意定义 VPC 内的 IP 地址。其次 VPC 像是一个容器,装载着所有的云主机,同时又与其他的 VPC 隔离。第三,用户还可以用各种连接服务(VPN,NAT 等)将 VPC 与现有的网络连接起来。这样对用户来说,既保证了网络隔离,又能提供按需的网络连通。对公有云服务商来说,VPC 实际上就是 SDN 在公有云的应用。软件可控,Overlay 使得服务商的硬件利用率提高,对硬件厂商的依赖程度降低。在这个基础上,公有云服务商还能够提供更好的网络服务。

参考资料