1.OpenStack Neutron简介

Neutron添加了一层虚拟的网络服务让租户(用户)构建自己的虚拟网络。Neutron是对网络的虚拟化,该网络可以从一个地方移动到另一个地方,而不会影响现有的连接。它可以进一步解释为一个网络管理服务,为创建和管理虚拟网络公开了一组可扩展的API(通过创建虚拟网络为OpenStack Compute节点上的虚拟机提供网络服务)。Neutron的插件架构为开源社区或第三方服务提供API。Neutron还允许供应商研究和添加新的插件,提供先进的网络功能。
目前,Neutron的虚拟网络服务没有传统网络成熟。下图描述了与Neutron组件交互的代理。组成Neutron的元素如下:
Neutron-server是python虚拟光驱, 是OpenStack网络运行在Network节点的主过程。
Plugin agents和Neutron插件一起管理虚拟交换机,Plugin agents依赖Neutron插件。
DHCP agent是Neutron的一部分,为租户的网络提供DHCP服务。
L3 agent负责层3和NAT转发来获得租户虚拟机的外部访问。

SDN对于neutron的意义在哪里?
引入SDN主要是克服Neutron的缺陷,SDN是一种网络技术,通过集中的可编程控制平面来管理整个数据平面。这样网络运营商和供应商可以控制和管理自己的虚拟化资源和网络。SDN是一种新型的网络模式,允许硬件和操作系统之间以及物理/虚拟网元和操作系统之间通过开放API通信。

2.SDN控制器跟neutron结合原理


(1)Neutron Server的介绍
A python daemon is the main process of the OpenStack networking that typically runs on the controller node (a term used in OpenStack deployments). It exposes APIs, to enforce the network model, and passes the requests to the neutron plugin.
意思就是暴露API,使得请求能够被传到plugin中。

(2)Plugins的介绍
Plugins can be either core or service. Core plugins implement the “core” Neutron API — L2 networking and IP address management. Service plugins provide “additional” services, such as the L3 router, load balancing, VPN, firewall and metering. These network services can also be provided by the core plugins by realizing the relevant API extensions. In short, plugins run on the controller node and implement the networking APIs, which interact with the Neutron server, database and agents.
Plugin分为core和additional,用来处理neutron server传过来的请求。
下图是更为详细的neutron server如何传送给plugin消息的:

(3)Plugin Agents介绍
These agents are specific to the Neutron plugin being used. They run on compute nodes and communicate with the Neutron plugin to manage virtual switches. These agents are optional in many deployments and perform local virtual switch configurations on each hypervisor.
Agent跑在compute节点之上,与neutron的plugin进行通信

ML2 的plugin都是属于core。分为type和mechanism两种。Type drivers (如flat, VLAN, GRE 和VXLAN) 定义 L2 type。 mechanism drivers (如OVS, adrivers from ODL, Cisco, NEC, etc) 负责一系列动作(更新、创建、删除)网络、子网、端口。

整个过程可以分为下面几个步骤:
1.用户通过OpenStack的界面(horizon)输入消息给networking API,再发送给Neutron server
2.Neutron server接受信息发送给plugin
3.Neutron server/plugin 更新DB
4.Plugin通过REST API发送消息给SDN控制器
5.SDN控制器接受消息然后通过南向的plugins/protocols, 如OpenFlow, OVSDB or OF-Config.

3.ml2驱动脚本实现

下面是ml2驱动脚本“mechanism_gnflush.py”用于设置计算节点和网络节点与数据中心SDN控制器对接的配置。主要是将openstack的信息传递给SDN控制器。

Shell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57

ODL_NETWORK = 'network'
ODL_NETWORKS = 'networks'
ODL_SUBNET = 'subnet'
ODL_SUBNETS = 'subnets'
ODL_PORT = 'port'
ODL_PORTS = 'ports'
#下面是创建、更新、删除、网络组件的代码
def create_network_postcommit(self, context):
    self.synchronize('create', ODL_NETWORKS, context)
def update_network_postcommit(self, context):
    self.synchronize('update', ODL_NETWORKS, context)
def delete_network_postcommit(self, context):
    self.synchronize('delete', ODL_NETWORKS, context)
def create_subnet_postcommit(self, context):
    self.synchronize('create', ODL_SUBNETS, context)
def update_subnet_postcommit(self, context):
    self.synchronize('update', ODL_SUBNETS, context)
def delete_subnet_postcommit(self, context):
    self.synchronize('delete', ODL_SUBNETS, context)
def create_port_postcommit(self, context):
    self.synchronize('create', ODL_PORTS, context)
def update_port_postcommit(self, context):
    self.synchronize('update', ODL_PORTS, context)
def delete_port_postcommit(self, context):
    self.synchronize('delete', ODL_PORTS, context)
#下面是把端口绑定到子网的代码
def bind_port(self, context):
        LOG.debug(_("Attempting to bind port %(port)s on "
                    "network %(network)s"),
                  {'port': context.current['id'],
                   'network': context.network.current['id']})
        for segment in context.network.network_segments:
            if self.check_segment(segment):
                context.set_binding(segment[api.ID],
                                    self.vif_type,
                                    self.vif_details,
                                    status=n_const.PORT_STATUS_ACTIVE)
                LOG.debug(_("Bound using segment: %s"), segment)
                return
            else:
                LOG.debug(_("Refusing to bind port for segment ID %(id)s, "
                            "segment %(seg)s, phys net %(physnet)s, and "
                            "network type %(nettype)s"),
                          {'id': segment[api.ID],
                           'seg': segment[api.SEGMENTATION_ID],
                           'physnet': segment[api.PHYSICAL_NETWORK],
                           'nettype': segment[api.NETWORK_TYPE]})

Openstack计算节点和网络节点配置

实验环境为CentOS7+OpenStack Juno , SDN 控制器为DCFabric。
步骤一: 工具脚本获取
在“tools/openstack-tools”目录下有shell脚本“gnflush-controller.sh”和ml2驱动脚本“mechanism_gnflush.py”用于设置计算节点和网络节点与数据中心SDN控制器对接的配置。(mechanism_gnflush.py(根据openstack官网的ODL plugin更改),mechanism_gnflush.py会在附录提供)将“mechanism_gnflush.py”这个脚本拷贝到Openstack控制节点服务器上如下目录下:

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

将“gnflush-controller.sh”拷贝到服务器上任意目录后续使用。
步骤二:关闭相关服务
在所有Openstack计算节点和网络节点上服务器上执行如下命令(CentOS):

Shell
1
2
3

systemctl stop neutron-server
systemctl stop neutron-openvswitch-agent
systemctl disable neutron-openvswitch-agent

步骤三:配置ml2 plugin
在数据中心文件“/usr/lib/python2.6/site-packages/neutron-2014.1.3-py2.6.egg-info/entry_points.txt”中“[neutron.ml2.mechanism_drivers]”配置节点下增加GNFlush控制器ML2 plugin的entry point:

Shell
1
gnflush = neutron.plugins.ml2.drivers.mechanism_gnflush:GNFlushMechanismDriver


步骤四:配置ml2
配置ml2前,需要准备如下信息:

  • 租户网络类型:管理员可以根据需要选择“gre”或者“vlan”。
  • 控制器IP地址:数据中心SDN控制器所在服务器的IP地址。
  • 控制器Rest服务端口:Rest服务监听端口需要查看SDN控制器配置文件中“[rest_port]”配置,默认为“8081”

在Openstack控制中心服务器上执行如下命令修改ml2配置,以租户网络类型为“gre”为例:

Shell
1
2

crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers gnflush
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan

在“/etc/neutron/plugins/ml2/ml2_conf.ini”文件最后面添加“ml2_gnflush”的选项:

Shell
1
2
3
4

[ml2_gnflush]
password = admin
username = admin
url = http://192.168.53.3:8081/gn/neutron

步骤五:配置Openvswitch
配置前,需要准备如下信息:

  • 本地IP:当前服务器的IP地址。
  • 网卡名称:用于建立隧道的物理网卡。
  • 控制器IP地址:数据中心SDN控制器所在服务器的IP地址。

在所有Openstack计算节点和网络节点上服务器上执行如下命令,可以通过“--help”选项查看帮助信息:

Shell
1
sh gnflush-controller.sh --local_ip 192.168.53.52 --provider_mappings eth1 --gnflush_ip 192.168.53.3

步骤六:启动相关服务
执行如下命令启动服务:

Shell
1
systemctl start neutron-server

这个是自主开发的DCFabric的拓扑图。下图是已经连接OpenStack的Open vSwitch。

OpenStack与SDN控制器的集成相关推荐

  1. Openstack Neutron 集成 SDN控制器

    Neutron 集成SDN控制器   一.Neutron的组成元素 Neutron-server可以理解为一个专门用来接收Neutron REST API调用的服务器,然后负责将不同的REST API ...

  2. OpenStack集成SDN控制器

    文章目录 1.控制器介绍 2.环境介绍 2.1 硬件环境 2.2 拓扑介绍 3.安装控制器 3.1 安装JDK环境 3.2 安装Maven环境 3.3 安装OpenDayLight (1)拷贝软件包到 ...

  3. 为OpenStack而生的SDN控制器——OVN

    为什么OVN会出现? OpenvSwitch (OVS) 以其丰富的功能和相对优秀的性能,成为OpenStack中广泛使用的虚拟交换机.在内核部分合并进入Linux主干之后,Open Vswitch几 ...

  4. SDN控制器的北向接口

    SDN北向接口是连接SDN控制器和用户应用之间的重要纽带,决定了SDN的实际能力与价值,直接影响了整个SDN市场的发展方向. 北向接口概述 作为一种颠覆传统网络的新型网络架构,SDN凭借其快速提供网络 ...

  5. 资源收集流程为SDN控制器

    一.收集网络元资源信息. 控制通道建立后,控制器和应答器主动启动控制协议,控制协议如openflow等,经认证后建立控制协议. 接着,转发器将信息注册到控制器:接口资源,标签信息,VLAN资源等等.基 ...

  6. SDN控制器的资源收集过程—Vecloud

    1.网元资源信息收集 控制器和转发器的控制通道建立完成后,转发器主动向控制器发起控制协议连接,控制协议为openflow等协议,认证后建立. 接下来,转发器向控制器注册信息:接口资源.标签信息.VLA ...

  7. SDN控制器OpenDaylight简介—VeCloud

    2013年,Linux Foundation联合思科.Juniper和 Broadcom等多家网络设备商创立了开源项目 Open Daylight,它的发起者和赞助商多为设备厂商而非运营商等网络设备消 ...

  8. SDN控制器OpenDaylight简介

    发展历程 Open Daylight是一个高度可用.模块化.可扩展.支持多协议的控制器平台,可以作为SDN管理平面管理多厂商异构的SDN网络.它提供了一个模型驱动服务抽象层( MD-SAL),允许用户 ...

  9. 开源SDN控制器和商用SDN控制器一览

    以下是来自IT168收集的2014年可追寻到的开源SDN控制器和商用SDN控制器,此处转载以供大家知悉,更多控制器信息需要大家自己动手去查询和理解. 开源SDN控制器组织(随机排序,仅为了查看便利) ...

最新文章

  1. 第五课:系统目录及ls·文件类型及alias命令介绍
  2. (轉貼) 友達光電第五屆【A+種子暑期實習計畫】開始辦理報名 (News)
  3. python如何调用java写的接口_Python 调用翻译接口
  4. 请求发送者与接收者解耦——命令模式
  5. 说说Javaweb 服务器与Tomcat源代码解析
  6. Huntor中国CRM评估报告连载(一)
  7. Bytecoin节点搭建
  8. 剑指offer面试题[30]-最小的k个数
  9. React Native (一) 入门实践
  10. redis命令行技术文档。命令教程
  11. 微信小程序之网易云音乐的实现-云音乐
  12. 0基础,如何快速学习自媒体,详细教程
  13. CoffeeScript 简介
  14. 以树莓派为控制中心的软硬件之开发之脑电波模块
  15. Linux service之自定义服务
  16. 小型企业、初创企业海外众筹指南
  17. 点云转深度图:转化,保存,可视化
  18. 求n以内的所有素数(质数)个数
  19. 汇编语言程序的调试与运行
  20. c语言算钢丝杨氏模量实验报告,大学物理实验报告-钢丝杨氏模量测量.doc

热门文章

  1. strrchr()和strchr()函数
  2. LTE中20MHz带宽采样率为30.72MHz
  3. ES6+ 可选链操作符
  4. Mysql源码学习——八度空间
  5. 联想笔记本那些有手写功能_联想笔记本那些有手写功能_Windows 8 下笔记本如何实现手写输入...
  6. linux一键电影网站脚本,Linux下HTML5播放器一键生成脚本
  7. 如何将小程序放到公众号菜单?
  8. PHPStorm+PHPStudy的PHP开发环境配置
  9. 瑰丽华尔兹--单调队列
  10. 电脑无法启动,电源灯一直闪烁,风扇不转!