ONOS 开发教程01-简介和快速使用

作者:seriouszyx
首发地址:https://seriouszyx.com
代码均可在 GitHub 上找到

SDN 控制器发展

控制器算是 SDN 中相当重要的技术了,SDN 概念刚刚兴起时,各个控制器逐一展露头角,经过十几年的沉浮后,作为主流使用且仍旧蓬勃发展的却为数不多了。
2008年的时候,OpenFlow 论文问世,Nicira 开源了业界第一款 SDN 控制器 NOX,C++ 编写,算是控制器们的祖师爷,但当时只在学术圈有影响。
2009年,Nicira 团队又发布了 NOX 的纯 Python 实现版本 POX,目的是提供跨平台部署的便利性。
2012年,Ryu 诞生,Python 编写,能够与 OpenStack 整合,算是 POX 的后代。与此同时,Floodlight 也正式发布,Java 编写,称得上是接下来两款重量级控制器的妈。这两款仍属于轻量级控制器,它们在多控制器之间的交互协议上还是一片空白,没有一个统一的解决方案。
2013年,Linux 基金会和多家网络巨头(Cisco、Juniper、Broadcom 等)创立开源项目 OpenDaylight(ODL),开启一个崭新的时代。OpenDaylight 不仅仅是一个SDN控制器,它更是一个庞大的开源项目,其中包含许多子项目,而 Controller 只是其中的一个子项目。从诞生到2014年底,OpenDaylight 风光无限,许多企业都基于它开发自己的控制器,管理数据中心网络。
直到2014年12月5日,由 ON.Lab 开发的 ONOS 问世,Java 编写,采用 OSGi 架构,其目标是打造一个开放的SDN网络操作系统。ONOS 底层模块直接借用 FloodLight 优秀的模块如 Switch 模块,不使用 YANG 语言(ODL 使用)建模,最新版本使用Raft作为分布式框架。
作为目前最受欢迎的两款开源控制器,OpenDaylight 和 ONOS 在业界非常的火,至于 Ryu/Floodlight 之类,只能靠后站了。OpenDaylight作为 企业(数据中心场景) 主推的控制器,支持的功能较多,也更庞杂;而 ONOS运营商主推的控制器,更加贴近运营商的场景。
具体来讲,ODL 采取了更为平缓的 SDN 演进方式,从理念上更为贴近广义的 SDN,即不局限于 OpenFlow 协议,不局限于完全将控制平面从转发设备上剥离,通过已有的网络协议将部分的控制逻辑放到 Controller 上。
ONOS 更贴近于 SDN 诞生之初时狭义的 SDN 概念,即通过 OpenFlow 将控制平面和转发平面完全分离,网络设备只是进行转发的黑盒子,通过 Controller 完成一切计算。ONOS 所选择的理念与运营商自己的利益息息相关,只有将控制能力拿到自己手里,才能在整条产业链上逐步摆脱设备厂商的控制。

ONOS 快速使用

因为要与 VNFs 做对接,ONOS 显然更符合 NFV 的思想,所以研究中选择 ONOS 作为主要开发的控制器。
虽然在 SDN 控制器中 ONOS 的文档算不错的了,但仍不是很全面,难免踩一些坑。我接下来文章中的一系列配置都以官方文档为主,外加一些自己喜好的使用方式。在搭建环境上,ONOS 有多种方式,这里先使用 Release 包,官方的 wiki 在这里。
我使用的操作系统是 Ubuntu 18.04,首先需要确保下面这些端口开放:

  • 8181 - REST API 和 GUI
  • 8101 - ONOS CLI
  • 9876 - 集群内通信
  • 6653 - Openflow 通信
  • 6640 - OVSDB

我们要安装的是最新版的 ONOS,目前版本号是 2.4.0,依赖 Java 版本为 Java11,另外 curl 也需要安装。

sudo apt install openjdk-11-jdk
sudo apt-get install curl

假设要安装到 /opt 下,创建目录。

sudo mkdir /opt
cd /opt

根据版本下载 ONOS 压缩包,官方提供了一个下载页面,复制相应链接后即可下载,下载速度问题自行解决。

sudo wget -c https://repo1.maven.org/maven2/org/onosproject/onos-releases/2.4.0/onos-2.4.0.tar.gz
sudo tar xzf onos-2.4.0.tar.gz
sudo mv onos-2.4.0 onos

直接使用脚本开启 ONOS。

/opt/onos/bin/onos-service start

稍等片刻后,即可访问 GUI 界面。
ONOS 开发教程01-简介和快速使用_第1张图片

默认用户名为 onos ,默认密码为 rocks 。登录后可以看到拓扑界面,因为还没有连接网络设备,所以暂无信息。
ONOS 开发教程01-简介和快速使用_第2张图片

在 **Applications **界面中可以看到目前集成的所有插件,选择 OpenFlow Provider Suite (支持 OpenFlow 协议)和 Reactive Forwording 安装。
我们先使用轻量级软件定义网络和测试平台——Mininet 来测试控制器,可以直接使用 apt 下载安装。

apt install mininet

安装后可以连接正在运行的 ONOS。

mn --controller=remote,ip=<Controller IP> --topo=linear,3 --switch ovsk,protocols=OpenFlow13

如果不安装 OpenFlow Provider Suite 插件,是无法正常连接的。连接成功后,拓扑界面会显示三个 switch,因为还没有数据包传输,所以 switch 还感知不到 host 的存在,界面上也没有相应的显示。在 mininet 中输入 pingall 命令,各个 host 间 ping 通,遵循 Reactive Forwording插件的包转发规则。
再回到拓扑界面,显示 switch 和 host。
ONOS 开发教程01-简介和快速使用_第3张图片
CLI 和 GUI 的全部功能可以在文档中找到,这里就不过逐一介绍了。
为了让 ONOS 在后台长期运行,可以将它注册成服务,不过我更喜欢使用 docker 的方式,下一部分会主要介绍。

Docker 运行 ONOS

我一般将 ONOS 部署到内网中的一台服务器上运行,服务器多人使用,所以不方便随便修改环境,比如 ONOS 2.4.0 要求 JDK 11。docker 的虚拟环境可以解决这一问题,且官方提供镜像,又节省了配置环境的时间。
docker 的安装不过多介绍,网上的教程一搜一大把,最好配置下国内源。安装好后拉取官方镜像。

docker pull onosproject/onos:2.4.0

后台运行。

docker run -t -d -p 8181:8181 -p 8101:8101 -p 5005:5005 -p 830:830 -p 6633:6633 --name onos onosproject/onos:2.4.0

上面的命令已经完成了端口映射,即将容器内部的端口映射到主机的端口,允许外网访问容器。将 mininet 启动时的 ip 改为这台服务器的 ip,即可连接容器内运行的 ONOS。
上述的两条命令就完成了 ONOS 的部署,与手动安装相比,效率成倍提高。

参考:

  • SDN 发展历史
  • SDN 控制平面发展历史及趋势
  • ONOS与OpenDayLight有什么本质区别?
  • SDN闲扯—理性对待新技术
  • Docker 部署 SDN 环境

你可能感兴趣的:(SDN,SDN,NFV,ONOS)