192. OpenStack集成SDN控制器

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.service6)节点停止服务
# 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> exit8)同步数据库
# 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.service2)查看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/neutron5)配置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=drop4)节点配置br-ex
# ovs-vsctl add-br br-ex
# ovs-vsctl add-port br-ex eth15)启动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的网络分配情况的一个实验测试。
发布了203 篇原创文章 · 获赞 84 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/chengyinwu/article/details/104154162