一.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 层,由虚拟交换机来实现。虚拟交换机有下列这些:

l Linux 网桥,基于 Linux 内核的网桥。网桥就是交换机的具体体现,比如OpenStack中常见的br-int。

l OpenvSwitch(OVS):OVS 有两种模式,一种是当普通的虚拟交换机来使用,另一个是和 OpenFlow 控制器协作当作SDN交换机来使用。

l 一些基于 Overlay 技术的 SDN 实现,如VXLAN等。

l 一些非开源的商业交换机。

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

1

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

neutron.core_plugins =

bigswitch = neutron.plugins.bigswitch.plugin:NeutronRestProxyV2

brocade = neutron.plugins.brocade.NeutronPlugin:BrocadePluginV2

ml2 = neutron.plugins.ml2.plugin:Ml2Plugin

nuage = neutron.plugins.nuage.plugin:NuagePlugin

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

neutron.ml2.type_drivers =

flat = neutron.plugins.ml2.drivers.type_flat:FlatTypeDriver

local = neutron.plugins.ml2.drivers.type_local:LocalTypeDriver

vlan = neutron.plugins.ml2.drivers.type_vlan:VlanTypeDriver

geneve = neutron.plugins.ml2.drivers.type_geneve:GeneveTypeDriver

gre = neutron.plugins.ml2.drivers.type_gre:GreTypeDriver

vxlan = neutron.plugins.ml2.drivers.type_vxlan:VxlanTypeDriver

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方面不在此表),如下所示:

2

这里,我以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为代码目录,其代码如下:

neutron.ml2.mechanism_drivers =

logger = neutron.tests.unit.plugins.ml2.drivers.mechanism_logger:LoggerMechanismDriver

test = neutron.tests.unit.plugins.ml2.drivers.mechanism_test:TestMechanismDriver

linuxbridge = neutron.plugins.ml2.drivers.linuxbridge.mech_driver.mech_linuxbridge:LinuxbridgeMechanismDriver

openvswitch = neutron.plugins.ml2.drivers.openvswitch.mech_driver.mech_openvswitch:OpenvswitchMechanismDriver

hyperv = neutron.plugins.ml2.drivers.hyperv.mech_hyperv:HypervMechanismDriver

l2population = neutron.plugins.ml2.drivers.l2pop.mech_driver:L2populationMechanismDriver

ofagent = neutron.plugins.ml2.drivers.ofagent.driver:OfagentMechanismDriver

brocade = networking_brocade.vdx.ml2driver.mechanism_brocade:BrocadeMechanism

brocade_fi_ni = neutron.plugins.ml2.drivers.brocade.fi_ni.mechanism_brocade_fi_ni:BrocadeFiNiMechanism

fslSDN = neutron.plugins.ml2.drivers.freescale.mechanism_fslSDN:FslSDNMechanismDriver

sriovnicswitch = neutron.plugins.ml2.drivers.mech_sriov.mech_driver.mech_driver:SriovNicSwitchMechanismDriver

fake_agent = neutron.tests.unit.plugins.ml2.drivers.mech_fake_agent:FakeAgentMechanismDriver

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

from networking_ofagent.plugins.ml2.drivers import mech_ofagent

OfagentMechanismDriver = mech_ofagent.OfagentMechanismDriver

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

class OfagentMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):

"""Attach to networks using ofagent L2 agent.

The OfagentMechanismDriver integrates the ml2 plugin with the

ofagent L2 agent. Port binding with this driver requires the

ofagent agent to be running on the port's host, and that agent

to have connectivity to at least one segment of the port's

network.

"""

def __init__(self):

sg_enabled = securitygroups_rpc.is_firewall_enabled()

vif_details = {portbindings.CAP_PORT_FILTER: sg_enabled,

portbindings.OVS_HYBRID_PLUG: sg_enabled}

super(OfagentMechanismDriver, self).__init__(

constants.AGENT_TYPE_OFA,

portbindings.VIF_TYPE_OVS,

vif_details)

def get_allowed_network_types(self, agent):

return (agent['configurations'].get('tunnel_types', []) +

[p_constants.TYPE_LOCAL, p_constants.TYPE_FLAT,

p_constants.TYPE_VLAN])

def get_mappings(self, agent):

return dict(agent['configurations'].get('interface_mappings', {}))

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

3

4

5

小结

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

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

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

个人简介

徐超:任职于九州云信息科技有限公司(上海),从事OpenStack相关工作。个人倾向于研究CI-CT-CD-CD。

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排 行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党
2019-06-27 17:13:59
大数据资讯 锐捷Wi-Fi 6助力大连外国语大学校园无线网新飞跃
随着学校信息化的发展,大连外国语大学越来越重视学校的无线网络建设,计划全方位构建校园Wi-Fi,全面深入地运用现代信息技术来促进教育改革,实现教育创新的跨越式发展。 <详情>
2019-05-14 16:05:00
机房建设 全球SDN测试认证中心定制化测试服务助力数据中心网络转型
随着云计算的兴起和网络转型的不断深入,数据中心也正在面临着诸多挑战,为了适应业务的快速变化,数据中心转型也在加速进行,构建简单、开放、弹性的数据中心网络成为了趋 <详情>
2019-01-10 11:27:36
云技术 软件定义网络如何推动多云发展
如今,多云世界已经真正到来。很多组织采用多个公共云(如AWS、谷歌云、Microsoft Azure)、私有云、云计算基础服务(如SaaS、IaaS),以及在一个或多个数据中心托管工作负载和 <详情>
2019-01-10 10:48:18
市场情报 浙江电信基于SDN NFV的物联网超大规模认证资源池突破十万终端规模
作为中国电信省级运营单位中的排头兵,浙江电信积极践行CTNet2025,在网络重构与转型3.0战略中一直扮演着先行者的角色。近日,浙江电信在此方面的工作再次取得重大进展,在 <详情>
2018-12-14 09:07:33
运营商 5G催生运营商裁员潮?这个真的不用担心!
自2018年以来,裁员逐渐成为电信运营商的热门话题。 <详情>