Neutron和SDN集成现状分析

一.Neutron概要

众所周知,Neutron是OpenStack众多项目中的核心项目之一,代表其网络服务。Neutron的发展自诞生到现在,可谓是一波三折,其命名先是由nova-network,改为quantum,因其与一家公司名冲突,隧又改为Neutron。表面上的命名变化,又何尝不蕴含着其深层次的发展和演进,以Plugin、高级网络服务功能等突出应用,充分显示着它不断的丰富,就像其命名“中子”一样,彰显着它在浩瀚宇宙中,熠熠生辉的光芒。

下面,借用本站“北京-小武”一文《Neutron的SDN化》中,Neutron是什么和Neutron的主要功能为线索,来添加自己的认识。

1.Neutron是什么

Openstack核心项目中的网络配置管理组件
Neutron的网络服务功能包括L2-L7层
Neutron用于管理配置VM所用的网络
Neutron有很多SDN控制器作为ML2 Plugin和ML3 Plugin(注:ONOS在计划中)

2.Neutron的主要功能

1)ML2功能
ML2功能包括Port、Subnet、Network、Qos、安全组等,Linux 网桥是虚拟交换机的一种实现,ML2 层使用 VLAN 和VXLAN(利用 L3 层扩展ML2 层的遂道技术)来实现物理隔离。

在ML2层,由虚拟交换机来实现。虚拟交换机有下列这些:

  • Linux网桥,基于Linux内核的网桥。网桥就是交换机的具体体现,比如OpenStack中常见的br-int。
  • OpenvSwitch(OVS):OVS有两种模式,一种是当普通的虚拟交换机来使用,另一个是和OpenFlow控制器协作当作SDN交换机来使用。
  • 一些基于Overlay技术的SDN实现,如VXLAN等。
  • 一些非开源的商业交换机。

目前,Neutron已经实现的ML2层Drivers如下图所示(Liberty版代码)。


linuxbridge实现了Linux的内核网桥,Open vSwitch driver实现了Open vSwitch网桥,hyperv driver用于实现和微软的Hyper-V虚拟化产品进行交互,Brocade的driver用于和博科的SDN产品进行交互,其他类似。ml2是一种通用、核心且基础的插件,这些L2层的插件主要分写数据库的plugin部分和运行在计算节点的agent部分。在Neutron中,ML2是其Core Plugin。详情,请参见Neutron代码的入口配置文件neutron/setup.cfg,其代码如下:

ML2 plugin的代码因为有很多相同,便使用了复用和模块间的导入、装饰器等语法,ml2可以理解为一个公共的plugin。且每种插件基本上实现了FLAT、local、VLAN、VXLAN、GRE等几种拓扑。详情,请参见Neutron代码的入口配置文件neutron/setup.cfg(neutron.ml2.type_drivers部分),其代码如下:

2)L3功能
L3功能,包括Router/DVR、DCHP等服务,L3层通过 ipv4 forward 功能进行静态路由转发,使用iptables的SNAT和DNAT规则实现内网中的虚机访问外网和外网访问内网上的虚机(也就是所谓的Floating IP)。和利用 L2 层扩展 L3 层的标签技术MPLS(一般用在WAN的路由器上)。

3)L4-L7功能
L4-L7功能,包括FWaas、LBaas、VPNaas、DNSaas-Designate等服务。

从网络功能和对应的底层网络设备实现来看,Port对应VM挂载的VNIC相应TAP/TUN设备,Subnet只是一个IP地址 Pool的数据集合,Network则要对应分配的网络类型和相应隔离域ID,Qos功能可以基于OVS来实现,安全组则基于linux bridge上的iptables实现。

L3上Router通过linux的Namespace实现,Dragonflow则是通过OpenvSwitch的流表实现,DHCP和DNS服务通过Dnsmasq实现;L4-L7的服务开源实现方案里,FWaas是通过Router里的Iptables,LBaas是通过Haproxy,VPNaas则是Openswan,当然现在很多设备厂商比如Juniper、思科、华为、博科和F5等对L2-L7的服务实现都提供了自己的设备和driver。

Neutron的机制是通过plugin/driver/agent(server用于和其他组件服务的api进行交互)等方式实现和不同网络设备的集成,plugin里L2-L3称之为core plugin,L4-L7成为service plugin。
driver是plugin下具体集成不同插件的方式,而agent则是部署在另一侧的相应Driver代理,来管控计算节点上的虚拟机。

Neutron中的各种plugin纷繁复杂,诸如Dragonflow、OVN等此类不断涌现。Neutron的未来是想将service plugin统一起来,只剩下Neutron的北向API及Neutron server。

二.Neutron和SDN Controller的集成

在整个SDN(这里仅指Controller)和OpenStack集成的大框架中,个人倾向于通过分层来理解。即Neutron和SDN Controller集成,理解为“应用层(北向)”;SDN Controller和软硬件网络设备集成,理解为“管理层(南向)”。这里,我们讨论的是应用层(北向)。

在Neutron中,采用SDN 控制器(采用了OpenFlow协议),可以控制流量转发以实现不同虚拟路由器(DVR)的流量负载,通过匹配流表项(Match Flow Table)的方式来实现数据包按照自定义的OpenFlow规则实现Qos功能,不同的应用业务,使用不同的流转发方式,Normal或Flow。

目前,已知的Neutron和SDN控制器集成现状(网络虚拟化NFV方面不在此表),如下所示:

项目

描述

主导团队

Networking-odl

Odl专注于SDN Controller方面

众多第三方网络提供商

Networking-onos

Onos专注于sdn controller方面,ml2、ml3均实现集成

华为

Networking-ofagent(ryu)

ryu专注于sdn controller方面,该项目已很久未更新

日本NTT公司

这里,我以Networking-ofagent(ryu)和neutron集成为例做讲解,其他控制器与之类似。

首先,我们需要知道sdn controller是以mechanism_drivers的方式与Neutron ML2 Plugin做集成,这些代码,均统一存放于neutron/plugins/ml2/drivers目录下,其实现集成的核心是driver.py模块。

参见Neutron代码的入口配置文件neutron/setup.cfg(neutron.ml2.mechanism_drivers部分),格式为key=value,value为代码目录,其代码如下:

ryu中的driver.py模块代码,代码仅2行,如下所示

代码的含义是指,首先从networking_ofagent项目安装包的源码目录中(若集成,需要自行安装、配置),导入一个mech_ofagent的模块,用于和Neutron集成,该模块中,有一个OfagentMechanismDriver的基类,用于完成Neutron ML2中诸如port、subnet、network等资源的create、delete、add等操作,或者是使用ofagent L2代理连接到网络。其代码如下所示:

最后。这里,奉上一份目前已知的Neutron项目中各种关于SDN和NFV的Plugin列表(数据来源于文件:neutron/doc/source/stadium/sub_projects.rst)


小结

从最新的Neutron代码中,已经发现了诸如原来的opendaylight和其他一些sdn Plugin,已经开始从项目中移除,统一命名为诸如networking-xxxx之类的独立项目。

Neutron和SDN Controller集成应用的显著意义和作用,个人仍不是太深刻体会。用Controller来控制虚拟机VM的流量和提供全局的网路视图吗——实现网络智能化。截止目前,笔者尚未接触过这方面的环境或看见相关资料,欢迎交流!

是的,Neutron更像是一种架构,需要众多的开发者和用户去参与其中,同时,还需要注意去其糟粕,取其精华。

 
作者简介:徐超:2015——至今,从事OpenStack相关工作。个人倾向于研究OpenStack、SDN和Docker。


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/14921.html
分享到:
相关文章
条评论

登录后才可以评论

徐超 发表于15-11-18
0