OpenStack、OpenDayLight、硬件SDN交换机集成

By | 2017年5月21日

本文将讲述如何在OpenStack中使用SDN交换机,同时将OpenDayLight作为控制器,测试网络类型为vxlan。

本文适用目标为OpenStack Neutron组件,但理论上说包括任何可使用Neutron组件服务的云管理平台,比如oVirt。

在搭建Neutron时,笔者使用了现成的OpenStack单节点平台(可以参考https://github.com/lofyer/openstack-pxe-deployment,为防止出现3.1节末的错误,请使用Newton之前版本,我手贱部署了最新的),但为了减少搭建部署的麻烦,我会在后期尝试直接使用Neutron VM Appliance,方便集成(暂不确定是否影响性能)。

update 2017-05-27: 当前版本zstack的云路由功能vyos所实现的nfv软路由,笔者会考虑将Neutron移植到ZStack中,如此以来SDN即可将注意力主要放在Neutron。

update 2017-06-01: 加入盛科交换机,4.10内核的vtep可直接内核实现,参考Linux doc

update 2017-06-07: OpenStack版本从Ocata切换为Newton,实验3.3重新做了。

update 2017-06-12: 使用 Neutron appliance,并添加hooks,构建ZStack SDN解决方案,来源可自行搜索oVirt的相关资料

1. 环境准备

Pica8 P-5101 48+4*8 10Gb SDN交换机2台(吵地脑袋疼),OpenStack Ocata,OpenDayLight Lastest,管理机器。

mininet虚拟机地址:192.168.0.68

操作机地址:192.168.0.55

2. 架构方案与mininet环境模拟实验

拓扑使用miniedit制作,同时首选项中打开“Start CLI”,操作机“ssh -Y mininet@MININET_IP”后,运行“sudo ~/mininet/examples/mininet.py”以开启。

2.1. 基础模拟实验——交换机互联

文字描述可参考http://blog.scottlowe.org/2012/11/27/connecting-ovs-bridges-with-patch-ports/以及其中链接。

miniedit拓扑:

目的:连接两个交换机,使得h1与h3互通。

方法:将两个交换机上的一个端口组组成patch。

结果:

2.2. 进阶实验——流表

miniedit拓扑:同上。

目的:阻断h1与h2、h2与h3,使得h1与h3互通。

方法:下发如下流表。

结果

3. 综合实验环境配置

首先来看一下实验拓扑:

图。。。。。。

SDN交换机
管理地址:192.168.0.250/24,

OpenStack Controller/Neutron
IP: 192.168.0.80

OpenDayLight
IP: 192.168.0.90
Web: http://192.168.0.90:8181/index.html

3.1. 设置OpenDayLight

在主机192.168.0.90上下载启动Boron版本OpenDayLight(其他版本未测试),然后解压运行(需要Java环境):

然后访问http://192.168.0.90:8181/index.html,用户密码为admin/admin,可以看到我们刚刚添加的本地OVS。

3.3. OpenStack与OpenDayLight集成

首先要清除原有的实例和neutron网络。

接下来,我们将控制节点(neutron管理节点)与计算节点的OVS交于ODL管理。
首先停止相应服务。

然后清空OVS数据库。

将其交予ODL管理。

然后在控制节点与计算节点设置用来vxlan通信的本地端,这里只有一个节点192.168.0.80。

设置好以后可以在节点上看到ODL自动创建了一个连接到ODL控制器的br-int。

此时reloadODL界面,可以看到多了个OVS。

接下来让neutron使用ODL,我们首先需要在neutron控制节点上安装一个对应包。

对于将ODL放置于OS控制节点的同学可以参考如下内容以修改swift端口:

First, ensure that port 8080 (which will be used by OpenDaylight to listen for REST calls) is available. By default, swift-proxy-service listens on the same port, and you may need to move it (to another port or another host), or disable that service. It can be moved to a different port (e.g. 8081) by editing /etc/swift/proxy-server.conf and /etc/cinder/cinder.conf, modifying iptables appropriately, and restarting swift-proxy-service. Alternatively, OpenDaylight can be configured to listen on a different port, by modifying the jetty.port property value in etc/jetty.conf.

修改/etc/neutron/plugins/ml2/ml2_conf.ini并添加内容。

然后修改服务后端为ODL。

重置neutron数据库并重启服务。

验证是否成功。

最后在openstack中创建网络与实例。

添加浮动IP。

在OpenStack O版中创建网络时ODL与OS分别出现如下错误。

原因可能是版本传参变了,ODL没及时更新,但我不会Java,会也不想去改ODL,所以我推荐读者用个老版本的Neutron,比如M版、N版啥的。

3.4. OVS创建vtep

IP: 192.168.0.101

3.5. OpenStack与SDN交换机集成

在ODL结束以后,我们再来试一下OpenStack与SDN交换机的集成,与上一节相互独立,即一个全新的OpenStack Newton环境。

由于商业法务问题,我不会将Pica8的OpenStack插件源码全部放出来,另外放出来意义也不大,现有SDN交换机的同学可以直接向厂商索要。

/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/

Pica8交换机工作在OVS模式下,需要将neutron server与OVS Manager相连(管理网口),或许有其他方法。

首先将插件文件拷贝至/usr/lib/python2.7/site-packages/neutron/plugins/ml2/drivers/,目录结构如下。

修改/usr/lib/python2.7/site-packages/neutron-9.3.1-py2.7.egg-info/entry_points.txt添加neutron驱动。

创建/etc/neutron/plugins/ml2/ml2_conf_pica8.ini,并添加如下内容。

修改/usr/lib/systemd/system/neutron-server.service文件,在${DAEMON_ARGS}字段添加pica8的引导配置,需要停止neutron-server服务并systemctl daemon-reload。

修改/etc/neutron/plugins/ml2/ml2_conf.ini,如下。

安装python-ovs库。

运行如下命令创建pica8插件数据库动作。

在生成的/usr/lib/python2.7/site-packages/neutron/db/migration/alembic_migrations/versions/newton/expand/94ca4fc9191b_add_pica8_mechanism_driver.py文件中添加如下内容。

执行如下命令升级数据库(如果失败请将最后参数替换为head)。

重启服务。

物理主机接入配置。

miniedit使用
Pica8手册
ODL手册
OpenDaylight with Openstack Guide
OpenStack with NetVirt
Installing OpenStack and OpenDaylight using DevStack
https://wiki.opendaylight.org/images/5/59/CloudIntegrationwithOpenStackOVSDBNetVirt.pdf

发表评论

电子邮件地址不会被公开。