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的生命周期如下所示:

  1. 在hypervisor 1中,一个logical router发现有一个packet需要发往IP地址为A的router port。通过查找logical flow table之后,它发现A缺少静态的IP-to-MAC binding,而通过get_arp发现它缺少动态的IP-to-MAC binding。
  2. 通过OVN logical arp action,logical router会创建并发送一个广播ARP请求到router port并且丢弃IP packet
  3. 和router port相连的logical switch将ARP请求转发到它的所有ports
  4. hypervisor2中和该logical switch相连的虚拟机如果拥有请求中的IP地址,它就会创建一个APR reply并且将其单播到发出请求的logical router port的Ethernet address
  5. logical switch将ARP reply转发到logical router port
  6. logical router的flow table执行put_arp action。ovn-controller会在MAC_Binding table中增加一行用于记录IP-to-MAC binding
  7. 在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的转发

原文地址:https://www.cnblogs.com/YaoDD/p/7646999.html