文档章节

OVN入门

o
 osc_0sw0za1c
发布于 2019/09/06 11:09
字数 3340
阅读 5
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

image

参考链接

如何借助 OVN 来提高 OVS 在云计算环境中的性能

OVN简介

Open vSwitch Documentation

OVSDB介绍及在OpenDaylight中的调用

OpenDaylight即将迈入“七年之痒”?

一、为什么OVN会出现?

众所周知,OpenvSwitch 以其丰富的功能和不错的性能,已经成为 Openstack 部署中最受欢迎的虚拟交换机。由于 Openstack Neutron 的架构引入了一些性能问题,比如 neutron-server 要与非常多的 agent 通信,RPC 就是一个性能瓶颈,还有 neutron 里面用到非常多的 namespace,namespace 资源有限而且系统开销比较大,这也是一个性能瓶颈。OVS 社区觉得从长远来看,Neutron 应该让一个其它的项目来做虚拟网络的控制平面,Neutron 只需要提供 API 的处理,于是 OVS 社区推出了 OVN(Open Virtual Switch)这个项目,OVN 是 OVS 的控制平面,它给 OVS 增加了对虚拟网络的原生支持,大大提高了 OVS 在实际应用环境中的性能和规模。

OpenvSwitch (OVS) 以其丰富的功能和相对优秀的性能,成为OpenStack中广泛使用的虚拟交换机。下图是2年前的一个调查,时过境迁,nova-network已经被废弃,OpenvSwitch如今的占有率肯定会更高。

OVS甚至可以说是网络虚拟化里最重要的工业级开源产品,OVS模仿物理交换机设备的工作流程,实现了很多物理交换机当时才支持的许多网络功能。OVN提供了许多原生的虚拟网络功能,提升了OVS的工作效率和性能。

1.1、OVS和OVN网络方案的能力

OVS 只是一个单机软件,它并没有集群的信息,自己无法了解整个集群的虚拟网络状况,也就无法只通过自己来构建集群规模的虚拟网络。这就好比是单机的 Docker,而 OVN 就相当于是 OVS 的k8s,它提供了一个集中式的 OVS 控制器。这样可以从集群角度对整个网络设施进行编排。同时 OVN 也是新版 OpenStack 中 Neutron 的后端实现,基本可以认为未来的 OpenStack 网络都是通过OVN 来进行控制的。

OVN是OpenvSwitch项目组为OpenvSwitch开发SDN控制器,同其他SDN产品相比,OVN对OpenvSwitch 及OpenStack有更好的兼容性和性能

open-vswitch非常适合作为虚拟机环境中的虚拟交换机。除了向虚拟网络层公开标准控制和可见性接口外,它还设计为支持跨多个物理服务器的分发。open-vswitch支持多种基于Linux的虚拟化技术,包括Xen/XenServerKVMVirtualBox

1.2、已经实现从OVS 平滑升级到 OVN

OVN 对于运行平台没有额外的要求,只要能够运行 OVS,就可以运行 OVN,所以从 OVS 升级到 OVN 是非常简单快捷的。原有的网络、路由等数据不会丢失,也不需要对这些数据导入导出来进行数据迁移

另外 OVN 可以和很多 CMS(Cloud Management System)集成到一起,尤其是OpenStack Neutron,这些 CMS 只需要添加一个 plugin 来配置 OVN 即可。

1.3、OVN社区

1.3.1、VMware

OVS是Nicira发布的开源虚拟交换机。OVS从发布到现在一直是业界最流行的虚拟交换机。2012年VMware以12.6亿美元收购Nicira 。VMware在OVS上继续投入更多的资源,是目前OVS/OVN社区的最大贡献者。

1.3.2、Ebay

GO OVN 是 eBay 开源一个 GO 库,使用原生 OVSDB 协议访问 OVN Northbound DB,基于 OVSDB 库 但使用自己的分支。

1.3.3、灵雀云

再谈自研开源Kube-OVN, 设计思路及实现原理

二、OVN的实现了哪些功能?拥有哪些特性?

  • Logical switches:逻辑交换机,用来做二层转发。
  • L2/L3/L4 ACLs:二到四层的 ACL,可以根据报文的 MAC 地址,IP 地址,端口号来做访问控制。
  • Logical routers:逻辑路由器,分布式的,用来做三层转发。
  • Multiple tunnel overlays:支持多种隧道封装技术,有 Geneve,STT 和 VXLAN。
  • TOR switch or software logical switch gateways:支持使用硬件 TOR switch 或者软件逻辑 switch 当作网关来连接物理网络和虚拟网络。
  • 小结:OVN 给 Neutron带来实现机制方面的变化

三、系统架构

首先讲一下OVN工作机制中的2种角色:

  • OVN Central ——目前只能有一台主机承担这个角色。该主机将成为和外部资源(比如云管理平台)集成的API中心节点。中心节点运行着OVN 北向数据库和OVN南向数据库。OVN北向数据库,用于描述上层的逻辑网络组件,比如逻辑交换机/逻辑端口。南向数据库,其将北向数据库的逻辑网络数据格式转换为物理网络数据格式并进行存储。
  • OVN Host ——所有提供虚拟机或虚拟网络的节点。OVN Host 运行着 “chassis controller” ,它上连OVN南向数据库并作为其记录的物理网络信息授权来源,下接OVS 并成为其openflow 控制器。

Openstack/CMS plugin 是 CMS 和 OVN 的接口,它把 CMS 的配置转化成 OVN 的格式写到 Nnorthbound DB 里面。

OVN由以下组件构成:

3.1、CMS(云管理系统)

这是OVN的最终用户(通过其用户和管理员)。与OVN集成需要安装与CMS特定的插件和相关软件(见下文)。OVN最初的目标CMS是OpenStack。我们通常会说一个CMS,但多个CMS也可以管理一个OVN的不同部分。

3.2、OVN/CMS插件

是连接到OVN的CMS组件。在OpenStack中,这是一个Neutron插件。该插件的主要目的是转换CMS中的逻辑网络的配置为OVN可以理解的中间表示。这个组件是必须是CMS特定的,所以对接一个新的CMS需要开发新的插件对接到OVN。所有在这个组件下面的其他组件是与CMS无关的。

3.3、northbound database

存储逻辑交换机、路由器、ACL、端口等的信息,目前基于ovsdb-server,未来可能会支持etcd v3。类似 apiserver,提供了一组高层次的网络抽象,这样在真正创建网络资源时无需关心负责的逻辑规则,只需要通过 Northoboud DB 的接口创建对应实体即可。

Northbound DB 里面存的都是一些逻辑的数据,大部分和物理网络没有关系,比如 logical switch,logical router,ACL,logical port,和传统网络设备概念一致。

开放虚拟交换机数据库(OpenvSwitch Database,OVSDB)是开放虚拟交换机中保存的各种配置信息(如网桥、端口)的数据库,是针对OpenvSwitch开发的轻量级数据库。

OVSDB是一个轻量级的数据库,其实它只是一个JSON文件,默认路径为/etc/openvswitch/conf.db。记录的网桥、端口、QOS等网络配置信息是以JSON格式(schema)保存的,通常schema在/usr/share/openvswitch/vswitch.ovsschema中。

  • ovn-northd: 集中式控制器,负责把northbound database数据分发到各个ovn-controller

OVN-northd 类似于一个集中的控制器,它把 Northbound DB 里面的数据翻译一下,写到 Southbound DB 里面。

3.4、southbound database

类似于etcd(不太准确),存储集群视角下的逻辑规则。

基于ovsdb-server(未来可能会支持etcd v3),包含三类数据

  • 物理网络数据,比如VM的IP地址和隧道封装格式
  • 逻辑网络数据,比如报文转发方式
  • 物理网络和逻辑网络的绑定关系,比如逻辑端口关联到哪个 HV 上面。

3.5、ovn-controller

运行在每台机器上的本地SDN控制器,类似于kubelet,负责和中心控制节点通信获取整个集群的网络信息,并更新本机的流量规则。ovs-vswitchd 和 ovsdb-server 可以理解为单机的docker 负责单机虚拟网络的真实操作。

ovn-controller 是 OVN 里面的 agent,类似于 neutron 里面的 ovs-agent,它也是运行在每个 HV 上面,北向,ovn-controller 会把物理网络的信息写到 Southbound DB 里面,南向,它会把 Southbound DB 里面存的一些数据转化成 Openflow flow 配到本地的 OVS table 里面,来实现报文的转发。

ovn-controller是每个hypervisor和软件网关上的OVN代理。

  • 北向,它连接到OVN南行数据库以了解OVN配置和状态,并把hypervisor的状态填充绑定表中的Chassis列以及PN表。
  • 南向,它连接到ovs-vswitchd作为OpenFlow控制器用于控制网络通信,并连接到本地ovsdb-server以允许它监视和控制Open vSwitch的配置。

四、OVN 给 Neutron带来实现机制方面的变化

4.1、架构的改变

从 OVN 的架构可以看出,OVN 里面数据的读写都是通过OVSDB来做的,取代了 Neutron 的消息队列机制,所以有了 OVN 之后,Neutron 里面所有的 agent 都不需要了,Neutron 变成了一个 API server 来处理用户的 REST 请求,其他的功能都交给 OVN 来做,只需要在 Neutron 里面加一个 plugin 来调用配置 OVN。

Neutron 里面的子项目networking-ovn就是实现 OVN 的 plugin。Plugin 使用 OVSDB 协议来把用户的配置写在 Northbound DB 里,ovn-northd 监听到 Northbound DB 配置发生改变,然后把配置翻译到 Southbound DB 里面。 ovn-controller 监控到 Southbound DB 数据的发生变化之后,进而更新本地的流表。

OVN 里面报文的处理都是通过 OVS OpenFlow 流表来实现的,而在 Neutron 里面二层报文处理是通过 OVS OpenFlow 流表来实现,三层报文处理是通过 Linux TCP/IP 协议栈来实现

OVN L3 对比 Neutron L3

Neutron 的三层功能主要有路由,SNAT 和 Floating IP(也叫 DNAT),它是通过 Linux kernel 的 namespace 来实现的,每个路由器对应一个 namespace,利用 Linux TCP/IP 协议栈来做路由转发。

在支持 DVR(分布式虚拟路由器,在 Juno 版本增加的一个功能)之前,Neutron 的三层功能是在网络节点做的,所有东西向跨网段的流量都需要经过网络节点做路由,这使得网络节点成为瓶颈。有了 DVR 之后,路由变成了分布式,每个计算节点上面都可以做路由,东西向流量直接通过计算节点路由而不需要经过网络节点,Floating IP 也是在计算节点上面实现的,对于有 floating IP 的 VM 访问公网,直接走计算节点上面的路由器出去,对于没有 floating IP 的 VM 访问公网才会从网络节点的路由器 SNAT 出去。DVR 减轻了网络节点的负担,但是也引入了一些问题,DVR 需要每个计算节点占用 2 个公网 IP,并且 DVR 还不能和 FWaaS,VPNaaS 和 LBaaS 集成起来。

OVN 支持原生的三层功能,不需要借助 Linux TCP/IP stack,用 OpenFlow 流表来实现路由查找,ARP 查找,TTL 和 MAC 地址的更改。OVN 的路由也是分布式的,路由器在每个计算节点上都有实例,和 DVR 一样。有了 OVN 之后,不需要 neutron l3 agent 了。

不过目前 OVN 三层功能只能做东西向路由,Floating IP 的设计和 DVR 一样,方案还在 review 过程中,SNAT 的实现方法还没有确定。所以如果需要所有的三层功能,暂时还是要使用 neutron l3 agent。

南北流量: 客户端和服务器之间的流量被称为南北流量。简而言之,南北流量是server-client流量。

东西流量: 第二种流量即不同服务器之间的流量与数据中心或不同数据中心之间的网络流被称为东西流量。简而言之,东西流量是server-server流量。

五、OVN和其它通用SDN控制器的主要区别

  • OVN专注于实现云计算管理平台场景下的SDN控制器
  • OVN专注于实现二层和三层网络功能。除了在传输层实现了基于L4的ACL 外,基本上不在L4 ~ L7层实现某些功能

5.1、OVS 和 Open Day Light区别

这两个都叫SDN,用的场景不一样,现在云计算火了,各路神仙都想赚钱,搞得各种概念一坨一坨的,我个人理解在下面,不见得对,不喜勿喷

OpenVSwith 最开始是仿照VMware的DVS做出来的,主要用于虚拟机的二层网络包交换,由于一部分Nicira的人是从VMW过去的,对DVS的弱点做了补充,加入了OpenFlow的内容,原来的DVS是控制不了物理的交换机和路由器的,但Nicira的openflow controller可以控制虚拟交换机以外的物理交换机和路由器。

OpenDayLight,从一开始就是按照Openflow的想法,用于物理交换机和路由器的,这局缺少了对虚拟机的支持。

所以最大的区别就是,opendaylight不是为虚拟化环境用的,而只是用于物理的交换机和路由器的。

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
5分钟 maven3 快速入门指南

前提条件 你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。 安装Mav...

fanl1982
2014/01/23
1.2W
7
J360-cloud SpringCloud系列一:分布式配置服务器ConfigServer

j360开源博客之 ---------------------------------------------------------- J360-Cloud系列 spring-cloud快速入门工程之j360-cloud-all:(欢迎star、fork) https://github.com/xuminwl......

Hi徐敏
2015/10/08
4K
14
Ember.js 入门指南——路由定义

当你的应用启动的时候,路由器就会匹配当前的URL到你定义的路由上。然后按照定义的路由层次逐个加载数据、设置应用程序状态、渲染路由对应的模板。 1,基本路由 在app/router.js的map方法里定...

ubuntuvim
2015/09/24
3.6K
8
AppleWatch开发入门三——代码交互与控制器生命周期

AppleWatch开发入门三——代码交互与控制器生命周期 一、引言 在前两篇博客中,讨论了关于watch开发中框架与界面布局相关,然而主要的逻辑,终究还是要通过代码来实现的,在我们创建了项目之...

珲少
2015/10/14
875
1
AppleWatch开发入门四——Table视图的应用

AppleWatch开发入门四——Table视图的应用 一、Watch上的Table WatchOS中的TableView和iOS中的TableView还是有很大的区别,在开发之前,首先我们应该明白WatchOS中的Table有哪些局限性和特点...

珲少
2015/10/15
1.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

Vue视频播放器 vue-video-player

Vue视频播放器 vue-video-player 本篇主要记录一下 在 vue 项目中 如何使用 vue-video-player 来作为视频播放器,由于最近在做博客的 轻松一刻模块 所以拿这个尝试一下 在此纪录一下 以及遇到...

AskaJohnny
8分钟前
5
0
Python是什么,Python语言及其特点简介

虽然软件产业的历史相对于人类历史只是白驹过隙,但世界上却存在非常多的编程语言,「Python」 就是其中之一。 Python 语言算得上一门“古老”的编程语言,Python 流行这么久,必然有它的独到...

前端老司机
17分钟前
11
0
serve 和 hhtp-server 对比

两个都是一个静态资源工具 npm i serve http-server -g https://github.com/http-party/http-server#readme https://github.com/vercel/serve#readme 由于遇到了cors问题, 目前选择http-se......

阿豪boy
18分钟前
8
0
java开发之阿里云接口发送短信验证码

随着互联网的兴起,各行各业的需求都在不断的增加。随着业务的扩大,企业给用户发送短信验证码的业务,也是如火如荼。在这里,calvin给各位开发者推荐阿里云短信平台。原因有二:1.接入较简单...

Arisono
28分钟前
9
0
如何从我的应用程序在Android的网络浏览器中打开URL? - How can I open a URL in Android's web browser from my application?

问题: How to open an URL from code in the built-in web browser rather than within my application? 如何通过内置Web浏览器而不是应用程序中的代码打开URL? I tried this: 我尝试了这个...

javail
29分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部