前面我们讲了一些网络虚拟化中出现的一些名词的概念和他们之间如何相互配合去使用的,接下来再给大家分享下,网络虚拟化中的一些原理。
(若看完觉得抽象,可以跟着后面的Demo实验的文章去结合理解)
概念:
RoutingDomainID:简称RDID,同一虚拟交换机(Logical network)下,不同的VmNetwork则其虚拟机的RDID就不相同,不同RDID的虚拟机之间则不可通信。
VirtualSubnetID:简称VSID,同一虚拟交换机(Logical network)下,同一个VmNetwork的多个子网段VSID是一致的,因此此VmNetwork的不同子网(Subnet)间可相互通信。
ProriderAddress:简称PA,是在logical network下配置的。当logical network的类型是NVGRE的时候,为此logical network配置的IP POOL就是PA。当logical network 的类型是非NVGRE的时候,为此logical network配置的IP POOL 则是物理机或虚拟机所获得的IP 段。
CustomerAddress:简称CA,其实就是客户虚拟机通过绑定VmNetwork 所分配的对应的子网(Subnet)来获得的IP。
同一个RDID下可包含一个或多个VSID,这些VSID间是可以相互访问的;但是无法跨越RDID,也就是说不同的RDID是绝对隔离的
场景一:相同VM network的下面两个不同子网的网段间是可以相互通信的
因为相当于是同一个RDID下的多个VSID,因此他们之间是相互可以通信的。
公有云当中,同一租户的不同子网的虚拟机之间可以相互通信。
我们可以通过,在承载了不同VM network的宿主机上,运行这条命令
Get-NetVirtualizationCustomerRoute
来查看此宿主机上的虚拟机所分配的RDID 和 VSID
上图,我们可以看到相同RDID的下面两个不同子网的VSID间是可以相互通信的。
场景二:不同VM network的下面两个子网(SUBNET)的网段间是不可以相互通信的
因为不同的一个RDID下的VSID之间,哪怕他们是同一网段的IP,他们之间也是不可相互通信的。
公有云当中,不同的两个租户之间,哪怕是相同的子网段的虚拟机之间都是不可以相互通信。
我们可以通过,在承载了不同VM network的宿主机上,运行这条命令
Get-NetVirtualizationCustomerRoute
来查看此宿主机上的虚拟机所分配的RDID 和 VSID
上图,我们可以看到不同RDID的下面两个子网的网段虽然是看似一致,但是他们是不可以相互通信的。
场景一场景二的原理:
在下图,VSID 为 5001 的虚拟机能通过 Hyper-V 网络虚拟化将其数据包路由或转发到 VSID 为5002 或 5003 的虚拟机中。在将数据包送往 Hyper-V 交换机之前,Hyper-V 网络虚拟化将把进入的数据包的 VSID 更新为目标虚拟机的 VSID。这只有在两个 VSID 都属于一个 RDID 的情况下才能实现。如果数据包上的 VSID 与目标虚拟机的 VSID 不匹配,数据包会被丢弃。因此,带有 RDID1 的虚拟网络适配器不能将数据包发送到带有 RDID2 的虚拟网络适配器。
场景三:ca&pa的配合
PA:ProviderAddress
CA:CustomerAddress
CA和PA的意义是非常非常重要的,正是有了这两个地址,才可以实现租户的跨子网迁移,例如企业用户将现有环境中的资源直接上传到公有云上,而不需要修改IP;那么它的原理是怎样的呢?
CA即为用户已有的IP,是可见的;而PA顾名思义,是提供商IP,或者说叫运营方的IP,也就是对用户不可见的,在将现有资源上传到公有云或者混合云环境后,通过CA与PA之间的相互转换来实现数据的通信,在下图中,CA即为我们A01这个vm network中地址池所分配的IP,而PA是我system center&AD这套基础架构所在的网段的IP(当然也可以单独划分一个虚拟网段作为PA POOL,这样可以跟我们的管理网络区分开来),这里虽然两个IP看似一个IP段,但其实不是的,相互是可重叠的IP.
参考下微软官方的摘要说明(CA(即同一个VM NETWORK下的虚拟机)之间的相互通信过程)
首先,在 Hyper-V 网络虚拟化中的每个虚拟网络适配器都与两个 IP 地址(PA&CA)相关
网络虚拟化的重要方面:
将每台虚拟机的 CA 映射到物理主机的 PA。
根据映射,将虚拟机在 CA 空间中发送的数据包放置在一个含有 PA 源和目标对的“封套”中。
CA-PA 映射必须允许主机为不同的客户虚拟机区分数据包。
因此,网络虚拟化机制旨在将虚拟机使用的网络地址虚拟化。
网络地址虚拟化机制原理:
Hyper-V 网络虚拟化支持基本路由封装实现网络虚拟化作为一种机制来虚拟化 IP 地址:
基本路由封装 此网络虚拟化机制将基本路由封装 (NVGRE) 用作通道报头的一部分。这种地址虚拟化机制的模式是专为大多数部署 Hyper-V 网络虚拟化的数据中心而设计的。在 NVGRE 中,虚拟机的数据包被封装在另一个数据包中。如图 所示,新的数据包报头含有合适的源和目标 PA IP 地址,另外还有存储在 GRE 报头密钥字段中的虚拟子网 ID。
包含在 GRE 报头中的虚拟子网 ID 可让主机为任何指定的数据包确定客户虚拟机,尽管数据包上的 PA 和 CA 出现重叠。这可让同一台主机上的所有虚拟机分享一个 PA(如图 所示)。
共享 PA 对网络可扩展性产生很大的影响。网络基础设施必须知悉的 IP 和 MAC 地址数量得以大幅减少。例如,如果每台终端主机平均有 30 台虚拟机,网络基础设施需要知悉的 IP 和 MAC 地址数量将减少到三十分之一,数据包中嵌入式虚拟子网 ID 还能轻易地将数据包与实际客户联系起来。
使用 Windows Server 2012,Hyper-V 网络虚拟化完全支持即开即用的 NVGRE;不需要升级或购买新的网络硬件,如 NIC(网络适配器)、交换机或路由器。因为在线 NVGRE 包是 PA 空间中的常规 IP 包,可与当前的网络基础结构相兼容。