首页 首页 云计算 查看内容

Neutron和ONOS集成实践

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

一.Neutron和ONOS集成 1、Neutron和ONOS社区动态 首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔 ...

一.Neutron和ONOS集成

1、Neutron和ONOS社区动态

首先,我们可以从Neutron项目中的doc/source/policies/neutron-teams.rst文件看到,onos和neutron集成项目的相关开发者信息。其Master是一位来自华为印度班加罗尔地区的Vikram Choudhary,负责主导该项目的开发工作。

Area Lieutenant IRCnick
networking-odl FlavioFernandes Flaviof
KyleMestery mestery
networking-onos VikramChoudhary vikram

是的,该项目的主导团队,正是来自于华为,当然也包括中国区的开发者们。

如下图所示,我们还能在review.openstack官网上,看到该项目(networking-onos)的全部Core Reviews。如下图1所示

首先,我们git clone最新的neutron项目代码,从doc/source/stadium/sub_projects.rst文件中,我们可以清晰的看到目前诸如odl、onos之类的sdn plugin在Neutron中的作用和角色定位。比如,odl的角色是在Neutron中担负ML2层、L3层、负载均衡和防火墙这四类资源操作和管理的实现。如下表所示。

Name Functionality
networking-onos_ ml2
networking-odl ml2,l3,lb,fw

这里,值得我们注意的是,事实上,ONOS并不只是实现ML2层的资源,还包括了L3层等资源。应该是由于onos社区这方面的开发尚未结束或openstack社区对于这块文件未及时更新。

在Neutron中,诸如odl、onos之类的sdn plugin 均是以mechanism_drivers的方式,和ML2、L3等之类的网络服务集成,来提供各种功能。而每一个mechanism_drivers都需要实现type_drivers中的各种网络模型,比如我们常用的vlan、vxlan等。Setup.cfg代码选取如下:

Shell

1

2

3

4

5

6

7

8

9

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

neutron.ml2.mechanism_drivers =

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

2.Neutron和ONOS集成实践

我的实践环境,由VMware WorkStations 11搭建的2台VM,具体如下:

ONOS平台 OpenStack平台
Ubuntu14.04 CentOS7.1
ONOS1.3.0 OpenstackLiberty(支持Kilo),由Rdo安装的All-in-one
10.0.0.29 10.0.0.19

友情提示:关于ONOS和OpenStack环境的搭建,SDNLAB上已有丰富的资料,可参考。

在集成之前,请确保你的相关服务是正常运行中的。如下图

1)安装networking-onos(OpenStack Controller Node)

Shell

1

# pip install networking-onos

2)配置ml2_conf.ini文件(OpenStack Controller Node)

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# vim /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]

type_drivers = vxlan

tenant_network_types = vxlan

mechanism_drivers = onos_ml2

...

[ml2_type_vxlan]

vni_ranges = 1001:2000

...

[secutirygroup]

enable_security_group = True

...

[onos]

url_path = http://10.0.0.29:8181/onos/vtn# IP请换成你自己的ONOS_IP

username = karaf

password = karaf

3)更新配置文件(OpenStack Controller Node)

Shell

1

# neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head

4)重启Neutron服务(OpenStack Controller Node)

Shell

1

# systemctl restart neutron-server.service

注意:

如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。

/var/log/neutron/server.log

5)在ONOS命令行中安装所需要的功能

Shell

1

2

3

4

onos> feature:install onos-ovsdatabase

onos> feature:install onos-app-vtnrsc

onos> feature:install onos-app-vtn

onos> feature:install onos-app-vtnweb

6)检查ONOS VTN 功能

浏览器中访问:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP

你会得到一个如下面一样的空的json输出

{"subnets":[]}

7)设置网桥连接(OpenStack Network/Compute Nodes)

如果你的OpenStack平台,既有计算节点,也有网络节点,请分别运行如下命令设置。

Shell

1

2

3

4

5

# ovs-vsctl set-manager tcp:10.0.0.29:6640#请换成你自己的ONOS_IP

使用ovs-vsctl show命令,检查设置情况。

# ovs-vsctl show

2924ffa8-cad5-469c-a4c6-6785e79036ac

Manager "tcp:10.0.0.29:6640"

8)在Horizon 上,创建一个network和subnet。下图是我创建的一个结果。

9)使用REST client检查REST。这里,我使用的是Google的Postman插件。

输入URL:http://10.0.0.29:8181/onos/vtn/subnets #请换成你自己的ONOS_IP

正常情况下,你应该得到如下输出

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

{

"subnets": [

{

"id": "6a3e9b3c-7993-4b85-a5b8-f225ff68a8d7",

"gateway_ip": "10.0.0.2",

"network_id": "e376be13-481b-481d-818b-aed4d9fce8a5",

"name": "external_subnet",

"ip_version": "INET",

"cidr": "10.0.0.0/24",

"shared": true,

"enabled_dchp": false,

"tenant_id": "5e7d2d5df0534fb087aac1b6f7bf8ca4",

"ipv6_address_mode": null,

"ipv6_ra_mode": null,

"allocation_pools": [

{

"start": "10.0.0.100",

"end": "10.0.0.150"

}

],

"host_routes": [ ]

}

]

}

10)在VXLAN模式下,创建一个可以ping通外网的虚拟机。

11)使用REST Client,使用GET方法获取REST Port

http://10.0.0.29:8181/onos/vtn/ports

12)登录ONOS UI。Topology上查看link br-int to br-int;vm to br-int

http://10.0.0.29:8181/onos/ui

13)Flow验证

由于onos集成neutron,不支持br-tun隧道。因此,环境中的br-int充当了br-tun的功能和角色。如果,你的环境中既有计算、也有网络节点,请分别在网络和计算节点上查看Flow。

由于,我部署的是all-in-one平台,因此运行一次即可。

Shell

1

2

3

4

5

6

7

8

9

# ovs-ofctl dump-flows br-int #如果你指定的协议是openflow13,请添加参数 –O openflow13

NXST_FLOW reply (xid=0x4):

cookie=0x82a481adf93d8421, duration=747.216s, table=0, n_packets=0, n_bytes=0, idle_age=747, priority=10,icmp6,in_port=8,icmp_type=136 actions=resubmit(,24)

cookie=0x82a481adf93d8421, duration=747.201s, table=0, n_packets=4, n_bytes=168, idle_age=424, priority=10,arp,in_port=8 actions=resubmit(,24)

cookie=0x82a481adf93d8421, duration=2635.490s, table=0, n_packets=372, n_bytes=40966, idle_age=424, priority=0 actions=NORMAL

cookie=0x82a481adf93d8421, duration=2635.480s, table=23, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop

cookie=0x82a481adf93d8421, duration=747.226s, table=24, n_packets=0, n_bytes=0, idle_age=747, priority=2,icmp6,in_port=8,icmp_type=136,nd_target=fe80::f816:3eff:fec3:e7a3 actions=NORMAL

cookie=0x82a481adf93d8421, duration=747.209s, table=24, n_packets=4, n_bytes=168, idle_age=424, priority=2,arp,in_port=8,arp_spa=192.168.0.3 actions=NORMAL

cookie=0x82a481adf93d8421, duration=2635.469s, table=24, n_packets=0, n_bytes=0, idle_age=2635, priority=0 actions=drop

3、目前已知的集成问题

1) 不支持br-tun

onos-ovsdatabase (sudo ovs-vsctl set-manager tcp:ONOS_IP:6640)

  • tunnel create using br-int

management network

  • 不支持data network

2) Buffalo SW(个人理解是指物理的网络扩展)

  • Buffalo SW is OpenWRT

install OVS

  • Buffalo SW connect ONOS(该OpenFlow交换机是一个物理交换机)

sudo ovs-vsctl set-controller

二、如何和ONOS社区建立互动

如上述的图1所示,是ONOS和Neutron集成项目(networking-onos)的核心开发者姓名和邮件,如有问题可以通过邮件方式进行沟通,放心,开发者们都很及时和热心的。

此外,还可以在ONOS的官网论坛上,发帖讨论(地址:http://forum.onosfw.com)。

ONOS与OpenStack相关的blueprints地址:

https://blueprints.launchpad.net/neutron/+spec/onos-neutron-interaction

networking-onos 在github上的地址:

https://github.com/openstack/networking-onos

小结

本次实验环节中比较突出的现象是,将mechanism_drivers的默认openvswitch,替换为onos_ml2后,在网络的使用方面,感觉不是很稳定。当然,或许该技术目前只是初期阶段吧(2015年3月立项),我们也有理由相信,它会变得更好。

从个人角度而言,诸如LB、FW、VPN、ML2、L3之类的网络服务,Neutron本身就已经实现了,之所以可以用sdn plugin去替换它们来实现。不仅只是让用户更加多了一种选择,而且在其应对大规模的复杂网络、网络调优/计算时更加显得突出——相信这也是众多SDN/NFV Plugin项目的初衷之一吧!

最后,需要指出的是,本次实践的成功,离不开社区开发者们的努力和帮助,尤其是华为的那些朋友们!在此,一并表示感谢!

作者简介:

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

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

华为 负载均衡 网络服务 网络模型
0

聚焦多智时代,引领智能变革

© 多智时代(www.duozhishidai.com)版权所有 / 工信部备案 豫ICP备15012664号-1