地  址:江苏省南京市玄武区玄武湖
电  话:4008-888-888
邮  箱:9490489@qq.com
商  务QQ:3870238121
国外免费建站空间:Neutron和SDN集成现状分析
作者:管理员    发布于:2020-06-09 00:40   文字:【】【】【
Neutron和SDN集成现状分析 从最新的Neutron代码中,现已发现了诸如本来的opendaylight和别的一些SDN Plugin,现已初步从项目中移除,统一命名为诸如working-xxxx之类的独立项目。 作者:徐超

一.Neutron提要

总所周知,Neutron是OpenStack浩瀚项目中的核心项目之一,代表其网络效劳。

Neutron的开展自诞生到目前,堪称是一波三折,其命名先是由nova-work,改为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、Sub、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版代码)。

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设施,Sub只是一个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-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 = 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项目装配包的源码目录中(若集成,需要自行装配、配置),导入一个mech_ofagent的模块,用于和Neutron集成,该模块中,有一个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', {}))

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

小结

从最新的Neutron代码中,现已发现了诸如本来的opendaylight和别的一些SDN Plugin,现已初步从项目中移除,统一命名为诸如working-xxxx之类的独立项目。

Neutron和SDN Controller集成应用的显著含义和作用,小我私家仍不是太深入领会。用Controller来管束虚构机VM的流量和提供全局的网路视图吗 完成网络智能化。截止现在,笔者还没有触摸过这方面的环境或看见相关材料,欢迎沟通!

是的,Neutron更像是一种架构,需要浩瀚的开发者和用户去参加其间,同时,还需要注意去其糟粕,取其精髓。

小我私家简介

徐超:任职于九州云信息科技有限公司(上海),从事OpenStack相关事件。小我私家偏向于研讨CI-CT-CD-CD。


2018-12-14 09:07:33 经营商 5G催生经营商裁人潮?这个真的不消忧虑! 自2018年以来,裁人渐渐成为电信经营商的热门话题。
Copyright © 2002-2020 免费制作app网站_免费建站的网站_宣传网站制作_9免费建站的网站_免费网页制作模板 版权所有 (网站地图
地址:江苏省南京市玄武区玄武湖 电话:4008-888-888
邮箱:9490489@qq.com QQ:3870238121