首页 首页 云计算 查看内容

Neutron和SDN集成现状分析

木马童年 2018-8-10 20:56 24 0

一.Neutron概要 众所周知,Neutron是OpenStack众多项目中的核心项目之一,代表其网络服务。Neutron的发展自诞生到现在,可谓是一波三折,其命名先是由nova-network,改为quantum,因其与一家公司名冲突,隧又改为N ...

一.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,其代码如下:

Shell

1

2

3

4

5

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部分),其代码如下:

Shell

1

2

3

4

5

6

7

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

项目

描述

主导团队

Networking-odl

Odl专注于SDNController方面

众多第三方网络提供商

Networking-onos

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

华为

Networking-ofagent(ryu)

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

日本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为代码目录,其代码如下:

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

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行,如下所示

Shell

1

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代理连接到网络。其代码如下所示:

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

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)

小结

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

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

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

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

在不久的将来,多智时代一定会彻底走入我们的生活,有兴趣入行未来前沿产业的朋友,可以收藏多智时代,及时获取人工智能、大数据、云计算和物联网的前沿资讯和基础知识,让我们一起携手,引领人工智能的未来!

0
为您推荐
一个可靠的云计算数据管理策略,需要考虑哪五个重要因素

一个可靠的云计算数据管理策略,需要考虑哪

  作为企业业务的生命线,云中的数据必须容易获得,以提高企业的灵活性和创新能力,…...

政务云:促进信息整合共享,提升政府公共服务

政务云:促进信息整合共享,提升政府公共服

1月20日,四川省级政务云开通上线两周年当天,记者从省政府办公厅获悉,各部门业务应…...

云计算风起云涌正成为中国经济新的增长点

云计算风起云涌正成为中国经济新的增长点

“过去一年,云计算成为中国信息产业中表现最为亮眼的分支之一,整体增速达到40%。”…...

智能社会“转型”战鼓起,“边缘计算”正当时

智能社会“转型”战鼓起,“边缘计算”正当

CNET科技资讯网 1月13日 特别报道(文/周雅):五年之后的无人驾驶汽车,你不会希望云…...

构建云安全的第一要务是什么

构建云安全的第一要务是什么

  云计算和大数据已经成为信息技术领域不可逆转的发展方向,而云安全却成了看发展过…...

Docker生态系统系列之网络和通信

Docker生态系统系列之网络和通信

网络一直是Docker集群中的最令人头疼的问题,目前Docker已经收购了SocketPlane团队来…...

云时代的涉密安全 加密软件击退三大挑战

云时代的涉密安全 加密软件击退三大挑战

近年来,“云计算”成为全球信息技术领域的最大热点,云时代的降临也成为了不可扭转的…...

托管私有云为IT提供了经济高效的选择

托管私有云为IT提供了经济高效的选择

云计算评估需要企业的详细的计划和成本分析。借助可用的技术和托管服务提供商的服务,…...

如何消除对多云的误解?

如何消除对多云的误解?

  如今,云计算技术为企业提供了多种好处,其中包括灵活性、易用性和提供时间等。Ve…...

赛门铁克:针对性网络攻击日盛

赛门铁克:针对性网络攻击日盛

今年不断听到全球有各种大牌公司遭到黑客攻击,包括了各国政府机构和知名商业公司,甚…...