OpenStack集成OpenDaylight环境详解(二)- ODL组件Netvirt介绍和流表分析之ovsdb篇

目录

1. Netvirt总述

2. ovsdb-netvirt实现

2.1 连接计算节点的OVSDB Manager

2.2 连接虚拟网桥 br-int

2.3 创建 Network / Subnet / Port

2.4 openflow pipeline工作流程

2.5 ovsdb-netvirt总结


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

OpenStack集成OpenDaylight环境详解(二)- ODL组件Netvirt介绍和流表分析之ovsdb篇_第1张图片

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流表 。

OpenStack集成OpenDaylight环境详解(二)- ODL组件Netvirt介绍和流表分析之ovsdb篇_第2张图片

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得到有新流表信息,根据信息配置流表 。

OpenStack集成OpenDaylight环境详解(二)- ODL组件Netvirt介绍和流表分析之ovsdb篇_第3张图片

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流量的转发。

OpenStack集成OpenDaylight环境详解(二)- ODL组件Netvirt介绍和流表分析之ovsdb篇_第4张图片

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。

 

你可能感兴趣的:(openstack)