通过Microsoft Azure服务设计网络架构的经验分享
作者 王枫 发布于 2014年4月8日
本文从产品设计和架构角度分享了Microsoft Azure网络服务方面的使用经验,希望你在阅读本文之后能够了解这些服务之间,从而更好地设计你的架构。
Microsoft Azure的网络架构特别针对企业私有云和混合云进行了设计,其中包含三个常用的服务:
- 虚拟网络(Virtual Network):连接本地网络与云端基础设施
- 流量管理器(Traffic Manager):将用户流量分配到不同的数据中心
- 名称解析服务(DNS):使用内部主机名作为云服务的解析
下面,我将着重介绍使用这三个服务时需要注意的地方,以及使用Microsoft Azure网络服务时需要注意的一些其他方面,比如站点对站点VPN的安全设置,私有IP地址和共有IP地址的使用,BGP网络的使用,网络延迟问题如何处理等。
阅前须知
Microsoft Azure使用了一些特有的术语,其中有两个需要特别注意:
VIP(虚拟IP地址):Azure网络上的一个公有IP地址,用来从外网连接Azure虚拟网络中的虚拟机。此VIP并非网络负载平衡NLB解决方案中的虚拟IP地址。
DIP(直接IP):DHCP分配的实际IP地址,用来给虚拟网络中的虚拟机使用。此DIP并非NLB DIP。
虚拟网络(Virtual Network)
虚拟网络可用于创建和管理IPv4地址空间。你可以在本地内网和虚拟网络之间建立VPN安全连接,也可以通过网络对接的方式将云端应用连接到本地。
虚拟网络可用于在虚拟机(Virtual Machine)之间建立连接。需要注意的是,你需要先创建好虚拟网络,然后在创建虚拟机的时候将其关联至已经创建好的虚拟网络。同理,虚拟网络也可以在云服务(Cloud Service)之间建立连接,这样做的好处是可以让不同云服务下的虚拟机之间通过私有IPv4地址互相通信。
还有一点需要注意的是,你在首次创建虚拟网络之前必须先创建地缘组(Affinity Group),因为没有关联地缘组的虚拟网络是未经过优化的。地缘组是Microsoft Azure用于定位服务的逻辑分组,比如“中国东部区域”。如果我们未来在同一地缘组内创建存储服务,那么分组内其他云服务使用该存储服务的性能更优化。
当你创建一个Azure虚拟网络时,你需要使用私有IP寻址方案,而不能使用共有IP地址。另外,你需要确认你的私有网络中没有占用这些IP,也不能有重叠的IP地址。
Azure在数据中心的出口是使用BGP网路,虚拟网络目前不支持内部使用网关NLB。如果你想实现高可用,只能依赖于其它方法或硬件,例如硬件备份的方式,当主VPN网关失效之后启用备份服务器(如Windows Server 2012路由与远程访问服务RRAS于集群之上)。
当你创建一个Azure虚拟网络时,请求IP地址的集合代表所有汇总的子网络。虽然你可以汇总网络,但这些子网之间没有路由,也没有办法在这些子网中间执行访问控制。
在Azure虚拟网络中,虚拟机默认使用DHCP获取IP地址。你可以给虚拟机配置静态IP,但必须使用PowerShell创建VM。如果不使用DHCP的话,Azure虚拟网络系统会认为设备处于未知的状态,从而导致你无法连接虚拟机。不过,尽管虚拟机的IP地址是使用DHCP获取的,但他们在运行过程中的IP地址是不变的——除非你停止(已取消分配)或重新创建。如果你是用Management Portal来"关闭"虚拟机,那计费会停止并会显示"已取消分配"(见下图),使用中的IP会释放。但如果你通过连接虚拟机的操作系统上来关机,则不会停止计费也不会释放IP。
在Azure虚拟网络中有多种方式连接虚拟机。默认,每个虚拟机都有一个RDP端口,并且开启了进入端口。注意,Azure不使用默认的RDP端口3389。如果你不想让你的虚拟机暴露在外面,你也可以选择禁用端口或更改到其它的端口。另外一种连接虚拟机的方式是通过站点到站点VPN从企业内部网络连接到Azure虚拟网络,这种方式和在分支机构和总公司使用站点到站点VPN下来进行RDP连接是一样的,后面会介绍这种方式的用法。
如果你不在办公网络,或者你不想通过VPN连接到办公网络,你可以使用“点到站点”的方式连接虚拟机,这种连接相当于是SSTP远程访问VPN,比直接用RDP连接Azure虚拟网络更安全。
流量管理器(Traffic Manager)
流量管理器为Microsoft Azure的另一个重要网络服务。通过使用流量管理器,你可以将用户分配到Azure数据中心的“最优”位置,确保云应用程序的性能、可用性及弹性。
流量管理器使用智能策略引擎处理DNS域名请求。你需要在Management Portal创建配置以使用流量管理器,需要配置的项包括:
- 属性:包括你所创建的域名前缀,该前缀在Management Portal中可见。
- 定义:包括策略设置和属性的检测设置。
- 策略:用来指定负载均衡方法和终端。
- 监视器:用来规定超时、协议、端口和相关路径。
流量管理器提供了三个负载均衡方法:性能、容错、或循环:
- 性能:根据网络延时,该方法将流量引向最近的数据中心。
- 循环:该方法将流量均等地分配到各个数据中心。
- 容错:如果主服务出错,该方法将流量引向备份服务或数据中心。
目前流量管理器可支持IPv6,但不支持sticky sessions,在变更策略配置时不会有服务中断。在服务和应用上的使用也必须多注意后端存储配置的一致性。流量管理器适合在网站和不会常变动静态内容的服务等场景下使用。
DNS域名解析
Microsoft Azure提供域名解析服务,但该服务仅可解析同一云服务下的实例名。如,Service C下的Virtual Machine A和Virtual Machine B之间可以直接通过各自的完全域名(FQDN)互相访问而无需在外部配置DNS服务器。如果你的虚拟机实例运行在不同的云服务下,那么你需要使用外部的DNS解决方案,如公用DNS服务器、ISP的DNS服务器、或者公司网络的DNS服务器。
如果你想解析其它虚拟机器的名字,如互连网或者办公网络里的机器,你可以向Azure虚拟网络中添加DNS服务器。就像在DHCP选项中添加DNS服务器地址一样。给虚拟机分配的DNS服务器地址可以是Azure虚拟网络中DNS服务器IP地址,也可以是互连网上的DNS服务器地址。如果在Azure虚拟网络中放置了一个域控制器,也必须确保让控制器也配置了Azure上的DNS服务器。
站点对站点VPN
该方案可以让企业快速安全地在Microsoft Azure上部署虚拟机,其应用前景广阔,可用于开发和测试:你可以设置从本地工作站访问虚拟机来验证和测试程序,资源快速实例化可帮迅速验证待上线的程序以及其它需要在企业内部和公有云上作安全信息传递的服务。
内部网络和Azure虚拟网络之间的站点到站点VPN使用IPSec隧道模式。注意,Azure只支持特定的本地VPN网关设备。如果没有支持的硬件设备,你也可以使用Windows Server 2012路由与远程访问服务(RRAS)去创建一个站点到站点VPN连接。另外, Azure支持用配置脚本去配置你的内部VPN网关。
如果你希望使用Microsoft Azure网关建立站点对站点VPN,则本地VPN设备必须支持IKE v1或者IKE v2。需要注意的是,Microsoft Azure在使用IKE v1时只支持静态路由功能,要使用动态路由功能必须使用IKE v2。
网络延迟对混合型应用的影响
建立混合型应用程序时,无论是现有应用的移植还是创建全新应用服务,了解网络延迟对其潜在的影响十分必要。当Azure开始探索将应用移植到混合型模式时,我们很快便会意识到应用程序或许不能在混合模式下做出完美响应。
以经典的双层应用程序为例,其原始结构,包括用户、网页服务器和数据库服务器之间的响应时间均为几毫秒。如果我们将网页服务器转移到Microsoft Azure,但数据库服务还在本地,则会给拓扑结构带来超过30毫秒的延迟,而此前的延迟为3毫秒!这个延迟在进行众多操作的同时传输大量数据的情况下尤其严重。我们实施过的一些应用在单独页面点击会发出数百个冗余调用,像这种情况就必须要重新设计。
延迟有时还可能是“最后一公里”的影响。比如我们的程序在数据中心里测试的结果是延迟1毫秒,但当将网络前台移植到Microsoft Azure时,该延迟就变为30毫秒。所以,广泛的测试是必要的。
如果需要新的混合云应用服务,我们在设计时就要考虑到延迟。我们也可以使用Microsoft Azure Cache以及CDN服务,尽量使数据更加接近用户或本地服务器。如果需要移植软件,我们可以通过使用软件网络模拟器来提前了解延迟。虽然很难准确判断延迟影响应用程序的方式,但我们应该对此类问题在设计架构之初就要多加留意。
总结
很多企业已经意识到云计算所能带来的潜力。然而,有些企业倾向于投资内部私有云基础架构。许多企业这样做主要出于安全考虑,认为将公司所有数据转移到公有云服务提供商的行为存在隐患。私有云确实能够充分利用云计算主要功能,但对于要求敏捷性、灵活性的企业来说,所要求的功能远不止这些。在这种环境下,混合型云计算将迎来巨大的投资价值。如今,企业可以决定哪些数据可以发布到公有云服务提供商,哪些数据留在本地。混合型云计算让企业从两个方面均得到最大收益:“云计算”和“本地资源”。
在过去传统的数据中心,企业如要处理日益增加的需求,就必须在数据中心添加更多的服务器,购买硬件后还要在上面部署新的操作系统和应用程序,当中需要经过预算、硬件采购、等待供应商交货的漫长周期。而在Microsoft Azure平台,企业现在可以轻松地扩展内部部署的数据中心到云端,而Microsoft Azure虚拟网络就是其中的关键所在。
感谢马国耀对本文的审校。
本文转载自:http://www.infoq.com/cn/articles/azure-networking-tips