ovn-sb 摘要
1、Database Structure
- Physical network table中包含了和chassis nodes有关的所有信息,包括用于overlay所需的IP地址,支持的tunnel类型以及security key。其中Chassis table和Encap table都是physical network tables
- Logical network table包含logical switches,logical routers,ACLs,firewall rules以及所有用于描述packet如何流经logical network的logical datapath flow。logical network的数据可能很大,因此为了提高扩展性,每个chassis只保存它参与的logical network的有关的数据。
- Logical-physical bindings 用于连接logical component和physical component。其中表明了logical component当前所在的chassis以及在tunnel encapsulation中代表的logical entities的value。
- MAC_Binding table用于追踪那些使用ARP和ND动态发现的IP address - Ethernet address bindings。通常虚拟机的IP-to-MAC是位于Port_Binding table中的,因此MAC_Binding中主要用于发现physical network中的bindings
2、SB_Global TABLE
其中的nb_cfg是配置的序号。当CMS或者ovn-nbctl更新northbound database时,它会更新其中的NB_Global table的nb_cfg列。接着当ovn-northd更新southbound database和northbound database同步时,它也会同步SB_Global中的nb_cfg
3、Chassis TABLE
这个表中的每一行都代表了物理网络中的一个hypervisor或者gateway(a chassis)。每个chassis都通过ovn-controller/ovn-controller-vtep来添加或者更新它自己对应的行,并且保留其他行的拷贝用于确认如何到达其他hypervisor。
4、Encap TABLE
Chassis table中的encap column会引用这个table中的某行,用于标识OVN应该怎样将logical dataplane packets传输到该chassis。
5、Logical_Flow TABLE
这个表中的每一行都代表了一个logical flow。ovn-northd用logical flow填充本表,用以实现OVN_Northbound中的L2和L3拓扑逻辑。每个hypervisor再通过ovn-controller将logical flow转换成OpenFlow flows并将其装入Open vSwtich。
logical flow和OpenFlow flow很像,主要区别在于logical flow使用的是logical ports和logical datapaths,而不是physical ports和physical datapaths。logical flow和physical flow之间的转换有助于确保logical datapaths间的隔离性。(同时logical flow这一抽象模型有助于减轻OVN中心组件的负担,因为它们不再需要为每个chassis单独计算并安装physical flow了)
如果没有匹配的flow,默认的行为是drop packet
Architectural Logical Lift Cycle of a Packet
下文的描述可能让人产生都是OVN自己执行的这些操作,事实上OVN(利用ovn-controller)通过OpenFlow和OVSDB对Open vSwitch进行编程,让它来代替执行的。
OVN首先将packet传入logical datapath的logical ingress pipeline,接着它会将packet输出到一个或多个logical port或者logical multicast groups中。对于每个logical output port,OVN将packet传输给datapath中的logical egress pipeline,它可能会drop the packet或者将它送往目的地。在两个pipeline之间,OVN可能会将packet封装到tunnel中并传输到remote hypervisor。
更详细的说,首先,OVN会对Logical_Flow table进行搜索,寻找一条正确的logical_datapath,它的pipeline为ingress,table_id为0,以及和该packet匹配。如果没有找到,OVN会drop the packet。如果OVN找到了很多条,则选择其中具有最高优先级的一条。接着OVN会以规定的顺序执行该行对应的action。其中的next和output action比较特殊。
next action会让上述的执行过程重复递归地执行,不同的是OVN会查询table_id 1而不是0。当递归结束时,会接着执行next之后的action。
output action同样会引入递归。它的具体作用取决于output field当前的value。假设ouput指向一个logical port。首先OVN会比较inport和outport,如果两者相等,默认output不做任何操作。一般来说,两者是不同的,packet会进入egress pipeline,并且丢弃reg0 ... reg9,这些寄存器信息和connection tracking state,从而无论egress pipeline是否在不同的hypervisor中都能够保持一致的行为。
当执行egress pipeline时,OVN会再次对Logical_Flow进行搜索,找寻正确的logical_datapath,同样table_id为0,匹配该packet,不同的是,此时寻找的是egress类型的pipeline。如果没要找到匹配的flow,那么output不做任何操作。否则OVN执行matching flow中的action。
在egress pipeline中,next action和ingress pipeline中的相同,而output action则直接将packet传输到output port。
6、Port_Binding TABLE
该表中的每一行都绑定了一个logical port和它的具体实现。对于大多数的logical ports,这意味着和某个physical location绑定,例如绑定一个logical port到运行在某个hypervisor中的某个虚拟机的VIF。其他的logical ports,例如logical patch port,没有具体的physical location,但是它们的binding依然可以在这个表中出现。
对于OVN_Northbound database中的每个Logical_Switch_Port记录,ovn-northd都会在这个表中创建一条记录。并且ovn-northd填充并且维护除了chassis column中的每一列。
ovn-controller/ovn-controller-vtep会填充chassis column,当它通过监听本地的Open_vSwitch database发现logical port就位于自己所在的hypervisor中。
7、MAC_Binding TABLE
该表中的每一行代表一个IP地址以及通过ARP(对于IPv4)或者ND(对于IPv6)发现的Ethernet address。这个表主要用于发现和physical network的绑定关系,因为虚拟机的IP-to-MAC通常是静态绑定到Port_Binding table中的。
概况来说,logical router的MAC binding的生命周期如下所示:
- 在hypervisor 1中,一个logical router发现有一个packet需要发往IP地址为A的router port。通过查找logical flow table之后,它发现A缺少静态的IP-to-MAC binding,而通过get_arp发现它缺少动态的IP-to-MAC binding。
- 通过OVN logical arp action,logical router会创建并发送一个广播ARP请求到router port并且丢弃IP packet
- 和router port相连的logical switch将ARP请求转发到它的所有ports
- hypervisor2中和该logical switch相连的虚拟机如果拥有请求中的IP地址,它就会创建一个APR reply并且将其单播到发出请求的logical router port的Ethernet address
- logical switch将ARP reply转发到logical router port
- logical router的flow table执行put_arp action。ovn-controller会在MAC_Binding table中增加一行用于记录IP-to-MAC binding
- 在hypervisor1中,ovn-controller从OVN southbound database中获取了更新过的MAC_Binding table。下一个通过logical router发往A的packet将直接送往bound Ethernet address
8、Datapath_Binding TABLE
这个表中的每一行代表了一个logical datapath,它实现了和它相关的Port_Binding中的ports之间的logical pipeline。事实上,给定的logical datapath中的pipeline实现的不是一个logical switch就是一个logical router。
这个表的主要目的是为logical datapath提供physical binding。一个logical datapath没有physical location,因此它的physical binding信息是有限的:只有tunnel_key。该表中的其他数据并不影响packet的转发
ovn-sb 摘要的更多相关文章
- .NETFramework:StringBuilder
ylbtech-.NETFramework:StringBuilder 1.程序集 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken ...
- 基于HTTP在互联网传输敏感数据的消息摘要、签名与加密方案
基于HTTP在互联网传输敏感数据的消息摘要.签名与加密方案 博客分类: 信息安全 Java 签名加密AESMD5HTTPS 一.关键词 HTTP,HTTPS,AES,SHA-1,MD5,消息摘要,数 ...
- HTTP摘要认证原理以及HttpClient4.3实现
基本认证便捷灵活,但极不安全.用户名和密码都是以明文形式传送的,也没有采取任何措施防止对报文的篡改.安全使用基本认证的唯一方式就是将其与 SSL 配合使用. 摘要认证是另一种HTTP认证协议,它试图修 ...
- 实现自动文本摘要(python,java)
参考资料:http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html http://joshbohde.com/blog/d ...
- MD5摘要(Java实现)
消息摘要算法又成散列算法,其核心在于散列函数的单向性.即通过散列函数可获得对应的散列值,但不可以通过散列值反推其原始信息. 消息摘要算法分为以下三大类: MD(Message Dige ...
- HTTP认证之摘要认证——Digest(二)
导航 HTTP认证之基本认证--Basic(一) HTTP认证之基本认证--Basic(二) HTTP认证之摘要认证--Digest(一) HTTP认证之摘要认证--Digest(二) 在HTTP认证 ...
- 获取一段HTML文本中的第一张图片与截取内容摘要
有时候我们获得到的数据是一段HTML文本,也许这段文本里面有许多图片,需要截取一张作为标题图片,这时就可以用到下面这个方法获取到第一张图片: #region 获取第一张图片 /// <summa ...
- Gradle +HanLP +SpringBoot 构建关键词提取,摘要提取 。入门篇
前段时间,领导要求出一个关键字提取的微服务,要求轻量级. 对于没写过微服务的一个小白来讲.有点赶鸭子上架,但是没办法,硬着头皮上也不能说不会啊. 首先了解下公司目前的架构体系,发现并不是分布式开发,只 ...
- java根据html生成摘要
转自:http://java.freesion.com/article/48772295755/ 开发一个系统,需要用到这个,根据html生成你指定多少位的摘要 package com.chendao ...
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
随机推荐
- 怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!
怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为 ...
- php常见的坑
10.filesize缓存的问题 PHP的filesize居然会缓存(当然还有不少,这里仅用filesize举例,其它会缓存的函数,以官方文档为准)线上代码经常随机出各种问题,排查了1个月,线上加各种 ...
- mybatis由浅入深day01_5.3 Mapper动态代理方法
5.3 Mapper动态代理方法(程序员只需要写mapper接口(相当于dao接口)) 5.3.1 实现原理(mapper代理开发规范) 程序员还需要编写mapper.xml映射文件 程序员编写map ...
- MySQL<事务与存储过程>
事务与存储过程 事务管理 事务的概念 谓的事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,即事务中的语句要么都执行,要么都不执行. 事务的使用 开启事务 ...
- 查看内存使用情况:free
free命令用于显示内存的使用情况,常见用法如下: [root@localhost ~]$ free # 以KB为单位显示内存使用情况 [root@localhost ~]$ free -m # 以M ...
- VS2015编译OpenSSL1.0.2源码
更多详细信息http://blog.csdn.net/YAOJINGKAO/article/details/53041165?locationNum=10&fps=1 1.下载安装编译必须的A ...
- vue中的小踩坑(01)
前言: 昨天算是使用vue2.0+element-ui做了一点小小的页面,可是源于其中遇到的问题,特地整理一下,以防自己还有其他的小伙伴们继续踩坑. 过程: 1.不知道大家有没有注意到 ...
- 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象
类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...
- 拼图的几个网上找到的Demo
东西就直接放到云盘里了 https://yunpan.cn/ck8eCzJe9Pknm 访问密码 ee53
- 编译boost程序出现如下错误fatal error LNK1104: cannot open file 'libboost_system-vc100-mt-gd-1_54.lib'的解决方法
对于如下程序: #include <iostream> #include <boost/asio.hpp> #include <boost/date_time/posix ...