OpenStack Neutron ML2

2020-07-02 00:00:00 功能 代码 架构 网络 是在

Neutron 系列文章 Neutron Topic Tree:

本文所有的内容都基于OpenStack Pike版本。

其实在2016年,我曾经在IBM Developerworks上写过一篇文章介绍Neutron ML2。现在,在经历了OVN和Dragonflow的ML2重构之后,现在再来回顾一下ML2。

首先,什么是ML2?ML2(Modular Layer 2)是Neutron Server中管理L2相关功能的模块。

Neutron Server

既然是Neutron Server中的模块,那就先看看ML2在Neutron Server架构中的位置。

OpenStack Neutron是OpenStack中的网络项目。Neutron由多个进程构成,这些进程分布在一个或者多个(通常是多个)主机上,协同工作,为OpenStack提供网络服务。所有这些进程的核心是Neutron Server,所有的API,DB,RPC请求,都是在这里汇总处理,主要的业务逻辑也是在Neutron Server中完成。可想而知,Neutron Server是所有Neutron进程中复杂的。Neutron Server的架构粗略看来,如下所示:

实际的架构要更加复杂,不过为了说明ML2,这个架构就够了。

Neutron Server北向提供REST API,Neutron的REST API/Resource都是在extension中定义,api router只是简单的将REST API定位到extension。extension与实际的plugin关联。

具体的REST API的处理都是在plugin中进行。Neutron Server的业务代码是由一个个plugin构成,这里分为core plugin和service plugin。Core plugin是实现了L2功能的plugin,service plugin是其他所有的plugin的统称,包括实现了Router的L3Plugin,实现了Trunk的Trunkplugin,实现了Segment的SegmentPlugin等等。可以看出,一个plugin就是一个小的网络功能。业务逻辑运算,DB和RPC的调用都是在plugin内部完成。

Neutron Server与其他Neutron进程(Neutron agents)的交互,通过Message Queue或者说是RPC(RabbitMQ)调用完成。Neutron中的service plugin都定义在这个目录:

neutron/neutron/services

相关文章