本文简单介绍下ovn支持的隧道类型,具体可参考ovn-architecture的Tunnel Encapsulations部分。
报文在跨节点转发时,会被封装在隧道内,同时需要携带足够的信息,到达对端节点时才能正常处理。这些信息包括如下内容:
a. 24位的逻辑数据通道标识符,保存在sbdb的Datapath_Binding的tunnel_key列。
b. 15位的逻辑入端口标识符。id 0保留给ovn内部使用。id 1-32767给逻辑入端口使用。保存在sbdb的Port_Binding表的tunnel_key字段。
c. 16位的逻辑出端口标识符。id 0-32767给逻辑出端口使用,32768-65535给逻辑组播组使用(保存在sbdb的Multicast_Group表的tunnel_key字段)。
ovn支持三种隧道类型: Geneve, STT和vxlan。对于hypervisor之间的连接,最好使用Geneve和STT,因为这两个隧道可以携带上面的三个信息,而vxlan不能全部携带这三个信息,所以功能比较受限。对于hypervisor和网关之间的连接,可以使用这三种隧道。
由于Geneve的灵活性,所以它是ovn中更受欢迎的隧道类型。ovn将逻辑数据通道标识符保存到Gevene的VNI字段,将逻辑入端口和出端口保存在TLV(class为0x0102,type为0x80)中。格式如下
1 15 16
+---+------------+-----------+
|rsv|ingress port|egress port|
+---+------------+-----------+
0
如果环境中的网卡不支持对Gevene报文封装解封装的卸载,可以使用STT隧道来达到更高的性能。对于STT封装来说,ovn将需要的三个信息保存到STT的64位的隧道id中,格式如下
9 15 16 24
+--------+------------+-----------+--------+
|reserved|ingress port|egress port|datapath|
+--------+------------+-----------+--------+
0
如果在节点之间使用vxlan隧道,由于VNI只有24位,则只能携带逻辑数据通道标识符和出端口标识符,并且支持的id范围会缩小到12位。VNI的24位被划分为如下:
a. 12位的逻辑数据通道标识符。
b. 12位的逻辑出端口标识符。
c. 没有逻辑入端口标识符。
因为vxlan的受限的标识符范围,其功能也会受限,如下
a. 最大网络个数减少为4096。//datapath tunnel_key从24位减少到12位
b. 每个网络最大端口数减少为4096。//逻辑端口 tunnel_key从15位减少到12位。
c. acl不能匹配逻辑入端口。
d. 不支持ovn的interconnection功能。
对于和网关的连接,除了Geneve和STT外,ovn还支持vxlan,因为有些TOR只支持vxlan协议。
网友评论