NVGRE协议

        NVGRE(Network Virtualization Generic RoutingEncapsulation)是常用的隧道封装协议之一,NVGRE是使用通用的封装格式将二层网络数据包封装到三层网络数据包。NVGRE在Hyper-V网络虚拟化中扮演虚拟化IP的角色,HNV使用NVGRE作为隧道报头,源虚机发送数据包过程中先被启用了HNV的交换机重新封装到另外一个数据包里。新的数据包报头包含源和目标新的IP地址(IP虚拟化)及其对应的MAC地址和VSID信息,VSID存储在GRE的报头的Key区域,如图1所示。数据发送到目标物理机交换机后,目标HNV交换机将数据包拆开,然后将数据发送到目标虚机。

wKioL1i-KWqwal9wAAGoZRAGQW0568.jpg-wh_50

图1  NVGRE封装隧道

 

PA和CA

        在同一个物理网络体系中,可以不借助VLAN技术,让环境里存在多个重复但不冲突的IP地址,取而代之的是Overlay技术实现网络虚拟化,在HNV里,每块虚拟网卡可关联两个IP地址—也就是CA和PA地址。

  • Customer Address(CA)。也称之为客户地址,因为这个IP地址是从租户自己创建的虚拟子网的IP地址池里获取的地址,CA地址就是分配给虚机操作系统的IP地址,可以使用ipconfig或者ifconfig等命令查看。客户的虚机部署在多租户的数据中心里使用CA IP地址时,并无感知虚机使用了网络虚拟化技术,从虚机自身的角度来看,和传统的网络并无差别。

  • Provider Address(PA)也称之为服务商地址,因为这个地址是在网络虚拟化架构里定义并且不是分配给虚机而是分配给物理主机的,PA地址的作用是NVGRE用于重新封装数据的IP地址,起到IP地址虚拟化的功能。PA地址无法在虚机操作系统里面使用ipconfig或者ifconfig等命令查看。PA地址空间用于运行虚机的物理机之间通信,只能在物理网络中查看。

        如果客户将虚机从自己数据中心迁移到多租户公有数据中心,那么CA地址帮助客户维持着已有的网络拓扑,在迁移到公有数据中心后,CA地址通过IP地址虚拟化公有数据中心基础网络结构保持着松耦合关系,这个IP虚拟化的过程由PA地址完成。因此HNV的本质其实是通过IP地址虚拟化的方式实现的。

       PA地址不是固定分配给物理机,物理机在PA地址空间里动态获取和释放PA地址。物理机要能分配PA地址,首先要将包含HNV逻辑网络的逻辑交换机分配给物理机,一旦有关联HNV逻辑网络的虚机创建在物理机上,这台物理机就会从PA IP地址池里获取一个PA IP地址。可使用Get-NetVirtualizationProviderAddress命令查看物理机所分配的PA地址,结果如下示例所示。

PS C:\>Get-NetVirtualizationProviderAddress      
ProviderAddress   : 10.2.22.14     
InterfaceIndex    : 31    
PrefixLength      : 24    
VlanID            : 222    
AddressState      : Preferred    
MACAddress        : 001dd8b71c6f    
ManagedByCluster  : False

       PA IP地址不是固定分配给物理机的而是动态变化的,只要有使用HNV逻辑网络的虚机运行,那么该虚机所在的物理机就会从地址池里拿一个PA地址,如果群集里的其他节点没有使用HNV的虚机网络则暂时不会分配PA地址。只有把虚机实时迁移到某台物理机节点后,这台物理机才会分配PA地址。失效的PA地址还会被回收,如果虚机发生迁移到其他节点,那么之前分配给物理机分配的PA地址可能会被回收,当虚机回迁到这台物理机时,则会重新分配一个新的PA地址。

       接下来我们通过实际案例来验证PA的动态分配。在群集中有两台物理服务器,分别是HYP06,HYP07。创建子网为10.2.22.0/24的PA逻辑网络并创建IP地址池,将该逻辑网络关联上逻辑交换机,并将逻辑交换机分配给这两台物理机。接着创建两台虚机,全部运行在HYP06物理机上,虚机一定要使用HNV逻辑网络,如图2所示。

wKiom1i-KY7ATHSQAAAwsNqZE-I779.jpg-wh_50

图2 两台虚机最初运行在同一台物理机HYP06

        先使用Get-NetAdapter命令查看逻辑网络的索引编号,然后使用Get-NetVirtualizationProviderAddress命令查询分配给物理机的PA地址,可见这个PA地址是分配给网卡编号为29的逻辑交换机(启用了HNV)而非其他网卡。在返回的结果中,可以看到HYP06的网卡编号为29的逻辑交换机已经分配了两个PA地址,分别是10.2.22.18和10.2.22.19,如下示例所示。

PS C:\> Get-NetAdapter     
Name             InterfaceDescription                     IfIndex    Status    
----             --------------------                     -------    ------    
LogicalSwitch    Microsoft Network Adapter Multiplex..    29         Up
PS C:\>Get-NetVirtualizationProviderAddress      
ProviderAddress      :10.2.22.19     
InterfaceIndex       :29    
PrefixLength         :24    
VlanID               :222    
AddressState         :Preferred    
MACAddress           :001dd8b71c77    
ManagedByCluster     :False    
ProviderAddress      :10.2.22.18     
InterfaceIndex       :29    
PrefixLength         :24    
VlanID               :222    
AddressState         :Preferred    
MACAddress           :001dd8b71c76    
ManagedByCluster     :False

        因为在HYP07上没有任何使用HNV的虚机,使用Get-NetAdapter命令检索到逻辑交换机的索引编号为31,以及使用Get-NetVirtualizationProviderAddress检索这个索引编号的逻辑交换机是否分配PA地址时,返回的结果为空,如下示例所示,意味着HYP07的逻辑交换机并未分配PA地址。

PS C:\> Get-NetVirtualizationProviderAddress 
PS C:\> Get-NetAdapter      
Name             InterfaceDescription                     IfIndex    Status    
----             --------------------                     -------    ------    
LogicalSwitch    Microsoft Network Adapter Multiplex..    31          Up


        使用实时迁移将虚机从HYP06迁移到HYP07,迁移结束,虚机运行在新的主机HYP07之上,如图3所示。

wKiom1i-KaOReZHpAAAzAFyOfjc391.jpg-wh_50

图3 虚机从HYP06迁移到HYP07

        等待迁移结束后,登录HYP07上运行命令查看PA地址分配情况,返回的结果中,可以看到HYP07已经分配了两个PA地址,分别是10.2.22.20和10.2.22.21,如下示例所示。

PS C:\>Get-NetVirtualizationProviderAddress      
ProviderAddress    :10.2.22.21     
InterfaceIndex     :31    
PrefixLength       :24    
VlanID             :222    
AddressState       :Preferred    
MACAddress         :001dd8b71c79    
ManagedByCluster   :False   
 
ProviderAddress    :10.2.22.20     
InterfaceIndex     :31    
PrefixLength       :24    
VlanID             :222    
AddressState       :Preferred    
MACAddress         :001dd8b71c78    
ManagedByCluster   :False

        再将虚机实时回迁到HYP06上,虚机重新运行在HYP06上,如图4所示。

wKioL1i-KbXCh4CYAAAwsNqZE-I603.jpg-wh_50

图4 虚机重新运行在HYP06上

       这时候,再次登录HYP06主机,运行命令查看PA地址时,会发现分配的PA地址已经发生了变化,新的分别是10.2.22.22和10.2.22.23,如下示例所示。之前分配给HYP06的PA地址也会在稍后被回收到IP地址池里。

PS C:\>Get-NetVirtualizationProviderAddress      
ProviderAddress    :10.2.22.19     
InterfaceIndex     :29    
……               ……    
MACAddress         :001dd8b71c77    
……               ……    
ProviderAddress    :10.2.22.18     
InterfaceIndex     :29    
……               ……    
MACAddress         :001dd8b71c76    
……               ……    

PS C:\>Get-NetVirtualizationProviderAddress      
ProviderAddress    :10.2.22.23     
InterfaceIndex     :29    
……               ……    
MACAddress         :001dd8b71c7b    
……               :……    
ProviderAddress    :10.2.22.22     
InterfaceIndex     :29    
……               ……    
MACAddress         :001dd8b71c7a    
……               ……

        虚机经过多次在物理机之间实时迁移,导致物理机的PA多次重新分配和回收,在SCVMM里面运行Get-SCIPAddress命令查看时会发现PA地址逐渐被SCVMM回收到PA IP地址池。