Neutron和SDN集成化现况剖析

Neutron和SDN集成化现况剖析 从全新的Neutron编码中,早已发现了诸如原先的opendaylight和别的1些SDN Plugin,早已刚开始从新项目中移除,统1取名为诸如working-xxxx之类的单独新项目。 作者:徐超

1.Neutron概述

总所周知,Neutron是OpenStack诸多新项目中的关键新项目之1,意味着其互联网服务。

Neutron的发展趋势自诞生到如今,可以说是1波3折,其取名起先由nova-work,改成quantum,因其与1家企业名矛盾,隧又改成Neutron。表层上的取名转变,又未尝不包含着其深层次次的发展趋势和演进,以Plugin、高級互联网服务作用等突显运用,充足显示信息着它持续的丰富多彩,就像其取名 中子 1样,彰明显它在浩瀚无垠宇宙中,熠熠生辉的光辉。

下面,借用 北京-小武 1文《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、Sub、Network、Qos、安全性组等,Linux 网桥是虚似互换机的1种完成,ML2 层应用 VLAN 和VXLAN(运用 L3 层拓展ML2 层的遂道技术性)来完成物理学防护。

在ML2 层,由虚似互换机来完成。虚似互换机有以下这些:

l Linux 网桥,根据 Linux 核心的网桥。网桥便是互换机的实际反映,例如OpenStack中普遍的br-int。

l OpenvSwitch(OVS):OVS 有两种方式,1种是当一般的虚似互换机来应用,另外一个是和 OpenFlow 操纵器合作作为SDN互换机来应用。

l 1些根据 Overlay 技术性的 SDN 完成,如VXLAN等。

l 1些非开源系统的商业服务互换机。

现阶段,Neutron 早已完成的 ML2 层Drivers以下图所示(Liberty版编码)。

linuxbridge 完成了 Linux 的核心网桥,openvswitch driver完成了 openvswitch 网桥,hyperv driver用于完成和微软的Hyper-V虚似化商品开展互动,brocade的driver用于和博科的SDN商品开展互动,别的相近。ml2 是1种通用性、关键且基本的软件,这些 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 能够了解为1个公共性的 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(1般用在WAN的路由器器上)。

3)L4-L7作用

L4-L7作用,包含FWaas、LBaas、VPNaas、DNSaas-Designate等服务。

从互联网作用和对应的最底层互联网机器设备完成看来,Port对应VM挂载的VNIC相应TAP/TUN机器设备,Sub只是1个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统1起来,只剩余Neutron的北向API及Neutron server。

2.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-ofagent(ryu)和neutron集成化为例做解读,别的操纵器与之相近。

最先,大家必须了解SDN controller是以mechanism_drivers的方法与Neutron ML2 Plugin做集成化,这些编码,均统1储放于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 = working_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 working_ofagent.plugins.ml2.drivers import mech_ofagent

OfagentMechanismDriver = mech_ofagent.OfagentMechanismDriver

编码的含意是指,最先从working_ofagent新项目安裝包的源代码文件目录中(若集成化,必须自主安裝、配备),导入1个mech_ofagent的控制模块,用于和Neutron集成化,该控制模块中,有1个OfagentMechanismDriver的基类,用于进行Neutron ML2中诸如port、sub、work等資源的create、delete、add等实际操作,或是应用ofagent L2代理商联接到互联网。其编码以下所示:

class OfagentMechanismDriver(mech_agent.SimpleAgentMechanismDriverBase):

"""Attach to works 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

work.

"""

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_work_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', {}))

最终。这里,奉上1份现阶段已知的Neutron新项目中各种各样有关SDN和NFV的Plugin目录(数据信息来源于于文档:neutron/doc/source/stadium/sub_projects.rst)

小结

从全新的Neutron编码中,早已发现了诸如原先的opendaylight和别的1些SDN Plugin,早已刚开始从新项目中移除,统1取名为诸如working-xxxx之类的单独新项目。

Neutron和SDN Controller集成化运用的明显实际意义和功效,本人仍并不是太刻骨铭心感受。用Controller来操纵虚似机VM的总流量和出示全局性的网路主视图吗 完成互联网智能化化。截止现阶段,笔者并未触碰过这层面的自然环境或看见有关材料,欢迎沟通交流!

是的,Neutron更好像1种构架,必须诸多的开发设计者和客户去参加在其中,另外,还必须留意取其精华,取其精粹。

本人简介

徐超:就职于9州云信息内容高新科技比较有限企业(上海市),从业OpenStack有关工作中。本人趋向于科学研究CI-CT-CD-CD。


2018⑴2⑴4 09:07:33 经营商 5G催生经营商裁人潮?这个真的无需担忧! 自2018年以来,裁人慢慢变成电信经营商的热门话题。

相关阅读