文章目录
1、控制器介绍
OpenDayLight是2013推出来的一个开源项目,参与者都是来自众多的设备厂商,其中就包括思科等网络设备巨头,IBM、微软等传统的硬件设备巨头,还包括BigSwitch等新兴网络设备厂商,以及Vmware等新兴IT软件厂商,这就说明SDN领域为业界的发展带来了更多的机会,是更多的参与者能够加入到SDN的研发和创新中;OpenDayLight开源项目就是和Linux基金会合作,目标是成为SDN架构中的核心组件,使用户能够减少网络的运营复杂度,扩展现有的网络架构的硬件生命期,同时还能支持SDN新业务和新能力的创新。
所谓SDN是一种新型网络架构。传统网络采用是分布式策略工作, 由设备制定转发策略,而SDN的核心思想这是控制和转发分离,将软件应用到网络控制中,并起到主导作用,而不是固定的模式的协议控制网络,SDN的目的是提高网络的可控性与可编程性,可以根据用户需求灵活的提供不同的质量等级服务。
2、环境介绍
2.1 硬件环境
系统最低要求: 2CPU 、4G内存
2.2 拓扑介绍
云平台具体安装拓扑如图:
搭建云平台搭建之前,首先配置好OpenDayLight的生产环境,安装完成之后,根据云计算基础架构平台的设计,在控制节点和计算节点完成相关模块的安装和配置,本次云平台的网络模式为Neutron Gre模式,同时Neutron的L3 agent服务和Neutron的DHCP均安装在Compute节点,如果需要采用OpenDayLight模式管理虚拟网络,那么需要在配置之前清空OpenvSwitch的相关配置,所以云实例的启动需要在完成OpenDayLight的前提下进行,具体的IP地址分配如下所示。
主机名 | 隧道(管理网段)地址 | 实例(外网)地址 |
---|---|---|
Controller | 30.0.0.10 | 192.168.100.10 |
Compute/Network | 30.0.0.20 | 192.168.100.20 |
OpenDayLight | 无 | 192.168.100.10 |
本次安装配置可以按照以下的步骤:
(1)在控制节点安装OpenDayLight控制软件,并完成控制器的配置。
(2)安装云计算平台,确定网络节点。
如果不确定网络节点可以通过neutron agent-list 查看,即存在DHCP和L3服务的节点为网络节点,以下网络节点的操作步骤在此节点进行。
(3)修改Ml2的插件的mechanism_ drivers类型
(4)清空OpenvSwitch的默认配置,交由OpenDayLight来监控。
(5)重新启动OpenvSwitch,正常完成Neutron的使用,Dashboard界面创建网络和云主机。
3、安装控制器
3.1 安装JDK环境
OpenDaylight的安装节点需要配置JDK的环境,安装提供的Java软件包jdk-7u71-linux-x64.tar.gz
首先拷贝软件包到系统中,然后执行以下命令安装。
[root@controller ~]# # tar -zxvf jdk-7u71-linux-x64.tar.gz -C /usr/local/
修改环境变量添加如下内容
编辑文件 /etc/profile
export JAVA_HOME=/usr/local/jdk1.7.0_71/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
安装完成执行以下命令检测安装。
执行环境变量
[root@controller ~]# source /etc/profile
[root@controller ~]# java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.71-b01, mixed mode)
3.2 安装Maven环境
OpenDaylight的安装节点需要配置Maven的环境,安装提供的Maven软件包apache-maven-3.0.4.tar.gz
[root@controller ~]# tar -zxvf apache-maven-3.0.4.tar.gz -C /usr/local/
修改环境变量添加如下内容
编辑文件 /etc/profile
export MAVEN_HOME=/usr/local/apache-maven-3.0.4/
export PATH=${PATH}:${MAVEN_HOME}/bin
安装完成执行以下命令检测安装。
执行环境变量
[root@controller ~]# source /etc/profile
[root@controller ~]# mvn -v
Apache Maven 3.0.4 (r1232337; 2012-01-17 16:44:56+0800)
Maven home: /usr/local/apache-maven-3.0.4
Java version: 1.7.0_71, vendor: Oracle Corporation
Java home: /usr/local/jdk1.7.0_71/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.36.2.el7.x86_64", arch: "amd64", family: "unix"
3.3 安装OpenDayLight
(1)拷贝软件包到系统内,执行以下命令完成解压
将软件包解压到指定的目录下(目录需存在)
# tar -zxvf opendaylight.tar.gz -C /opt
(2)进入目录准备安装
# cd /opt/opendaylight/
(3)修改mvn的配置setting位置路径
编辑以下配置文件
vi +37 etc/org.ops4j.pax.url.mvn.cfg
将此段修改成
org.ops4j.pax.url.mvn.settings=/usr/local/apache-maven-3.0.4/conf/settings.xml
(4)启动OpenDayLight服务进程
# ./bin/start
确保存在进程后执行以下步骤,即确定 ps aux |grep opendaylight 存在进程。
(5)开始以客户端方式连接
需要在启动进程之后等待一段,否则会出现以下报错
Failed to get the session.
# ssh -p 8101 karaf@localhost
密码为karaf
登录成功如下图所示,此时我们继续配置OpenDayLight模块内容
Logging in as karaf
此时我们执行以下命令完成模块的安装
opendaylight-user@root> feature:install odl-ovsdb-openstack odl-dlux-core
通过以上命令我们可以安装OpenDayLight一个最基本的框架,目前只支持我们可以通过web界面简单的查看Neutron的分配情况,包括OpenvSwitch的网桥的分配的虚拟接口情况。
OpenDayLight提供的安装命令为feature:install然后加上安装的需要插件, odl-ovsdb-openstack为安装基于OpenvSwitch的的OpenStack功能, odl-dlux-core为安装DLUX功能,管理界面。
此时我们打开web界面均可以访问OpenDayLight界面。
打开方式http://主机IP:8181/index.html
默认用户名和密码均为admin。
至此,OpenDayLight环境安装完毕,下面开始配置OpenStack的Neutron服务和OpenvSwitch服务。
4、配置OpenStack
4.1 清除Neutron配置内容
由于是使用OpenDayLight来管理网络,所以节点的ovs-agent服务已经失去了意义,
Neutron的相关API接口都是通过Neutron-Server来管理和处理,从而使用适合的驱动。
那么在SDN的模式下,我们将Neutron的所有的请求都是转发给ODL来处理,ODL也是有着多种虚拟网络管理方式(OVSDB),
在使用OVSDB之前我们需要在Neutron—server节点安装networking-odl软件包如下面所示。
networking-odl.tar.gz
[root@controller ~]# tar -zxvf networking-odl.tar.gz
[root@controller ~]# cd networking-odl
[root@controller networking-odl]# python setup.py install
4.2 清除Neutron相关内容
我们需要确保OpenStack网络状态是没有配置的,当使用OpenDaylight作为Neutron的后端时,,ODL开始接管Open vSwitch的配置。因此,有必要删除现有的OpenStack和OpenvSwitch配置。
通过以下命令删除相关内容。
(1)移除实例
通过命令或者Dashboard界面完成
# nova list
# nova delete <name /id >
(2)移除子路由器上子网接口
通过命令或者Dashboard界面完成
# neutron subnet-list
# neutron router-list
# neutron router-port-list <router name>
# neutron router-interface-delete <router name> <subnet ID or name>
(3)移除网络子网、网络、路由器
# neutron subnet-delete <subnet name>
# neutron net-list
# neutron net-delete <net name>
# neutron router-delete <router name>
(4)停止Neutron-server服务
[root@controller ~]# systemctl stop neutron-server.service
(5)停止OvS-agent
所有节点停止Neutron-OpenvSwitch-agent服务,并将开机自启关闭。
[root@controller ~]# systemctl stop neutron-openvswitch-agent.service
[root@controller ~]# systemctl disable neutron-openvswitch-agent.service
(6)节点停止服务
# systemctl stop neutron-metadata-agent.service(所有节点)
# systemctl stop neutron-dhcp-agent.service (网络节点)
# systemctl stop neutron-l3-agent.service(网络节点)
# systemctl stop neutron-lbaas-agent.service(网络节点)
(7)删除Neutron数据库
[root@controller ~]# mysql -uroot -p000000(数据库密码为000000)
mysql> drop database neutron;
mysql> create database neutron ;
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '000000';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '000000';
mysql> exit
(8)同步数据库
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
# neutron-db-manage --service lbaas upgrade head
# neutron-db-manage --subproject neutron-fwaas upgrade head
4.3 清除OVS数据库数据
(1)配置OpenDaylight管理Open vSwitch
在每个节点上清除已有的Open vSwitch配置。
# systemctl stop openvswitch.service
# rm -rfv /var/log/openvswitch/*
# rm -rfv /etc/openvswitch/conf.db
# systemctl start openvswitch.service
(2)查看OVS数据
[root@controller ~]# ovs-vsctl show
890ef6b7-8f58-41f3-a0cc-7591ddf1bb7b
ovs_version: "2.5.0"
(3)配置Neutron ml2 Plugin
修改两个节点的/etc/neutron/plugins/ml2/ml2_conf.ini配置文件,修改如下
mechanism_drivers = opendaylight
(4)添加ODL控制到ml2配置文件中
在两个节点的/etc/neutron/plugins/ml2/ml2_conf.ini配置文件最后添加如下内容
[ml2_odl]
password = admin
username = admin
url = http://30.0.0.10:9090/controller/nb/v2/neutron
(5)配置Gre模式
控制节点、计算/网络节点
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers gre
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types gre
openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_gre tunnel_id_ranges 1:1000
openstack-config --set /etc/neutron/plugins/ml2/openvswitch_agent.ini agent tunnel_types gre
openstack-config --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs local_ip 30.0.0.10/30.0.0.20 (实际隧道地址)
openstack-config --set /etc/neutron/plugins/ml2/openvswitch_agent.ini ovs enable_tunneling True
4.4 配置OpenvSwitch
(1)配置OpenvSwitch local_ip
控制节点
# ovs-vsctl set Open_vSwitch c11a6e0a-761a-471f-a2a2-3c4ad1835c46 other_config={'local_ip'='30.0.0.10'}
计算节点
# ovs-vsctl set Open_vSwitch ac83d579-5891-4fc5-bad6-69a20b151728 other_config={'local_ip'='30.0.0.20'}
注:ID为OpenvSwitch的ID,通过命令ovs-vsctl show查询
(2)配置完毕后可以通过以下命令查看Open_vSwitch的详细信息
# ovs-vsctl list Open_vSwitch
控制节点
[root@controller ~]# ovs-vsctl list Open_vSwitch
_uuid : c11a6e0a-761a-471f-a2a2-3c4ad1835c46
bridges : []
cur_cfg : 1
db_version : "7.4.0"
external_ids : {system-id="d9e75022-cf94-4096-b8ed-2f8bc9459858"}
manager_options : [8625e292-1a5f-4c61-a853-52ff3573c29f]
next_cfg : 77
other_config : {local_ip="30.0.0.10"}
ovs_version : "2.1.3"
ssl : []
statistics : {}
system_type : CentOS
system_version : "6.5-Final"
计算/网络节点
[root@compute ~]# ovs-vsctl list Open_vSwitch
_uuid : ac83d579-5891-4fc5-bad6-69a20b151728
bridges :[]
cur_cfg : 1
db_version : "7.4.0"
external_ids : {system-id="235037e4-ee77-4cc8-a9de-28068f6cada7"}
manager_options : [b0f89092-d52b-4e32-9786-37d5bf348de1]
next_cfg : 41
other_config : {local_ip="30.0.0.20"}
ovs_version : "2.1.3"
ssl : []
statistics : {}
system_type : CentOS
system_version : "6.5-Final"
(3)设置所有节点的OpenvSwitch对应的SDN控制器OpenDayLight
每个节点
# ovs-vsctl set-manager tcp:30.0.0.10:6640
执行完命令之后通过查看ovs的状态,可以看出br-int网桥已经创建成功
[root@controller ~]# ovs-vsctl show
c11a6e0a-761a-471f-a2a2-3c4ad1835c46
Manager "tcp:30.0.0.10:6640"
is_connected: true
Bridge br-int
Controller "tcp:30.0.0.10:6633"
is_connected: true
fail_mode: secure
Port br-int
Interface br-int
ovs_version: "2.1.3"
查看OVS的br-int端口的状态
[root@controller ~]# ovs-ofctl dump-ports-desc br-int -OopenFlow13
OFPST_PORT_DESC reply (OF1.3) (xid=0x2):
LOCAL(br-int): addr:8a:8c:e5:f0:3d:4a
config: PORT_DOWN
state: LINK_DOWN
speed: 0 Mbps now, 0 Mbps max
查看br-int的流规则
[root@controller ~]# ovs-ofctl dump-flows br-int -OopenFlow13
OFPST_FLOW reply (OF1.3) (xid=0x2):
cookie=0x0, duration=4902.037s, table=0, n_packets=0, n_bytes=0, send_flow_rem dl_type=0x88cc actions=CONTROLLER:65535
cookie=0x0, duration=4901.183s, table=0, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:20
cookie=0x0, duration=4900.681s, table=20, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:30
cookie=0x0, duration=4900.177s, table=30, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:40
cookie=0x0, duration=4899.675s, table=40, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:50
cookie=0x0, duration=4899.170s, table=50, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:60
cookie=0x0, duration=4898.664s, table=60, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:70
cookie=0x0, duration=4898.159s, table=70, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:80
cookie=0x0, duration=4897.655s, table=80, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:90
cookie=0x0, duration=4897.150s, table=90, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:100
cookie=0x0, duration=4896.645s, table=100, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=goto_table:110
cookie=0x0, duration=4896.130s, table=110, n_packets=0, n_bytes=0, send_flow_rem priority=0 actions=drop
(4)节点配置br-ex
# ovs-vsctl add-br br-ex
# ovs-vsctl add-port br-ex eth1
(5)启动Neutron-server服务
# systemctl start neutron-server.service(网络节点)
(6)启动服务
# systemctl start neutron-metadata-agent.service(所有节点)
# systemctl start neutron-dhcp-agent.service (网络节点)
# systemctl start neutron-l3-agent.service(网络节点)
# systemctl start neutron-lbaas-agent.service(网络节点)
(7)检查OpenDayLight
通过curl命令检查返回状态
[root@controller ~]# curl -u admin:admin http:// 30.0.0.10:9090/controller/nb/v2/neutron/networks
{
"networks" : [ ]
查看返回结果,显示如上所示为正常。
5、使用ODL
5.1 访问Dashboard界面
创建Neutron的网络,创建子网和路由器
5.2 测试
我们在openstack controller节点查询 ovs的简单信息可以看出由opendaylight管理的网络流量如下:
[root@controller ~]# ovs-vsctl show
09274dec-f169-48c5-98cb-3dcce1a04372
Manager "tcp:172.24.13.10:6640"
is_connected: true
Bridge br-int
Controller "tcp:172.24.13.10:6653"
is_connected: true
fail_mode: secure
Port "tape717856b-ec"
Interface "tape717856b-ec"
type: internal
Port "tapa960c4a0-93"
Interface "tapa960c4a0-93"
type: internal
Port br-int
Interface br-int
type: internal
Port "gre-172.24.13.20"
Interface "gre-172.24.13.20"
type: gre
options: {key=flow, local_ip="172.24.13.10", remote_ip="172.24.13.20"}
Port "qr-448244f7-6e"
Interface "qr-448244f7-6e"
type: internal
Bridge br-ex
Port "enp10s0"
Interface "enp10s0"
Port "qg-e0566534-8d"
Interface "qg-e0566534-8d"
type: internal
Port br-ex
Interface br-ex
type: internal
ovs_version: "2.5.0"
我们可以通过在OpenDayLight终端命令可以查询网络情况
[root@controller ~]# curl -u admin:admin http://30.0.0.10:9090/controller/nb/v2/neutron/networks
{
"networks" : [ {
"id" : "e6d49962-ac82-472e-8334-d6e3cd1ebb85",
"name" : "ext",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "187c6453-d3df-4d2e-a7eb-66a130ccd969" ]
}, {
"id" : "c90cf500-c822-42bf-a54c-d14d8e4d7a0c",
"name" : "ext",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "d4f046a8-e8dd-491c-9b3a-7fad513436ea" ]
}, {
"id" : "0321d24c-c7f0-46d3-b249-aa16023ecc87",
"name" : "demo",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : false,
"provider:network_type" : "gre",
"provider:segmentation_id" : "2",
"status" : "ACTIVE",
"subnets" : [ "6a654cb0-24de-4428-99bd-ac0d42cef318" ]
}, {
"id" : "598f43d7-265c-4060-85dd-46c33e4b81f8",
"name" : "192.168.60.0/24",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "ed93d0b0-715f-487a-b956-df5f4eb4f3e1" ]
}, {
"id" : "34d2a4b5-baee-4013-8997-61dbe338bb52",
"name" : "ext",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "85bbf6b9-08db-483b-af73-55bf7b6e90df" ]
}, {
"id" : "76fcc8a9-601f-49ea-b2e8-885ab589f65a",
"name" : "ext",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "bf8b654d-7bee-4452-a329-81a6053e7a43" ]
}, {
"id" : "b7f1848c-6cf8-4113-803a-87cf91f70336",
"name" : "admin",
"admin_state_up" : true,
"shared" : false,
"tenant_id" : "66f53f0adfdb49e2b47d87357f49441e",
"router:external" : true,
"provider:network_type" : "gre",
"provider:segmentation_id" : "1",
"status" : "ACTIVE",
"subnets" : [ "970f7639-ae07-4677-b8ad-9da4e1e0d5df" ]
} ]
以上这就是我们简单的使用ODL的管理流量的功能来处理Neutron的网络分配情况的一个实验测试。