Neutron 集成SDN控制器
一.Neutron的组成元素
Neutron-server可以理解为一个专门用来接收Neutron REST API调用的服务器,然后负责将不同的REST API分发到不同的neutron-plugin上。
Neutron-plugin可以理解为不同网络功能实现的入口,各个厂商可以开发自己的plugin。Neutron-plugin接收neutron-server分发过来的REST API,向neutron database完成一些信息的注册,然后将具体要执行的业务操作和参数通知给自身对应的neutron agent。
Neutron-agent可以直观地理解为neutron-plugin在设备上的代理,接收相应的neutron-plugin通知的业务操作和参数,并转换为具体的设备级操作,以指导设备的动作。当设备本地发生问题时,neutron-agent会将情况通知给neutron-plugin。
Neutron database就是Neutron的数据库,一些业务相关的参数都存在这里
Network provider即为实际执行功能的网络设备,一般为虚拟交换机(OVS或者Linux Bridge)。
二.Neutron-plugin说明
Plugin, agents和neutron-server一起管理虚拟交换机,Plugin, agents依赖Neutron。Plugin分为core和additional,用来处理neutronserver传过来的请求
Agent跑在compute节点之上,与neutron的plugin进行通信
ML2 的plugin都是属于core。分为type和mechanism两种。Type drivers (如flat, VLAN, GRE 和VXLAN) 定义 L2 type。mechanism drivers (如OVS, ODL, Cisco, NEC, etc) 负责一系列动作(更新、创建、删除)网络、子网、端口。
Neutron可以通过ML2插件和ODL北向接口融合,ODL通过OVSDB南向插件管理OpenStack计算节点中的网络流。
三. OpenDaylight(ODL)介绍
OpenDaylight是一套以社区为主导的开源SDN框架,旨在推动创新实施以SDN透明化。面对SDN型 网络,需要合适的工具管理基础设施,这正是OpenDaylight的专长。
OpenDaylight Controller作为项目核心,拥有一套模块化、可插拔且极为灵活的控制器,这使其能够被部署在任何支持Java的平台之上。这款控制器中还包含一套模块合集,能够执行需要快速完成的网络任务。
OpenDaylight Controller提供了一个模块化的开放SDN控制器,它提供了开放的北向 API(开放给应用的接口),同时南向支持多种包括openflow在内的多种SDN协议。底层支持混合模式的交换机和经典的Openflow交换机
ODL安装:
/17984.html
在neutron旧版本里
opendaylight作为ml2drivers 存在于neutron项目中,在neutron较新的版本中一些sdnplugin,已经开始从项目中移除,统一命名为诸如networking-xxxx之类的独立项目。
四.OpenStack和OpenDaylight(ODL)的集成
Neutron包含ML2机制驱动,该机制驱动(ODL)作为REST代理能够调用所有的NeutronAPI。ODL包含北向REST服务(Neutron API服务),能够调用这些代理API缓存数据并可用于ODL的其他服务,这些RESTful API可以完成OpenStack和ODL的绑定。OpenDaylight与Openstack集成主要依赖ML2 plugin.
ODL和OpenStack集成步骤如下:
1、在虚拟机或者物理机上构建和安装合适的ODL版本。
2、正确配置并启动ODL
3、部署OpenStack。
4、配置OpenStack,为ODL和Openstack的集成做准备:
* 确保核心插件在ML2上
配置/etc/neutron/neutron.conf
[DEFAULT]
core_plugin=neutron.plugins.ml2.plugin.Ml2Plugin
* 获取networking-odl
sudo pip install networking-odl
* 将ODL作为”mechanism_drivers”添加到ML2上
配置/etc/neutron/plugins/ml2/ml2_conf.ini
修改mechanism_drivers = openvswitch为
mechanism_drivers= opendaylight。
* 配置ml2_conf.ini文件的[ml2_odl]区域:
[ml2_odl]
username=<ODL_USERNAME>
password=<ODL_PASSWORD>
url=http://<ODL_IP_ADDRESS>:<ODL_PORT>/controller/nb/v2/neutron
port_binding_controller=pseudo-agentdb-binding
* 重置Neutron’s database
mysql -e "DROP DATABASE IF EXISTS neutron;"
mysql -e "CREATE DATABASE neutron CHARACTER SET utf8;"
/usr/local/bin/neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
* 重启neutron-server:
systemctl start neutron-server
5、配置ovs虚拟交换机使用ODL
#ovs-vsctl set-manager tcp:${ODL_IP_ADDRESS}:6640
6、设置节点OVS configurations
#sudo neutron-odl-ovs-hostconfig
7、检测OVS服务是否正常
#ovs-vsctl show
8、在OpenStack构建虚拟网络。
9、验证ODL界面生成的网络拓扑是否与想要的一致
参考文档:/developer/networking-odl/installation.html
五.OpenStack和OVN的集成
OVN是OpenvSwitch项目组为OpenvSwitch开发SDN控制器,同其他SDN产品相比,OVN对OpenvSwitch 及OpenStack有更好的兼容性和性能。
从 OVS 升级到 OVN 是非常简单快捷的。原有的网络、路由等数据不会丢失,也不需要对这些数据导入导出来进行数据迁移,只需要添加一个 plugin 来配置 OVN 即可
OVN的优点如下:
1.OVN使得Neutron组件数量减少
OVN自带的ML2 driver替换掉 OVS ML2 driver 和 Neutron的OVS agent;OVN原生支持L3和DHCP功能,这样就不再需要Neutron 的L3 agent、 DHCP agent 和DVR。
2. OVN提供了许多原生的虚拟网络功能,提升了OVS的工作效率和性能
3. OVN 支持原生的三层功能,不需要借助 Linux TCP/IP stack,用OpenFlow 流表来实现路由查找,ARP 查找,TTL 和 MAC 地址的更改。
4.OVN里面数据的读写都是通过 OVSDB来做的,取代了 Neutron 的消息队列机制,所以有了 OVN 之后,理论上Neutron 里面所有的 agent 都不需要了,Neutron 变成了一个 API server 来处理用户的 REST 请求,其他的功能都交给 OVN 来做,只需要在 Neutron 里面加一个 plugin 来调用配置 OVN。
集成文档:/developer/networking-ovn/install.html