OVN系列4

配置一个简单的L2 和 L3 Network 测试拓扑,包含两个L2 Network(logic switch),每个L2 Network连接两个vm(用netns模拟),包含一个VPC Router(logic router)连接两个L2 Network,使其能够三层互通 。
这里将模拟云网络东西向流量的二三层互通 。不涉及南北向流量 。
逻辑拓扑如下:
分别测试同主机互通和跨主机互通 , 所以我们将"400-vm2" 这个虚拟机单独放到Node节点上,其他VM放到Central节点上 。
物理拓扑如下:
OVN L2功能包括
1、配置sw-300 , 同主机二层互联
2、配置sw-400,跨主机二层互联
OVN L3的功能包括
虚拟机vm-300-1、vm-300-2位于VPC网络sw-300中,二层互通;
虚拟机vm-400-1、vm-400-2位于VPC网络sw-400中 , 跨主机二层互通;
两个VPC网络中的VM相互之间三层互通 。
OVN 逻辑拓扑和我们的配置一一对应 , 表达了传统意义上的拓扑,OVN根据已经配置的业务产生逻辑流表 (ovn-sbctl list Logical_Flow) 。
逻辑拓扑可以通过 通过ovn-nbctl show命令 查看,如下,可以看到逻辑datapath、逻辑port,以及他们的各种属性配置 。
OVN的物理拓扑当然是在ovs中的,其logic sw和logic router都是在ovs bridge br-int中实现的,是非常抽象的 , 数据面datapath网络功能基本都是通过流表实现;在物理拓扑形成前,如VM nic加入LS之前 , 逻辑流表不会转换为实际流表;
ovn-sbctl show显示了OVN Southbound DB信息,我们可以看到其已经很接近物理拓扑了,物理节点上的控制器就是通过监控Southbound DB来配置ovs的 。
其中有个Chassis的概念,等同于计算节点(HyperV),后面的一些需要指定节点信息的功能,如集中式公网出口网关、LB公网入口等都会指定这个信息;
ovs使用流表转发,ovn即使能够实现如此多的网络功能 , 也都是通过流表抽象实现的 。ovn将网络业务逻辑抽象为业务流表,节点上的控制器再将逻辑流表转化为实际ovs流表 。
同逻辑拓扑和物理拓扑类似,逻辑流表也更加的可读易懂 。通过ovn-sbctl list Logical_Flow 显示 。
如下显示一条arp reply的逻辑流表和实际流表,结合起来读事半功倍 。
实际流表中使用了很多寄存器存放元数据,在流的整个pipeline中生效 。下面列出了常用的几个寄存器的作用 。
虚拟机跨主机的流量需要通过tunnel口发出,但在这之前,转发流程已经在源主机上确认了,即当前是在那个逻辑设备上(metadata)、从那个口收(reg14)、从那个口出(reg15)都已经确认 , 从tunnel口发出时,这些信息都会设置到tunnel的option中(可扩展的元数据),到了对端主机后,再取出设置到对应的寄存器中 。
如下: 逻辑设备设置到NXM_NX_TUN_ID 中,in_port 和 out_port设置到tunnel的元数据 NXM_NX_TUN_metaDATA0 中 。
【OVN系列4】
流表中有很多controller action , 都是需要上送控制器处理的逻辑,基本做两件事情: