OVN是OVS的控制平面,它给 OVS 增加了对虚拟网络的原生支持,大大提高了 OVS 在实际应用环境中的性能和规模。
使用neutron 配置mechanism_drivers 为OVN时,会有以下优点:
一.OVN使得Neutron组件数量减少
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形式存在
neutron创建出的port在对应OVN网络的switch上以port形式存在,在OVS上以port形式存在
2.DHCP
创建出来的子网根据创建参数是否开启DHCP,对于OVN自己的DHCP功能
3.路由
通过neutron创建出来的router在OVN上以router的形式存在
neutron添加路由的内部接口,即把子网网关接入路由。会在router上新建一个port lrp-XXX。
neutron设置路由外部网关,即添加一条nat规则 ,类型为snat从而实现子网通过外部网关访问。
4.浮动IP
neutron创建浮动ip并绑定给port在OVN上对应创建了一条nat规则,类型为dnat_and_snat
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]