从Openstack的H版本开始,在Neutron模块中增加了ML2插件,ML1-Plugin被添加以取代所有的核心插件,它采用了更加灵活的结构进行实现,如图4-4所示。ML2的引入(从OpenStack的Havana版本开始)是为了替代原有的统一插件(如,Open vSwitch和Linux桥接,它们仅仅是插件,而不是代理)、消除冗余代码,降低开发和维护成本。根据ML2作者所定义的,模块化二层组件(ML2)是一个允许OpenStack Neutron同时利用二层网络多样性技术的架构,该二层网络技术来源于实际的复杂数据中心。
图4-4 ML2插件结构
ML2通过驱动模型实现模块化。它包含了两类驱动:类型驱动和机制驱动。类型驱动(如flat、VLAN、GRE和VXLAN等)定义了一个特殊的二层类型,每个可用网络类型由对应的类型驱动管理。该驱动维护了类型驱动具体的状态信息,实现了租户网络之间的隔离,这种隔离是由供应商网络验证过的。
另一方面,机制驱动是由厂商指定的(如OVS、OpenDaylight、思科、NEC等厂家的驱动),基于功能性的类型驱动——支持创建、更新和删除网络、子网和端口资源。应该注意到,供应商有可能执行一整套新的、类似于ML2的插件,或者仅仅实现一个机制驱动插件。