在之前的文章中,我们提到,EVPN是云网融合的红娘,撮合了云平台和网络转发平面。而当网络中的硬件交换机支持EVPN和VXLAN时,它可以代替软件OVS,提升网络吞吐量,降低转发时延,并且节约宝贵的CPU资源。
一个问题出现了:
在硬件交换机实现VXLAN封装的场景中,它需要将不同的VLAN封装到对应的VXLAN中。VLAN和VXLAN的对应关系,是Neutron进行分配的,那么,Neutron怎么样才能将这个对应关系下发到硬件交换机呢?
让我们揭开今天的主题——层次化端口绑定。
层次化端口绑定是在OpenStack Kilo版本中引入的。
原来,在Neutron中,向网络节点下发配置的组件,叫做ML2组件。当用户在Nova中创建虚拟机时,Nova会通知Neutron将虚拟机的网络端口,绑定到虚拟化网络中。对于软件Overlay的场景,ML2组件调用OVS的驱动——Mechanism Driver,把虚拟机的VLAN、对应的VXLAN等信息配置到OVS上。
引入了层次化端口绑定机制以后,ML2允许注册多个Mechanism Driver。这样,硬件交换机的厂商只需要按照ML2 Mechanism Driver的规约,自行开发适配了交换机的Mechanism Driver并在ML2中注册,就可以接管端口绑定的功能,将Neutron对虚拟化网络的配置接管到硬件交换机上了。
典型的层次化端口绑定的机制如下图:
图中数字表示的各步骤如下:
用户在Nova中创建一个虚拟机,将其加入网络VXLAN 100;
Neutron为VXLAN 100创建网络接口,并将请求发送到ML2组件;
ML2调用物理交换机(TOR)的Mechanism Driver,设定VXLAN 100;
物理交换机Mechanism Driver再申请一个VLAN 110,通知ML2,当前这个VM的网络接口还需要绑定在VLAN 110
物理交换机Mechanism Driver通过Netconf接口设定VLAN 110和VXLAN 100的映射关系;
ML2调用OVS的Mechanism Driver,在OVS添加VLAN 110,并将该VLAN配置到VM对应的接口上,
OVS将对VM发出的数据包打上VLAN 110的 TAG并转发到物理交换机的接口,物理交换机将带有VLAN 110 TAG的数据包封装入VXLAN 110;
我们看到,VM的一个网络接口,既通过OVS的Mechanism Driver绑定到了OVS的VLAN接口上,又通过物理交换机的Mechanism Driver绑定到了物理交换机的VLAN/VXLAN接口上(在交换机上也叫VXLAN Attach Circult接口与VXLAN Tunnel接口)。这就是所谓“层次化端口绑定”这个短语的意义。
层次化端口绑定的本质,是Neutron为硬件交换机厂商提供了一个实现硬件SDN Overlay的接口。有了这种机制,云平台和物理网络才能成为一对亲密无间的CP。
类似的接口还有LBaaS和FWaaS,在后面内容会提到。
下一章我们将详解硬件Overlay的转发平面原理。