OVN是OVS的控制平面,它给 OVS 增加了对虚拟网络的原生支持,大大提高了 OVS 在实际应用环境中的性能和规模。

使用neutron 配置mechanism_drivers  为OVN时,会有以下优点:

一.OVN使得Neutron组件数量减少

  • OVN原生ML2 driver替换掉 OVS ML2 driver 和 Neutron的OVS agent;
  • OVN原生支持L3和DHCP功能,这样就不再需要Neutron 的L3 agent、 DHCP agent 和DVR。
  • Neutron 的三层功能主要有路由,SNAT 和 Floating IP(也叫 DNAT),它是通 Linux kernel 的namespace 来实现的,每个路由器对应一个 namespace,利用 Linux TCP/IP 协议栈来做路由转发。
    OVN 支持原生的三层功能,不需要借助 Linux TCP/IP stack,用OpenFlow 流表来实现路由查找,ARP 查找,TTL 和 MAC 地址的更改。OVN 的路由也是分布式的,路由器在每个计算节点上都有实例,有了 OVN 之后,不需要 Neutron L3 agent 了 和DVR了。

 二.OVN是OpenvSwitch项目组为OpenvSwitch开发SDN控制器,同其他SDN产品相比,OVN对OpenvSwitch 及OpenStack有更好的兼容性和性能。

三.不再使用 RabbitMQ,而是基于OVN数据库进行通信

四.OVN 可以和很多 CMS(Cloud Management System)集成到一起

 

部署networking-ovn 参考:https://docs.openstack.org/networking-ovn/latest/install/manual.html

简单说一下部署步骤:

一.安装openstack-neutron    openstack-neutron-ml2    python-networking-ovn

二.配置neutron(https://docs.openstack.org/neutron/rocky/install/controller-install-rdo.html#prerequisites)

按常规去安装neutron,在/etc/neutron/neutron.conf中配置

core_plugin = ml2
service_plugins = networking_ovn.l3.l3_ovn.OVNL3RouterPlugin

配置ml2_conf.ini

mechanism_drivers = ovn
[ovn]
ovn_nb_connection = tcp:10.10.3.38:6641
ovn_sb_connection = tcp:10.10.3.38:6642
ovn_l3_scheduler = leastloaded
ovsdb_connection = unix:/var/run/openvswitch/db.sock

三.配置ovs

ovs-vsctl set open . external-ids:ovn-remote=tcp:IP_ADDRESS:6642
ovs-vsctl set open . external-ids:ovn-encap-type=geneve,vxlan
ovs-vsctl set open . external-ids:ovn-encap-ip=IP_ADDRESS
# 将ovn访问方式 改成 tcp
# ovn-nbctl set-connection ptcp:6641:0.0.0.0 -- \
            set connection . inactivity_probe=60000
# ovn-sbctl set-connection ptcp:6642:0.0.0.0 -- \
            set connection . inactivity_probe=60000

1.创建外部连接的网桥,做OVN映射

ovs-vsctl add-br  br-ex
ovs-vsctl set Open_vSwitch . external-ids:ovn-bridge-mappings=provider1:br-ex

注:这里的provider1 对应neurton  ml2.conf 里网络的设置

2.将宿主机上的外部网卡添加到网桥上

ovs-vsctl add-port br-ex  eth1(物理网卡)
ip link set br-ex  up
systemctl restart network

 

 

功能验证:

1.创建网络,创建子网, 创建port

使用neutron创建的网络在ovn上以switch形式存在

OpenStack SDN openstack sdn with ovn_IP

 

neutron创建出的port在对应OVN网络的switch上以port形式存在,在OVS上以port形式存在

OpenStack SDN openstack sdn with ovn_DHCP_02

2.DHCP

创建出来的子网根据创建参数是否开启DHCP,对于OVN自己的DHCP功能

OpenStack SDN openstack sdn with ovn_IP_03

3.路由

通过neutron创建出来的router在OVN上以router的形式存在

OpenStack SDN openstack sdn with ovn_子网_04

neutron添加路由的内部接口,即把子网网关接入路由。会在router上新建一个port  lrp-XXX。

neutron设置路由外部网关,即添加一条nat规则 ,类型为snat从而实现子网通过外部网关访问。

4.浮动IP

neutron创建浮动ip并绑定给port在OVN上对应创建了一条nat规则,类型为dnat_and_snat

OpenStack SDN openstack sdn with ovn_DHCP_05

 

5.虚拟防火墙

使用OVN后暂不支持fwaas 。如果需要实现此功能可以使用OVN自带的ACL来设置switch之间的访问控制

acl-add {SWITCH | PORTGROUP} DIRECTION PRIORITY MATCH ACTION

6.负载均衡

使用OVN后暂不支持lbaas。可以使用OVN自带的LB设置
lb-add LB VIP[:PORT] IP[:PORT]... [PROTOCOL]