对vSphere虚拟交换机的理解

对于刚刚开始接触VMWare虚拟化的同学,除了创建虚拟机外,一定绕不过的就是VMWare的虚拟化网络。在此记录一下笔者对vSphere虚拟交换机的理解。

引子

ESXi是 vSphere 中最重要的一个组件。ESXi 是虚拟化服务。所有的虚拟机都是运行在 ESXi 服务上面。创建虚拟机的时候,需要绑定网口对应的PortGroup,那么什么是ESXi的vSwitch,什么是PortGroup,虚拟机的流量最后又是按照什么规则从ESXi主机的物理网口出来的呢?反方向呢?

ESXi物理网口

安装了ESXi的服务器的物理网口呈现为"vmnicx"的形式,其中x为编号,从0开始依次递增。

ESXi主机上创建的虚拟机,如果要和外界通信,流量最后一定是要通过ESXi主机的物理网口的。要确认物理网口和上联的交换机端口的连接关系也很简单,只要把交换机的端口down掉,看哪个物理网口变成down即可。

vSwitch

Switch(交换机)原本指的是按照vlan+mac进行桥接转发的二层网络设备。在虚拟化的浪潮中,交换机作为直连主机的网络设备,也被虚拟化了,就是vSwitch(虚拟交换机)。在OpenStack中,一般使用OpenvSwitch作为虚拟交换机,而VMWare系统中的虚拟交换机的功能由ESXi的内核提供,只支持最基本的二层桥接,没有物理交换机的那些高级功能。
vSphere交换机可以分为两类,即为“标准交换机”和“分布式交换机”。不同之处在于“标准交换机”只存在于一台ESXi主机上,只能将存在与本机的虚拟机进行直接连通。

“分布式交换机”借助vCenter对多台ESXi主机的统一管理能力,可以建立一个跨ESXi主机的分布式虚拟交换机,提供一致性的配置和二层连通服务。当然,“分布式交换机”其实是将ESXi主机和上联的物理交换机的二层连通能力进行了统一抽象,形成的逻辑上“分布式交换机”。

PortGroup

交换机上(无论物理还是虚拟),都会有很多端口,用来连接主机(或虚拟机)。为了方便起见,将具有相同特性的端口聚合为“端口组”。因此端口组一定是属于某个虚拟交换机,可能是标准虚拟交换机也可能是分布式虚拟交换机。

标准交换机上的端口组就叫标准端口组,直接allow所有vlan。

分布式交换机上的端口组自然就叫分布式端口组了。在指定分布式交换机上创建端口组的时候,需要重点关注的是它的vlan类型。

一般来说主要使用下面两种
(1)VLAN:相当于Access类型,native VLAN是可以设置的。虚拟机连接了这样的接口,发出的untag报文会被归为native VLAN,从所在的虚拟交换机的uplink口离开ESXi主机的时候,会插入这个VLAN tag。

(2)VLAN中继:相当于Trunk类型,还需要指定allow的vlan range。主要用于虚拟机发出的报文已经带了vlan tag的情况,例如虚拟机上装ESXi或是OpenStack,即所谓的“又虚了一层”。这些带VLAN tag的报文会透传出虚拟交换机的uplink口。

当设置虚拟机的网卡的时候,会指定这张网卡是属于哪个端口组,同时也就确定了连接到哪台虚拟交换机了,进而也就确定了从ESXi哪个物理网口与外界通信。