目录
2.3 创建 Network / Subnet / Port
1. Netvirt总述
由上文中的OpenStack集成OpenDaylight架构内容可知,netvirt作为openstack后端有两种解决方案分别是:ovsdb-netvirt 和VPNService。
下面将分别介绍这两种provide的实现过程,其中ovsdb-netvirt是指融合之前的netvirt provide。
因为,融合之后的netvirt将以VPNService作为代码基础来实现,所以我们将从VPNService的角度来阐述融合之后的Netvirt的实现方案。
首先明确netvirt作为openstack的后端的主要工作内容:
(1)Netvirt项目主要包括ovsdb南向协议和网络虚拟化服务的提供者
(2)目前主要能支持北向的neutron API,南向支持openvswitch
2. ovsdb-netvirt实现
下面将介绍ovsdb-netvirt的实现过程,以Carbon为例:
2.1 连接计算节点的OVSDB Manager
具体流程如下:
(1)连接计算节点的ovsdb manager到controller
- ovsdb-southbound-plugin接受连接
- 并将数据写入MD-SAL operational datastore(操作数据库)
- datastore通知所有注册此事件的listener
(2)MD-SAL datastore代理发送通知给ovsdb-Netvirt-provider有新节点加入
(3)Netvirt将数据写入MD-SAL config datastore(配置数据库)创建br-int,并且设置controller
(4)MD-SAL datastore通知南向plugin有br-int配置数据加入
- 南向plugin通过ovsdb库创建桥
- 通过openflow plugin设置 桥 连接到controller
2.2 连接虚拟网桥 br-int
具体流程如下:
(1)连接br-int到controller
- openflow-southbound-plugin接受连接
- 将新节点数据写入MD-SAL operational datastore
(2)MD-SAL datastore把br-int 信息通知给netvirt provider
(3)Netvirt provider将相关流表写入MD-SAL config datastore
(4)openflow-southbound-plugin 从MD-SAL datastore得到有新流表信息,根据信息配置br-int流表 。
2.3 创建 Network / Subnet / Port
(1)openstack请求创建网络/子网/端口到达 ODL的Neutron Northbound,Neutron Northbound将其传递给Netvirt provider
(2)创建vm时,将会在计算节点创建端口,并且触发本地计算节点的ovsdb发送通知,ovsdb将会通知控制器的ovsdb-Sounthbound-plugin,ovsdb-Sounthbound-plugin将会更新port的状态信息更新到operational datastore。
(3) MD-SAL datastore 将会通知netvirt provider有新端口创建。
(4) netvirt provider将port的配置数据写到到MD-SAL config datastore
(5)ovsdb-Sounthbound-plugin从MD-SAL datastore得到有新的tunnel数据的通知,并且通过ovsdb Library创建tunnel interface
(6) openflow-southbound-plugin 从MD-SAL datastore得到有新流表信息,根据信息配置流表 。
2.4 openflow pipeline工作流程
Pipeline中的各级Table跳转逻辑如下图所示:
其逻辑是:分类->入向NAT->出向ACL->负载均衡->IP转发->入向ACL->出向NAT->MAC转发.
具体各级流表功能:
Table0对如向量坐标记,并将某些控制信令交给控制器;
Table20负责实现分布式ARP的代答,
Table30负责为浮动ip做南北向流量做入向NAT,
Table31负责将流量导入Table39和Table40,
Table39+Table40可实现基于lean的ACL,
Table40还能够独立实现基于conntrack的出向ACl规则,
Table50负责实现流量均衡,
Table60在各个节点实现分布式路由,完成对L3流量改写SRC MAC、该SegmentID以及减TTL这三个工作。
Table70负责回复VirtualRoute的ping request,以及对L3流量改写DST MAC,
Table80在目前carbon版本中没有什么作用,
Tbale90负责实现Security Group中的入向ACL规则,
Table100为浮动IP的南北向流量做NAT,Table105负责完成MAC地址的自学习,
Table110负责完成L2流量的转发。
2.5 ovsdb-netvirt总结
ovsdb-netvirt整个项目主要负责对ovs进行配置和管理;
openflow southbound plugin主要负责获取MD-SAl中的流表信息通知,并将流表下发到ovs,实现相应的功能配置;
ovsdb整个项目,主要又分为两个部分:networing netvirt provider 和 sounthbound plugin两部分:
networing netvirt provider项目的主要作用:
(1)接受来自odl neutron northbound plugin的请求,创建网络资源。
(2)接受来自MD-SAL的通知,并将相应的配置信息写到MD-SAL的配置数据库。
sounthbound plugin项目的主要作用:
(1)底层计算节点,网络资源发生变化,会触发sounthbound plugin,并将相应的状态信息写入到MD-SAl 操作数据库中。
(2)接受来自MD-SAL的通知,执行相应的配置。
简化来看,networing netvirt provider对应openstack的neutron plugin ,而sounthbound plugin 对应neutron agent。