深入浅出Hyper-V网络虚拟化(序)

服务器虚拟化已经越来越普及,很多企业也都在尝试着将现有业务转换成虚拟化的方式来运行,即在一个物理服务器上虚拟出多个实例,而每个实例彼此隔离,就好像在使用一台真实主机一样;网络虚拟化也同样如此,在同一条物理链路上虚拟出若干网络环境,且彼此隔离;不光如此,网络虚拟化还打破了传统VLAN以及IP地址分配方面的不便捷性,使用网络虚拟化可以把现有业务直接无缝的托管到IaaS中,而整个过程甚至无需考虑IP地址的重复性,现有应用的访问也不需要做任何修改

 

那么说到网络虚拟化就不得不提到“软件定义网络(SDN)”,这里摘取一段Baidu百科的介绍

【举个不恰当的例子,SDN技术就相当于把每人家里路由器的的管理设置系统和路由器剥离开。以前我们每台路由器都有自己的管理系统,而有了SDN之后,一个管理系统可用在所有品牌的路由器上。如果说网络系统是功能机,系统和硬件出厂时就被捆绑在一起,那么SDN就是Android系统,可以在很多智能手机上安装、升级,同时还能安装更多更强大的手机App(SDN应用层部署)】

由于传统的网络设备(交换机、路由器)的固件是由设备制造商锁定和控制,所以SDN希望将网络控制与物理网络拓扑分离,从而摆脱硬件对网络架构的限制

#######################################################################################

在windows server 2012中就提供了网络虚拟化的支持,而在R2中又得以升华,下图是基于windows server 2012 R2的hyper-v管理器,我以test01和02为例,首先将两台虚机的IP设置成一样

215346847.png

test01的IP为10.10.1.122/16,没有问题

215349476.png

test02使用同样的地址(10.10.1.122/16)后出现了IP冲突的问题,由于在同一个广播域或者同一VLAN内出现了IP重复的情况,所以虚机test02被分配了一个169.254.x.x的IP;显然这种情况下是无法正常使用的

215353382.png

那么如何通过软件定义网络,而不去牵扯硬件设备来实现网络的隔离呢?先来看一下当前的配置环境,下图是当前虚机所绑定的vm network,即虚拟网络TDIv2;环境基于system center 2012 R2 VMM

215359630.png

我们来看一下这个虚拟网络所依赖的逻辑网络资源,同样也叫TDIv2,这个是添加主机时自动捕获到的,也就是平常所说的默认设置;可以看到TDIv2这个逻辑网络勾选了“允许使用网络虚拟化”

215404731.png

再来看一下虚机所连接的vm network “TDIv2”,虚机会借由vm network来与逻辑网络连接,如下图位置;有些朋友可能会被逻辑网络与虚拟网络搞晕了头,实际没那么复杂

215409241.png

那么要实现网络虚拟化的隔离,就要在当前基础上创建新的vm network,如下图所示

215413524.png

我们输入AAA这个名称,另外选择这个即将创建的vm network是基于相同的逻辑网络之上的,即TDIv2

215417889.png

接下来可以看到R2的改进之处,原先是没有隔离选项的,上面的“使用hyper-v网络虚拟化”就是我们要实现的功能,而下面的“no isolation”就是以前那种“1对1”的模式,可以看到下方的描述“使用非隔离模式,每个逻辑网络只能创建一个虚拟网络”

215422481.png

接下来我们暂时不创建子网

215426813.png

在网关这里由于我们还没有配置好网关所以没得可选,在最后我会做简短说明

215431348.png

至此我们的AAA虚拟网络就创建好了

215435744.png

接下来我们把刚才的虚机拿出来一台,给它换个“网卡”,如下图所示,从TDIv2改成AAA

215441155.png

发现报错了~看一看log,哦~原来说我没有子网

215446164.png

那就加个子网呗,如下图所示10.10.0.0/16,子网名称test

215450617.png

再次修改虚机配置,咦?又报错了。。。看看log,哦~光有子网不行,还得有地址池

215455153.png

那就在AAA这个vm network上创建个地址池

215459772.png

输入地址池的名称CA Pool,地址池基于我们刚才创建的子网“test”

215504478.png

键入地址池范围,这里以“10.10.1.100~10.10.1.130”为例

215508336.png

返回到vm network可以看到已经成功的创建了地址池

215512577.png

再一次修改虚机配置,这里可以看到vm subnet这里已经出现了名为“test”的子网了

215518617.png

这次终于成功了呢~

215523436.png

我们如法炮制,再创建一个叫做BBB的vm network,另外也给它一个名为CA Pool的地址池,同样也是10.10.0.0/16的网络地址;这里或许就会有疑问了,一样的IP地址段没关系么?是的,完全没有问题,因为它们是绝对隔离的

215527841.png

我们把另外一台虚机的vm network改成BBB,子网同样也叫test

215533283.png

######################################################################################

下面就回到虚机里看一下情况,test01上的IP通过自动获取已经变为10.10.1.100;同样自动拿到了一个10.10.0.1的网关和192.0.2.253的dhcp服务器地址

215537869.png

test02上也拿到了10.10.1.100的IP和一样的网关以及dhcp地址;但是这次并没有出现IP地址重复的问题,也就是说现在test01和02两台虚机虽然IP相同,但是彼此绝对隔离,不受印象

 

但是这里要特别说明一点,由于test01和02现在分别处于AAA和BBB两个vm network下,所以网关默认是由虚拟子网的第一个IP来承担,如果想访问外网或者其他外部访问,就需要SCVMM中的gateway来实现了

215541470.png

下面来重点说一下hyper-v网络虚拟化方面的一些重要概念,如下图所示,通过执行-module netwnv模块下的powershell来查看当前网络虚拟化路由;可见有两个10.10.0.0/16的路由条目,即我们刚才创建的AAA与BBB,注意两个参数:

RoutingDomainID

VirtualSubnetID

同一个RDID下可包含一个或多个VSID,这些VSID间是可以相互访问的;但是无法跨越RDID,也就是说不同的RDID是绝对隔离的

215544855.png

这里转载微软官方说明如下:

在图中,VSID 为 5001 的虚拟机能通过 Hyper-V 网络虚拟化将其数据包路由或转发到 VSID 为5002 或 5003 的虚拟机中。在将数据包送往 Hyper-V 交换机之前,Hyper-V 网络虚拟化将把进入的数据包的 VSID 更新为目标虚拟机的 VSID。这只有在两个 VSID 都属于一个 RDID 的情况下才能实现。如果数据包上的 VSID 与目标虚拟机的 VSID 不匹配,数据包会被丢弃。因此,带有 RDID1 的虚拟网络适配器不能将数据包发送到带有 RDID2 的虚拟网络适配器

224654741.gif

然后再来看一些参数,同样使用netwnv模块下的powershell来调取test01的网络虚拟化记录,如下图所示:

CustomerAddress

ProviderAddress

CA和PA的意义是非常非常重要的,正是有了这两个地址,才可以实现租户的跨子网迁移,例如企业用户将现有环境中的资源直接上传到公有云上,而不需要修改IP;那么它的原理是怎样的呢?

CA即为用户已有的IP,是可见的;而PA顾名思义,是提供商IP,或者说叫运营方的IP,也就是对用户不可见的,在将现有资源上传到公有云或者混合云环境后,通过CA与PA之间的相互转换来实现数据的通信,在下图中,CA即为我们AAA这个vm network中地址池所分配的IP,而PA是我system center这套基础架构所在的网段,这里虽然显示上看似一个IP段,但其实不然

215548978.png

【Hyper-V 网络虚拟化支持基本路由封装实现网络虚拟化作为一种机制来虚拟化 IP 地址:】

【基本路由封装   此网络虚拟化机制将基本路由封装 (NVGRE) 用作通道报头的一部分。这种地址虚拟化机制的模式是专为大多数部署 Hyper-V 网络虚拟化的数据中心而设计的。在 NVGRE 中,虚拟机的数据包被封装在另一个数据包中。如图所示,新的数据包报头含有合适的源和目标 PA IP 地址,另外还有存储在 GRE 报头密钥字段中的虚拟子网 ID】

【包含在 GRE 报头中的虚拟子网 ID 可让主机为任何指定的数据包确定客户虚拟机,尽管数据包上的 PA 和 CA 出现重叠。这可让同一台主机上的所有虚拟机分享一个 PA(如图所示)】

225559674.gif

之前test01和test02都是位于host16这台主机上,而在实施了网络虚拟化之后,依然可以进行虚机的迁移,例如下图将test01迁移至host15上

215554837.png

通过下图可见,之前在host15上执行get-netvirtualizationcustomerroute是没有返回信息的,而将test01迁移过来之后,便可查询到当前主机上的“网络虚拟化路由条目”

附上teched2013视频:

http://www.tudou.com/programs/view/vhaLwmRYcjk/

215557463.png

#######################################################################################

接下来我们在AAA这个vmnetwork下再创建一个子网,取名test02,并且基于test02创建地址池172.16.0.0/16

这个操作的效果就相当于在同一个RoutingDomainID(AAA)下创建了两个VirtualSubnetID(test、test02),那么按照这样的结构,这两个VSID之间应该是可以无限制访问,下面就来验证一下

215610293.png

我们将一台虚机保留AAA和test子网不变,另外一台修改为AAA和test02子网

220053704.png

之后再通过powershell查看路由信息,可以看到两条路由的RDID是一致的

220056186.png

在172.16.0.0/16的子网上去ping 10.10.0.0/16,完全没有问题噢~,见下图

220059999.png

####################################################################################

以上是借助SCVMM来介绍的一些网络虚拟化基本概念,其实体验过Windows Azuer Pack的朋友应该了解,在门户上申请一个VM Network其实就是在SCVMM上创建了一个“虚拟网络”,就像我们的AAA或BBB一样,以此来将不同的租户进行隔离,实现网络虚拟化

那么如果没有VMM来做管理的话,单纯使用hyper-v可否实现呢?也是没问题的,只不过需要借助powershell来做:

# Topology:

#

#    +---------+  +---------+          +---------+  +---------+

#    |  Blue1  |  |  Red1   |          |  Blue2  |  |  Red2   |

#    |10.0.0.5 |  |10.0.0.5 |          |10.0.0.7 |  |10.0.0.7 |

#    +---------+  +---------+          +---------+  +---------+

#        | VSID       | VSID               | VSID       | VSID

#        | 5001       | 6001               | 5001       | 6001

#    +======================+          +======================+

#    #        Host 1        #          #        Host 2        #

#    #                      #          #                      #

#    +======================+          +======================+

#    PA=         |                                  | PA=

#    192.168.4.11|                                  | 192.168.4.22

#                +----------------------------------+

上面这个拓扑是一个非常简单的环境,两台主机,四台虚机,一个blue网络,一个red网络,借由这些资源来实现网络虚拟化,只需几条简单的powershell即可

# Add the locator records for Blue&Red subnet

   New-NetVirtualizationLookupRecord -VirtualSubnetID "VSID" -CustomerAddress "ip" -ProviderAddress"ip" -MACAddress "mac" -Rule "TranslationMethodEncap"

   New-NetVirtualizationLookupRecord -VirtualSubnetID "VSID" -CustomerAddress "ip" -ProviderAddress"ip" -MACAddress "mac" -Rule "TranslationMethodEncap"

 

# Add the customer route records for Blue&Red subnet 

   New-NetVirtualizationCustomerRoute -RoutingDomainID "RDID" -VirtualSubnetID "VSID" -DestinationPrefix "ip" -NextHop "0.0.0.0"

# 附上脚本下载链接:

http://gallery.technet.microsoft.com/scriptcenter/Simple-Hyper-V-Network-d3efb3b8

http://gallery.technet.microsoft.com/scriptcenter/Simple-Hyper-V-Network-6928e91b

#####################################################################################

最后再来转载官网的介绍来说一说网关的意义:

 

1. 私有云环境下(路由)

【大型公司可能不愿意,或者出于合规原因不能将其一些服务和数据转移到一个公有云主机中。但是,公司仍然想要通过将数据中心资源整合到一个私有云中,来享受由 Hyper-V 网络虚拟化提供的云所带来的好处。在私有云部署中,可能不需要重叠的 IP 地址,因为公司一般有足够的不可路由的内部地址(如 10.x.x.x 或 192.x.x.x)空间】

【注意,在下图中,虚拟子网的客户地址为 157.x 地址,而网络中非网络虚拟部分 (Corp Net) 的 IP 地址也为 157.x 地址。在此示例中,数据中心中的虚拟子网的 PA 地址为 10.x IP 地址。这一部署能让公司利用 Hyper-V 网络虚拟化的一项功能,使数据中心结构中的虚拟机位置和跨子网动态迁移有一定的灵活性。这就提高了数据中心的效率,从而减少了操作支出 (OpEx) 和资本支出 (CapEx)。在这种情况下,Hyper-V 网络虚拟化网关提供 10.x 和 157.1 IP 之间的路由】

 

232752743.gif

2. 混合云环境下(VPN)

【Hyper-V 网络虚拟化的主要优点是,能将本地数据中心无缝地延伸到基于 Windows Server 2012 的云数据中心。这就是混合云模式,如下图所示:】

 

【在这种情况下,内部子网(如含有 web 服务器的子网),将从公司网络转移到云主机的数据中心。利用由主机提供的“带上自己的 IP 地址”,公司无需改变 Web 服务器虚拟机或者任何其他引用该 Web 服务器的网络端点的网络配置。主机通过 Hyper-V 网络虚拟化网关设备提供一个安全的链接。公司管理员只需配置带有合适 IP 地址的本地 VPN。Web 服务器虚拟机不会察觉其已经被移至云中。它仍然保持域与活动目录 (AD) 相结合的状态,并且使用公司的 DNS 服务器。 Web 服务器虚拟机还继续与公司其他的服务器(如 SQL Server)进行交互。在此示例中,这三种服务(AD、DNS、SQL)仍然在本地。网络诊断工具(如计算网络跃点数目的路径跟踪程序),表明 Web 服务器虚拟机与 SQL 之间的网络流量不再是在本地而是在整个 Internet 上进行路由】

232754117.gif

【Hyper-V 网络虚拟化网关可支持多个站对站 (S2S) VPN 隧道,如下图所示。注意,VMM 虽没有显示在图中,但却是 Hyper-V 网络虚拟化部署所必需的】

233141113.gif

#####################################################################################

Hyper-V网络虚拟化就简单说到这里,本人也在摸索之中,相信在未来的发展中,软件定义XX将会越来越被普及,欢迎在微软网络虚拟化方面有经验的朋友来交流,谢谢:)

本文出自 “技术不宅” 博客,请务必保留此出处http://maomaostyle.blog.51cto.com/2220531/1346900

posted @ 2016-02-01 14:22  lostARK  阅读(897)  评论(0编辑  收藏  举报