虚机网络和虚拟子网

       在介绍HNV工作原理之前,我们有必要了解下组成HNV的原子网络——VM Network(虚机网络)和Virtual Subnet(虚拟子网)。HNV中,虚机网络作为租户间虚机隔离的单位,在网络虚拟化结构中起到非常关键的作用。虚机网络是虚机连接到物理网络的逻辑组件,每个虚机网络都有一个路由域并由特定路由域ID(Routing Domain ID,简称为RDID)标识,路由域ID是标准的Windows GUID,格式通常为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”。在虚机网络里可进一步定义虚拟子网,虚拟子网是广播域,在同一个虚拟子网的虚机必须使用相同的IP前缀。每个虚拟子网都有一个特定的虚拟子网ID(Virtual Subnet ID,简称为VSID),虚拟子网和VLAN类似,但是比VLAN有更广的范围,VSID范围从4096到16777214。同一个HNV路由域里的虚拟子网可以实现不同子网间的路由,因此也可以说HNV网络里集成了软件路由功能。

       如果物理机逻辑交换机启用了HNV,可使用PowerShell命令PS C:\>Get-NetVirtualizationCustomerRoute查看虚机的RDID和虚拟子网的VSID,如下示例所示。

PS  C:\>Get-NetVirtualizationCustomerRoute
RoutingDomainID    :  00894F8A-631A-43C3-B52E-B54F47970938    
VirtualSubnetID    :  676802    
DestinationPrefix  :  192.168.188.0/24    
NextHop            :  0.0.0.0    
Metric             :  0     
RoutingDomainID    :  00894F8A-631A-43C3-B52E-B54F47970938    
VirtualSubnetID    :  1001280    
DestinationPrefix  :  0.0.0.0    
NextHop            :  10.0.2.2    
Metric             :  0 
    
RoutingDomainID    :  72961897-0253-48C3-9ACE-E2D1EEDFB9AB    
VirtualSubnetID    :  16283042    
DestinationPrefix  :  192.168.188.0/30    
NextHop            :  0.0.0.0    
Metric             :  0     
RoutingDomainID    :  72961897-0253-48C3-9ACE-E2D1EEDFB9AB    
VirtualSubnetID    :  11061729    
DestinationPrefix  :  172.16.100.0/30    
NextHop            :  0.0.0.0    
Metric             :  0


虚拟化网络的VM Network和网络虚拟化的VM Network略有不同,如图1所示,虚拟化网络结构里,每个逻辑网络里只能创建一个唯一的虚机网络,每个虚机网络下可以创建若干个虚拟子网。虚拟化网络结构里要求每一个虚拟子网都是唯一的,也即同一个虚机网络(逻辑网络)下的虚拟子网不能重复,不同虚机网络(逻辑网络)里的虚拟子网也不能重复。

wKiom1i2PzDxXW3KAAE6spSV1p8077.jpg-wh_50

图1 虚拟化网络的虚拟子网

在网络虚拟化的结构里,可以由用户自主在逻辑网络里创建虚机网络,虚机网络是隔离用户与用户网络的边界。在一个虚机网络里可以创建多个不重复虚拟子网,虽然同一个虚机网络里的虚拟子网不可重复,但不同虚机网络里的虚拟子网允许重复。如图2所示,虚机网络1的有两个不重复虚拟子网—虚拟子网1和虚拟子网2,虚机网络2有一个虚拟子网3,虚拟子网1和虚拟子网3的子网是完全一样的。在同一个虚机网络下的不同子网默认可以路由互通,在图2里,虚机网络1的两个虚拟子网分别为192.168.188.0/24和192.168.189.0/24,这两个虚拟子网内的IP地址的可以互通。因为HNV交换机内置了路由器,这个路由器是物理主机逻辑交换机的一部分,多台使用同一个逻辑交换机的主机使用分布式路由器为虚拟子网提供路由,每一台物理机的逻辑交换机成为同一虚机网络不同虚拟子网间默认的网关。在Windows Server里HNV默认的网关地址都是1,掩码24位,在创建虚拟子网时都会保留这个IP地址不给虚机使用。

在多租户的场景里,重复但不冲突的网络虚拟化实现了多租户数据中心里租户按需定义自己的网络的需求。

wKioL1i2PzazLqyYAAFaJTL2O5k974.jpg-wh_50

图2网络虚拟化的虚拟子网

接下来我们将借助微软云平台(Windows Azure Pack)为租户提供自助创建虚拟网络的接口,首先需要在SCVMM创建好网络虚拟化的逻辑网络并发布到云平台供租户自助创建虚机网络和虚拟子网。

 

重复的虚拟子网

假设有两个租户分别是CorpA和CorpB,两个租户使用云自助门户创建了相同的虚拟子网192.168.188.0/24,如图3所示。他们的虚拟子网配置完全一样的IP地址池,如图4所示。注意地址池分配的第一个IP地址从2开始,因为1这个IP地址默认预留作为虚拟子网的网关使用。

wKiom1i2PzeyXhNwAAAc1gClHoQ225.jpg-wh_50

图3 租户自定义自己的虚机网络

   

wKiom1i2P43h2d7wAAAwALLEeJA639.jpg-wh_50

图4租户自定义自己的虚拟网络

       CorpA创建两台虚机(CorpA-Web001和CorpA-DB001)并从IP地址池里获取IP地址为192.168.188.2和192.168.188.3;同样,CorpB创建两台虚机(CorpB-Web001和CorpB-DB001)并从IP地址池里获取IP地址也是192.168.188.2和192.168.188.3,如图5所示。

wKioL1i2PzqwfqXYAACiCgont90992.jpg-wh_50

图5 CorpA和CorpB的虚机具有一样的IP地址

       即使CorpB的两台虚机的IP地址和CorpA的IP地址完全一样,各自的IP地址并没有发生冲突导致IP地址无效。登录CorpA-Web001虚机,可以顺利Ping通 CorpA-DB001虚机,如图6所示。

wKiom1i2P0SjofqiAABUqq1SjyE715.jpg-wh_50

图6 CorpA的虚机互相ping

登录CorpB-Web001虚机,可以顺利Ping通 CorpB-DB001虚机,如图7 所示。

wKiom1i2QI6RX_zVAABUqq1SjyE205.jpg-wh_50

图7 CorpB的虚机互相ping

       经过验证,在网络虚拟化的逻辑网络下可以创建多个虚机网络,虚机网络里的虚拟子网可以重复不冲突。

 

HNV软件实现路由

       HNV具备多个租户使用相同的虚拟子网之外,还具备同一虚机网络中的路由功能,在验证过在网络虚拟化的逻辑网络创建重复的虚拟子网后,接下来验证同属一个虚机网络中不同虚拟子网之间的路由。

租户CorpC借助微软私有云门户Azure Pack,在同一个虚机网络里创建两个不同虚拟子网192.168.188.0/24和172.16.100.0/24,如图8所示。

wKioL1i2P0XhXg03AABGupKOxRA390.jpg-wh_50

图8 CorpC在同一个虚机网络里创建两个虚拟子网

       在云平台创建两台虚机,分别获取到192.168.188.2和172.16.100.2的IP地址,如图9所示。

wKiom1i2P0XjfejGAAA2b8akWDc355.jpg-wh_50

图9 在不同子网的两台虚机分别获取IP地址

       登录corpc-web001虚机,确认分配的IP地址是192.168.188.2,然后Ping 172.16.100.2这个IP地址,在图10里可看到192.168.188.2这个IP地址成功Ping通了172.16.100.2这个IP地址。

wKioL1i2P0eyQ7YcAADPDRosPqM867.jpg-wh_50

图10 跨子网ping

       反过来登录corpc-db001虚机,确认分配的IP地址是172.16.100.2,然后Ping 192.168.188.2这个IP地址,在图11看到可以看到172.16.100.2这个IP地址成功Ping通了192.168.188.2这个IP地址。

wKiom1i2P0jDOImoAADMyZEunzo650.jpg-wh_50

图11反向ping测试