Neutron/ML2
- Neutron ML2
模块层2(ml2)插件是一种允许OpenStack网络同时地利用在复杂现实数据中心发现的各种第二层网络技术的框架。目前它与存在的openvswitch、linuxbridge和hyperv L2代理共同存在,而且想要替换和否决与那些L2代理相关联的巨大插件。ml2框架也想要大大简化增加对新L2网络技术的支持,并且比那些要求添加新的巨大核心插件需要更少的初始和持续的努力。模块化代理可能作为后续开发工作。
1.1. ML2驱动
ml2驱动分别实现可扩展的网络类型和访问那些类型网络机制的集合。与metaplugin不同的是,多种机制被同时地用于访问相同虚拟网络的不同端口。这些机制能通过RPC和/或使用驱动原理利用L2代理来与外部设备或者控制器相互联系。类型和进程驱动程序被加载为python入口点使用stevedore库。
1.1.1. 驱动类型
每个可用的网络类型被ml2驱动类型管理。驱动类型维持任何需要指定类型的网络状态,并且执行供应商网络验证和租户网络配置。Ml2插件同时包含本地、扁平、vlan、gre和vxlan网络类型的驱动程序。
1.1.2. 驱动机制
每个网络进程被ml2驱动机制管理。驱动机制对已建立的类型驱动获取的信息有责任,以及确保能够恰当的应用到所给的能工作的网络进程。
驱动机制接口同时支持创建、更新和删除网络和端口资源。对每个在资源上采取行动,进程驱动使用两种方法——ACTION_RESOURCE_precommit,一种称为数据库事务处理上下文和ACTION_RESOURCE_postcommit,称为数据库事务完成后。Precommit方法被驱动机制用于验证采取的行动和做任何需要改变驱动机制的私有数据库。Precommit方法不应该阻塞以及因此不能和任何外部Neutron通信。Postcommit方法负责适当推动改变资源的实体负责应用改变。例如,postcommit方法将推动一个外部网络控制器改变,那负责适当地更新网络资源基于这些改变。
支持驱动机制目前在先行版本Havana中是半成品,同时它的接口在Havana推行前会发生改变。在未来的版本中,驱动机制接口也被称为用来建立端口绑定,决定VIF类型和网段。
1.2. 多区段网络
虚拟网络有多段相同或者不同类型组成的。数据库决策和驱动程序APIs支持多区段网络,但是对于多区段网络的客户端APIs现在还没有实现。
2. ML2配置
2.1. 在Devstack中使用ML2
ML2插件在Devstack中完全支持。支持配置VLAN、GRE和VXLAN网络模式。配置这些模式如下:
2.2. 用VLANs模式的ML2配置Devstack
为配置ML2使用控制和计算结点的localrc文件如下所述,用来运行VLANs模式的Devstack。这等价于运行OVS或者LinuxBridge插件在VLAN模式下。
如下在你的控制节点添加如下的localrc文件:
Q_PLUGIN=ml2 ENABLE_TENANT_VLANS=True ML2_VLAN_RANGES=mynetwork:100:200 |
为VLAN类型驱动程序设置指定的VLAN参数,在localrc下列变量被使用。这是一个空间独立的分配值列表:
Q_ML2_PLUGIN_VLAN_TYPE_OPTIONS=(network_vlan_ranges=600:700) |
2.3. 用隧道网络模式的ML2配置Devstack
一个控制和计算结点localrc文件显示在这里为了配置ML2运行隧道网络的Devstack。这是最基本的配置ML2的形式,而且等价于运行GRE隧道的OVS插件。
在控制节点localrc添加如下:
Q_PLUGIN=ml2 ENABLE_TENANT_TUNNELS=True |
在计算结点,添加到你的localrc中:
Q_PLUGIN=ml2 ENABLE_TENANT_TUNNELS=True |
改变GRE关键的范围使用隧道关键,添加到localrc:
TENANT_TUNNEL_RANGE=50:100 |
上面将启用OVS的GRE隧道。如果你想要使用OVS的VXLAN,确保你正在运行至少1.10版本的OVS,包括从上游领域的OVS项目中的Open vSwitch KLM。一旦你有了,下面就可以启用VXLAN隧道模式的ML2:
在控制节点上添加下列到localrc:
Q_PLUGIN=ml2 Q_ML2_TENANT_NETWORK_TYPE=vxlan |
计算结点上添加下列代码到localrc中:
Q_PLUGIN=ml2 Q_ML2_TENANT_NETWORK_TYPE=vxlan |
改变VXLAN VNIs的范围到使用,添加到localrc:
Q_ML2_PLUGIN_VXLAN_TYPE_OPTIONS=(vni_ranges=400:500) |
2.4. 在Devstack中高级ML2配置
Devstack缺省运行OVS代理的ML2.使用不同的代理,在localrc中如下设置:
Q_AGENT=linuxbridge
ML2缺省不加载任何进程驱动程序,仅与OVS、LinuxBridge和Hyper-V代理共存。为了改变这个,在localrc中设置如下。有效参数是你想要使用的进程驱动程序的名字:
Q_ML2_PLUGIN_MECHANISM_DRIVERS=<list of MechansimDrivers>
默认地,所有的ML2类型驱动被加载。改变这个行为,在localrc设置如下。有效选项如下设置:local、flat、vlan、gre、vxlan。
Q_ML2_PLUGIN_TYPE_DRIVERS=vlan,gre