前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Neutron和ONOS集成实践

Neutron和ONOS集成实践

作者头像
SDNLAB
发布于 2018-04-03 03:25:27
发布于 2018-04-03 03:25:27
1.6K00
代码可运行
举报
文章被收录于专栏:SDNLABSDNLAB
运行总次数:0
代码可运行

一.Neutron和ONOS集成

1、Neutron和ONOS社区动态

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

Area

Lieutenant

IRC nick

networking-odl

Flavio Fernandes

Flaviof

Kyle Mestery

mestery

networking-onos

Vikram Choudhary

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代码选取如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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平台

Ubuntu 14.04

CentOS 7.1

ONOS 1.3.0

Openstack Liberty(支持Kilo),由Rdo安装的All-in-one

10.0.0.29

10.0.0.19

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# pip install networking-onos

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# systemctl restart neutron-server.service

注意: 如果在配置ONOS driver和Neutron集成时,提示错误,请查看如下日志文件。 /var/log/neutron/server.log

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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平台,既有计算节点,也有网络节点,请分别运行如下命令设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ovs-vsctl set-manager tcp:10.0.0.29:6640      #请换成你自己的ONOS_IP</p>
使用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 正常情况下,你应该得到如下输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
"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平台,因此运行一次即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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、V**、ML2、L3之类的网络服务,Neutron本身就已经实现了,之所以可以用sdn plugin去替换它们来实现。不仅只是让用户更加多了一种选择,而且在其应对大规模的复杂网络、网络调优/计算时更加显得突出——相信这也是众多SDN/NFV Plugin项目的初衷之一吧!

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SDNLAB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React字符串形式的ref
在React中,我们可以使用字符串形式的ref来引用组件或DOM元素。字符串形式的ref是一种较早的ref使用方式,它允许我们通过字符串将ref与组件或DOM元素进行关联。
堕落飞鸟
2023/05/19
5820
在React 中,如何创建refs?
在类组件中,可以使用 React.createRef() 方法来创建 ref 对象。通常,在组件的构造函数中将 ref 赋值给类的实例属性。
王小婷
2023/10/10
7770
React 中refs的使用方法和步骤
在 React 中,ref 是一种用于访问组件或 DOM 元素的引用的特殊属性。在组件中存储对 DOM 节点或组件实例的引用,直接访问和操作
王小婷
2023/10/10
4480
【React】:Refs
Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素。
WEBJ2EE
2020/04/07
1.1K0
[OHIF-Viewers]医疗数字阅片-医学影像-REACT-React.createRef()-Refs and the DOM关于回调 refs 的说明
Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素。
landv
2020/07/09
1.8K0
React ref 的前世今生
众所周知,React 通过声明式的渲染机制把复杂的 DOM 操作抽象成为简单的 state 与 props 操作,一时圈粉无数,一夜间将前端工程师从面条式的 DOM 操作中拯救出来。尽管我们一再强调在 React 开发中尽量避免 DOM 操作,但在一些场景中仍然无法避免。当然 React 并没有把路堵死,它提供了 ref 用于访问在 render 方法中创建的 DOM 元素或者是 React 组件实例。
Nealyang
2019/09/29
8980
浅谈 React Refs
在React组件中,props是父组件与子组件的唯一通信方式,但是在某些情况下我们需要在props之外强制修改子组件或DOM元素,这种情况下React提供了Refs解决
IMWeb前端团队
2019/12/03
1K0
浅谈 React Refs
React的三大属性之refs的一些简单理解
React 将在组件挂载时,会调用 ref 回调函数并传入 DOM 元素,当卸载时调用它并传入 null。在 componentDidMount 或 componentDidUpdate 触发前,React 会保证 refs 一定是最新的。
henu_Newxc03
2021/12/26
8720
小结React(三):state、props、Refs
在React中state、props、Refs都是最基础的概念,本文将同时梳理下这三个知识点,主要内容包括:
前端林子
2019/05/02
7.5K1
小结React(三):state、props、Refs
React框架基础
郭顺发
2023/07/17
2260
react面试题
调用setState之后发生了什么? 在代码中调用setState函数之后,React 会将传入的参数对象与组件当前的状态合并,然后触发所谓的调和过程(Reconciliation)。经过调和过程,React 会以相对高效的方式根据新的状态构建 React 元素树并且着手重新渲染整个UI界面。在 React 得到元素树之后,React 会自动计算出新的树与老树的节点差异,然后根据差异对界面进行最小化重渲染。在差异计算算法中,React 能够相对精确地知道哪些位置发生了改变以及应该如何改变,这就保证了按需更新,而不是全部重新渲染。 扩展1: setState的第一个参数除了对象,还能传什么? ---函数,参数为当前state
用户7162790
2022/03/23
7260
腾讯前端二面react面试题合集
该方法当props发生变化时执行,初始化render时不执行,在这个回调函数里面,你可以根据属性的变化,通过调用this.setState()来更新你的组件状态,旧的属性还是可以通过this.props来获取,这里调用更新状态是安全的,并不会触发额外的render调用。
goClient1992
2022/09/14
1.8K0
React回调形式的ref
在React中,我们可以使用回调形式的ref来引用组件或DOM元素。回调形式的ref允许我们在组件渲染后执行自定义的回调函数,并将组件或DOM元素的引用作为参数传递给回调函数。
堕落飞鸟
2023/05/19
6950
React篇(033)-如何创建 refs?
这里有两种方案 这是最近增加的一种方案。Refs 是使用 React.createRef() 方法创建的,并通过 ref 属性添加到 React 元素上。为了在整个组件中使用refs,只需将 ref 分配给构造函数中的实例属性。 class MyComponent extends React.Component { constructor(props) { super(props) this.myRef = React.createRef() } render() { r
齐丶先丶森
2022/05/12
6330
前端必会react面试题合集2
(2)如果已经创建了 Create React App 项目,需要将 typescript 引入到已有项目中
beifeng1996
2023/01/04
2.3K0
常见react面试题(持续更新中)
每个React组件强制要求必须有一个 render()。它返回一个 React 元素,是原生 DOM 组件的表示。如果需要渲染多个 HTML 元素,则必须将它们组合在一个封闭标记内,例如 <form>、<group>、<div> 等。此函数必须保持纯净,即必须每次调用时都返回相同的结果。
beifeng1996
2022/12/16
2.7K0
【React】243- 在 React 组件中使用 Refs 指南
本文通过四种方式来告诉你如何使用,虽然有一种被放弃了。今日早读文章由老虎集团@joking_zhang翻译授权分享。
pingan8787
2019/07/25
4.1K0
【React】243- 在 React 组件中使用 Refs 指南
从 0 到 1 实现 React 系列 —— 4.setState优化和ref的实现
看源码一个痛处是会陷进理不顺主干的困局中,本系列文章在实现一个 (x)react 的同时理顺 React 框架的主干内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/ref/...)
牧云云
2018/08/14
8470
从 0 到 1 实现 React 系列 —— 4.setState优化和ref的实现
React 16.3新API
之前也有context,相当于自动向下传递的props,子树中的任意组件都可以从context中按需取值(配合contextTypes声明)
ayqy贾杰
2019/06/12
1.1K0
React 16.3新API
【React】你想知道的关于 Refs 的知识都在这了
Refs 提供了一种方式,允许我们访问 DOM 节点或在 render 方法中创建的 React 元素。
Nealyang
2019/11/08
3.1K0
相关推荐
React字符串形式的ref
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验