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的转发