云计算:云上虚拟网络
2019-03-11 10:03:19什么是虚拟私有网络?
虚拟私有网络(Virtual Private Cloud,简称 VPC),是云计算网络端最重要的概念之一,它是指构建在云上的、相互隔离的、用户可以自主控制的私有网络环境。虚拟私有网络有时也称为专有网络(阿里云)或虚拟网络(Virtual Network 或 VNet,Azure 的叫法)。
私有网络就是一张属于你自己的内网。内网之内的服务器和设备,可以比较自由地互相通信,与外界默认是隔离的。如果外部互联网,或者其他虚拟网络需要连接,则需要额外的配置。
所以说,虚拟私有网络,就是云上的保护网,能够有效地保护网内的各种设施。有的时候,可能还要同时创建多个虚拟网络,让它们各司其职,实现更精细的隔离。
虚拟私有网络麻雀虽小,但五脏俱全。在传统数据中心里,经典网络架构中的概念和组件,在虚拟网络中你几乎都能找到对应。这里比较重要的一些概念包括:
- 网段,私有网络的内部 IP 区段,通常用 CIDR 形式来表达,如 192.168.0.0/16。
- 子网,私有网络的下级网络结构,一个私有网络可以划分多个子网,这和通常意义上的子网也是对应和一致的。阿里云中把子网形象地称为“交换机”。
- 路由表,用于定义私有网络内流量的路由规则,决定着数据包的“下一跳”去向何方。每个子网都必须有一张关联的路由表,通常情况下,系统会自动帮你创建一个默认的路由表。
- 网关,是对进出私有网络的流量进行把守和分发的重要节点,根据用途的不同,有多种类型,后面我们还会讲到。
- 安全组,私有网络里虚拟机进出流量的通行或拦截规则,可以起到虚拟机网络防火墙的作用。
阿里云VPC体验
- 首先,来到阿里云的专有网络管理控制台,选择新建一个 VPC,这里的网段我们选择 192.168.0.0/16 。
注意:VPC 属于局域网,按照 RFC 规范,能够使用的 IPv4 区段必须为 192.168.0.0/16、172.16.0.0/12、10.0.0.0/8 这三个或它们的子集。 - 至少要创建一个子网,也就是交换机。 我们选择一个子 IP 段 192.168.0.0/24,并且设置所属可用区为“可用区 D”
- 我们再来创建另外一个交换机,网段设置为 192.168.1.0/24。这里的关键在于,我们可以让第二个交换机位于另外一个可用区 E。这就说明,我们可以建立跨可用区,也就是跨同区域内不同数据中心的私有网络。
创建 VPC 其实并不困难。这里的关键还是要规划好 VPC 和各子网的网段,需要让它们既有足够的地址空间以供资源拓展,又不要安排得范围过大,以免和其他 VPC 或公司内部网络产生地址冲突,为后续的网间互联带来不必要的麻烦。
如果在没有 VPC 的情况下直接创建虚拟机,公有云一般都会为你自动生成 VPC。在生产环境中,强烈地建议不要让系统自动建立 VPC,而是像上面的做法,先自行建立好 VPC,配置好子网和网段等重要参数,然后再创建云虚拟机“入住”。因为这样,会事先让自己有一个明确的网络规划,对整个 VPC 的把控和理解也会更强。
私有网络中的虚拟机
我们回到虚拟机的视角。当一个虚拟网络已经存在时,我们就可以将新创建的虚拟机放置在这个虚拟网络中。
**那么,这个所谓的“放置”是怎么真正产生的呢?虚拟机和专有网络的连接点是哪里呢? **
答案就在于虚拟机的网卡,又称弹性网卡(Elastic Network Interface, 简称 ENI)。虚拟机的网卡一方面是和虚拟机的本体进行绑定,另一方面则嵌入某个私有网络的子网,也会拥有至少一个私网 IP。
云上的网卡,之所以被称为“弹性”网卡,是因为它具备以下特征:
- 一个虚拟机可以绑定多块网卡,有主网卡和辅助网卡之分;
- 一块网卡隶属于一个子网,可以配置同一子网内的多个私有 IP;
- 辅助网卡可以动态解绑,还能够绑定到另一台虚拟机上。
这再次体现了云计算的解耦特征,在某些场景下是非常有用的。比如,有一台服务线上流量的机器,而且线上流量导向的是它的辅助网卡,那么当这台机器因故无法正常工作时,在排查问题的同时可以考虑这样一个应急的办法:将这台机器的辅助网卡迅速解绑,并重新绑定到待命的备用机上。这样就能够比较快地先恢复对外服务。
创建虚拟机的时候,向导会询问,这台虚拟机属于哪个 VPC,以及 VPC 下的哪个子网?现在就理解了,这个选项的实质性结果,就是新虚拟机自动生成的主网卡,接入了所选 VPC 的所选子网。
公网IP
在绝大多数的云上,创建虚拟机时都会有一个选项,问你“是否同时为虚拟机分配一个公网 IP 地址”。如果选择“是”,这样机器启动后,就会拥有一个自动分配的公网地址,便于从自己的电脑连接到这个实例。这在很多时候都是最方便的选择。
但对于生产环境,尽量不要使用和依赖这个自动生成的公有 IP。因为它本质上是一个从公有云的 IP 池中临时租用给你的 IP。如果你的机器关闭或重启,下次获得的 IP 可能就完全不同了。
这时,我们真正应该用到的是弹性 IP(Elastic IP),有些云称为 eIP。弹性 IP 一旦生成,它所对应的 IP 是固定、不会变化的,而且完全属于你所有。这非常适合需要稳定 IP 的生产环境。
请不要被它的名字迷惑,它所谓的弹性,其实是指可以非常自由地解绑和再次绑定到任意目标。本质上是买下了这个 IP 的所有权,将这个 IP 赋予谁,是你的权利,而且你还可以动态按需切换。
购买虚拟机是如果选择的不自动生成公有 IP ,这时它只有私有 IP,我们怎么连接它呢?我们可以创建一个弹性 IP,然后绑定到这台实例。
网关
在阿里云上,如果一台云虚拟机没有被赋予公有 IP,默认情况下它就失去了访问外网的能力,只能进行内网通信,这在很多时候,的确是我们想要的安全控制。但也有一些情况,我们希望内网的机器和外界并不完全隔离,一些互联网流量需要有序地引进来,一些内网机器也需要访问外网。
这就是一个如何在 VPC 上“开口子”的问题了。
这就是网关可以大显身手的场景了,它正是用来统一协调管理私有网络与外部通信的组件。随着各个公有云的发展,云上也延伸出了许多不同形式、解决不同目的的网关产品。
如何允许多台没有公有 IP 的虚拟机访问外网。 这时需要使用到的网关叫做 NAT(Network Address Translation)网关,是一种常见的用来给 VPC 开口的手段。操作步骤:
- 事先把弹性 IP 从刚才那台虚拟机解绑,这下它现在又无法访问外网了;
- 创建一个 NAT 网关实例,并选择它对应的 VPC,然后把解绑的弹性 IP绑定到 NAT 网关上;
- 添加的 SNAT 条目。SNAT 是“源地址转换”的意思,它非常适合让私有网络的主机共享某个公网 IP 地址接入 Internet。注意,这是一种从内向外的、单向的连通形式。
上面我们添加了一个 SNAT 条目,让整个交换机“test-vpc1-vsw2”下的网段都共享一个出口公网 IP。需要注意,虚拟机要是位于这个网段内的。
- 接着再回到这台虚拟机内,我们通过 curl 命令,尝试对外访问。
还有一种网关被称为 VPN 网关,也可以帮助外界连接到 VPC,它本质上是基于 VPN 技术。由于 VPN 能够基于互联网提供私有加密的通信,因此非常适合用来从任意其他私有设施安全地连接到 VPC。这些私有设施可以小到一台个人电脑或手机终端,也可以大到本地的数据中心,还可以是另一个 VPC。
多网连接有哪些方式?
前面主要是从单个 VPC 的角度来进行讨论的,那么最后再来讨论一下多 VPC 的场景。**公有云上是允许同时使用多个 VPC 的,这样可以构建更加复杂的网络架构,实现模块隔离和跨区域扩展等高级需求。 **
如果是云端 VPC 和 VPC 的互联,首先推荐的就是对等连接(VPC Peering)的方式。它能够在不添加额外设备的情况下,让两个 VPC 无缝地互联起来,而且操作非常简单,对等连接甚至还能够支持跨区域的私有网络互联。当然,对等连接的实施前提,是这两个 VPC 的网段没有交集,不存在冲突。
**这里你需要注意对等连接的一个特点,就是它不具备传递性。**也就是说,如果 A 和 B 建立了对等连接,B 和 C 建立了对等连接,那么 A 和 C 是不相通的。这是对等连接的一个局限。
如果真的需要多个 VPC 间任意路径的互联互通,那么可以考虑使用比对等连接更为复杂和强大的专用网络设施,比如 AWS 的 Transit Gateway,和阿里云的云企业网,它们能够帮助搭建更为复杂的多 VPC 网络拓扑结构,也允许进行更精细的路由设置。
有云中的私有网络,还可以和企业本地数据中心进行互联,形成混合云架构。可以先考虑使用 VPN 这种轻量的方式,通过公网线路为两边建立连接渠道。但如果应用场景要求保证延迟和带宽,一般就需要专线进行连接了。
总结
从某种程度上来说,虚拟私有网络的“仿真度”非常高,在软件定义网络(SDN)技术的加持下,甚至比物理网络还要更加灵活高效,更易于扩展。所以,通过合理的规划和设置,云端的网络基础设施能够让我们拥有一个健壮而强大的网络拓扑结构,对于流量的引导和控制,也完全能够做到因势利导、开合有度。
思考
- 虚拟私有网络的内部,两机互联的带宽有多大呢?可能受到哪些因素的影响?
- 本文通过 NAT 网关实现了流量“出网”的目的。那么,如果是反过来需要引导外界流量进入 VPC,应该使用什么方式呢?