Ryu和OpenStack集成

时间:2022-05-07
本文章向大家介绍Ryu和OpenStack集成,主要内容包括1.Neutron核心概念、2.Neutron 核心插件、3. Neutron核心服务、一、使用Ryu插件与OpenStack的网络、二、通过OVS命令集成OpenStack、三、思考、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

OpenStack作为当前和可预见时间内最为热门的云计算技术(没有之一),业已获得广泛的企业市场应用和众多IT巨头的支持,更是以近日(7月17日)一位最具重量级的新成员——Google,签约加入OpenStack基金会,而引发业界震动。

Ryu作为SDN(Software defined network)软件定义网络领域的热门开源控制器之一,也已愈加获取众多企业和开发者的追捧和支持。

在开始之前,还是让我们,先从宏观上认识下OpenStack众多组件中,最为复杂的Neutron吧。

友情提示:由于Neutron过于复杂和庞大,如若需要,可看OpenStack Neutron官网部分。

1.Neutron核心概念

Network

  • 一个L2二层网络单元
  • 租户可通过Neutron API 创建自己的私有/外部网络

Subnet

  • 一个L3的IPV4/IPV6地址段
  • 为VM提供私网或公网ip地址

Router

  • 三层路由器
  • 为租户的VM提供路由功能,连接Internet

Port 虚拟交换机(OpenvSwitch)上的端口 管理VM的网卡

2.Neutron 核心插件

  • Open vSwitch
  • Linux Bridge
  • Cisco NX1000
  • Nicira NVP
  • Ryu
  • NEC OpenFlow
  • Floodnight
  • VMware NSX

3. Neutron核心服务

在绝大多数的部署环境中, Neutron 组件在 OpenStack 架构中常以单独的Node形式提供网络服务,作为网络节点。提供了多种服务,具体如下所示:

neutron-server 提供REST API服务,后端使用关系数据库。neutron-server 是一个守护进程,用来提供外部调用的 API 和与其它组件交互的接口。从图中可看出,其中包括 horizon 组件,nova-compute 服务和 keystone 认证服务。

Message Queue neutron-server使用Message Queue与其他Neutron agents进行交换消息

L2 Agent 负责连接端口(ports)和设备,使他们处于共享的广播域(broadcast domain)。通常运行在Hypervisor上。

DHCP agent 用于配置虚机主机的网络。DHCP 代理,给租户网络提供动态主机配置服务,主要用途是为租户网络内的虚拟机动态地分配IP地址。

L3 Agent 负责连接tenant网络到数据中心,或连接到Internet。L3 代理,提供三层网络功能和网络地址转换(NAT)功能,来让租户的虚拟机可以与外部网络通信。

plug-in agent 插件代理,需要部署在每一个运行 hypervisor 的主机上,它提供本地的 vSwitch 配置,更多的时候得依赖你具体所使用的插件类型。(常用的插件是 OpenvSwitch, 还包括 Big Switch, Floodinght REST Proxy, Brocade, NSX, PLUMgrid, Ryu)

metering agent 计量代理,为租户网络提供三层网络流量数据计量服务。

将SDN控制器集成到OpenStack Neutron中,自然成为了企业和工程师们应用拓展的一个新领域。集成不是目的,而是一种手段,最终实现的是企业效益。

通过集成SDN,达到将应用程序从IP地址、VLAN和端口等网络环境中分离的目的,能够节省时间和降低运营成本,提高Neutron网络性能。

SDN 实现了将传统交换机的数据转发和控制平面进行分离,建立了一套独立的基于OpenFlow协议的控制平面。向上(北向接口,面向应用层),可以通过自定义编写应用程序与其他应用服务进行交互通信,实现控制平面。向下(南向接口)通过OpenFlow协议去管理控制物理硬件和虚拟硬件,实现数据转发平面。

目前南向通道主要是指OpenFlow协议,连接控制层和数据转发层。OpenFlow安全通道采用SSL/TLS对数据进行加密,防止控制器与交换机的交互信息被外界窃取。

北向通道主要是指控制层向第三方开放的API接口,用户可以通过这些开放接口开发应用程序并在SDN上部署自己的应用,体现了SDN技术的开放性和可编程性。 目前,能够以plugin的方式集成到OpenStack的控制器有:NEC的控制器以及开源控制器OpenContrail、Ryu、OpenDayLight和Floodlight等,这里我们选择Ryu。

作为不同领域,但又互有交集的两者,通过强强联合能够实现彼此间的优势互补和技术效能发挥。下面让我们一起来构筑起它们彼此之间联姻的桥梁吧。

这里,我们将介绍使用两种方法来集成Ryu和OpenStack。

一、使用Ryu插件与OpenStack的网络

在开始之前,让我们先来看看Ryu和OpenStack集成的架构吧,如下图所示:

图中,基于分层的SDN-OpenStack架构,Ryu控制器充当着“承上启下”的作用:承上——通过北向接口API(OF-REST)管理、运行Ryu app和Neutron服务,起着控制角色作用。

启下——通过运行OpenFlow Protocol与openFlow Switch交换机(可以是软件的OpenvSwitch,也可以是硬件交换机)交互,与Flow Table、OVSDB、OF-Config等一同协作,起着数据转发的作用。

1、安装Ryu和Neutron配置 1)安装Ryu插件

# yum install openstack-neutron-ryu

2)编辑文件 /etc/neutron/neutron.conf

core_plugin = neutron.plugins.ryu.ryu_neutron_plugin.RyuNeutronPluginV2

3)编辑/etc/neutron/plugins/ryu/ryu.ini, 为ryu-neutron-agent更新以下ovs选项:

  • openflow_rest_api :是用在告诉Ryu在哪里侦听REST API。 根据你的Ryu设置替换ip地址和端口。
  • ovsdb_interface: 是Ryu用来访问ovsdb-server。根据您的设置替换eth0。 ip地址来自于接口名称。如果你想不管接口名称而改变ip地址,可以指定ovsdb_ip。 你可以用ovsdb_port来指定非默认的端口访问ovsdb-server。
  • tunnel_interface:是用来告诉哪个ip地址被用于隧道(假如隧道没有被使用,那么这个值被忽略),ip地址来自接口名称。

4)你可以使用计算节点相同的配置文件,但需要改变其网卡的ip地址

openflow_rest_api = : ovsdb_interface = tunnel_interface =

5)重启 neutron-server 获得新的设置

$ sudo service neutron-server restart

2、节点设置:Ryu插件 如果你使用Ryu插件,您必须安装Open vSwitch和Ryu,除了Ryu agent 包:

2、节点设置:Ryu插件 如果你使用Ryu插件,您必须安装Open vSwitch和Ryu,除了Ryu agent 包:

在每个节点上设置Ryu plugin 1)安装Ryu

# pip install ryu

2)安装Ryu agent 和Open vSwitch

# yum install openstack-neutron-ryu openvswitch python-openvswitch

3)复制在前面创建的ovs_ryu_plugin.ini和neutron.conf到所有运行neutron-ryu-agent的节点上。

4)启动Open vSwitch加载内核模块:

# service openvswitch restart

5)重启agent

# service openvswitch restart

6)所有运行neutron-ryu-agent的节点都需要有一个叫br-int的OVS网桥存在,要创建该网桥,执行:

# ovs-vsctl add-br br-int

3、DHCP agent设置Ryu plug-in 1)这些DHCP代理选项必须在/etc/neutron/dhcp_agent.ini文件中,Ryu插件:

​[DEFAULT]
​use_namespace = True
​interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

2)如果你使用下面的其中一个插件,你也需要用以下的内容配置计量agent(metering agent) 基于OVS的插件,例如OVS、NSX、Ryu、NEC、BigSwitch/Floodlight:

​interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver

3)一个插件,使用linux bridge:

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

4)使用参考实现,必须设置:

​driver = neutron.services.metering.drivers.iptables.iptables_driver.IptablesMeteringDriver

5)设置此参数在主机上的neutron.conf文件,运行neutron-server:

service_plugins = neutron.services.metering.metering_plugin.MeteringPlugin

二、通过OVS命令集成OpenStack

由于OpenvSwitch是部署OpenStack默认自带安装的。所以我们可以很好的和Ryu集成。

通过ovs-ofctl dump-flow/snoop和tcpdump,我们能够了解计算节点虚拟机(VM)tap->qbr->br-int->br-tun->vxlan->;网络节点br-tun->br-int->namespace->br-ex这条数据线路,这样,我们便能知道需要在什么地方set sdn-controller。

如下图所示:

Ryu作为sdn的控制器,br-int/br-tun就是二层虚拟交换机,两者之间可以运行OpenFlow协议沟通,下面是其集成步骤:

1. 在一台单独的主机或虚拟机上,安装ryu控制器。

# git clone git://github.com/osrg/ryu.git
# cd ryu; python ./setup.py install

2.启动ryu控制器,这里地址为10.0.0.10。

# ryu-manager

3.在所有计算和网络节点的br-int和br-tun网桥上,设置SDN控制器为10.0.0.10

3.1认识OVS集成网桥br-int

br-int是OpenvSwitch创建的虚拟网桥,但在实际运行中它充当着虚拟交换机的角色。br-int上的端口tap设备将宿主机上的虚拟机连接到同一网络交换层上。再透过OVS通道网桥br-tun的互联协议将OpenStack系统架构中所有节点的br-int组织成一个大二层的虚拟交换机BR-INT。

每一个使用neutron net-create 命令创建的network都有一个新的ID。见ovsl-vsctl show命令显示结果中的Port的tag值。br-int处理从VM进出通信的ID(vlan id、vxlan id等)。

因此,我们是在br-int网桥(理解为支持OpenFlow协议的openvswitch)处连接控制器。

# ovs-vsctl set-controller br-int tcp:10.0.0.1

3.2 认识OVS通道网桥br-tun br-tun也是OVS创建的虚拟网桥,它的作用是向上直接与br-int连接作为网络数据的进出口;对下通过特定的通信协议(GRE、VLAN、VXLAN等)与各个节点上的br-tun相连构成一个扁平的通信/通道层。如果把所有的br-int构建的抽象层定义为虚拟二层网络,那么所有的br-tun构成的抽象层便是虚拟三层网络了。

br-tun使用OpenFlow规则处理各种通信协议ID和Tunnel ID 的转换。因此,通过如下命令予以连接控制器。

# ovs-vsctl set-controller br-tun tcp:10.0.0.1

4.最后,通过如下命令来查看集成情况: 友情提示: 由于输出信息量过多,且每个人部署的网络类型不同,其输出信息也有差异。因此,这里仅讲解查看的方法,其具体含义,网上已有较多资料,请自行查阅。 1)查看ovs交换机信息

# ovs-vsctl show

2)从OpenFlow rule tables中,查看ID和Tunnel ID 的转化过程

# ovs-ofctl show br-tun

3)查看br-tun具体的flow table信息

# ovs-ofctl dump-flows br-tun

三、思考

1)如何满足企业需求,构建Ryu和OpenStack相结合的高可靠、高可用、高性能的网络环境。

2)如何运用Ryu的SDN控制器框架和可编程特性,实现云计算领域的特殊复杂网络环境。

事实上,OpenStack Neutron本身就是SDN的一种实现。

而以SDN和云计算数据中心为代表的典型应用,无疑,均为各自的发展,都开拓了一片新天地。

还等什么,一起加油吧!