OpenStack Neutron DVR L2 Agent的初步解析:DVR的创建及生效

云计算 OpenStack
OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就我们就来看下具体DVR是怎么样创建起来并且生效进行工作的。

OpenStack Juno版本已正式发布,这是这个开源云平台的10个版本,在Juno版的Neutron模块中真正引入了分布式路由(DVR)的实现,现在就我们就来看下具体DVR是怎么样创建起来并且生效进行工作的。

L2用Plugin与L3 agent交互

L2 OVS agent初始化

在L2 OVS agent初始化过程中,需要知道其主机***的DVR的MAC地址,为了将适当的OVS规则添加到隧道和集成网桥。为了这个目的,在L2 agent调用由ML2的插件提供的RPC函数 get_dvr_mac_address(HOST_ID)获取主机的DVR mac地址。

[[123223]]

分布式路由的创建

一个路由器可以建立为明确的分布式路由器。创建路由器(在分布式模式或以其他方式)所需的操作通常没有在agent上进行操作。只有当一个接口被添加到路由器中,有在L2和L3 agent才会采取行动。在插件这方面,创建路由器的信息存储在DB中,如下图所示。

将接口添加到路由器中

在 分布式路由器执行接口的增加命令导致routers_updated()的RPC在CN上的L3-agent被调用。作为这种服务的请求的一部分,L3- Agent-on-CN初步验证这个受影响的路由器是否是一个分布式路由。如果是,则获取对应于新增的接口的接口端口并将这个端口挂在集成网桥上。这个操 作在本质上类似于L3 agent,除了在L3-Agent-on-CN运行在计算节点,并增加了端口,这种端口只会在分布式路由器上。

这里的端口是一个分布式路由器的接口,将有一个特殊的device_owner字段值:network:router_interface_distributed

在 把路由器上的接口端口加入BR-INT后,L3-Agent-on-CN要求提供有关该子网接口上的云端口的列表信息。对于这一点,调用 get_compute_ports_ by_subnet(subnet_id)到L3的插件。L3插件与ML2插件通信,去得到可用的输入子网中的所有端口,并返回L3-Agent-on- CN的端口列表。L3-Agent-on-CN缓存这些端口,然后使用端口信息来创建在DVR路由器命名空间上的静态ARP表项。这样就完成了路由器接口 的DVR侧的处理。

由 L3-Agent-on-CN加入路由器接口的端口被 L2 Agent检测到。L2 Agent识别到如果该端口是一个分布式的路由器接口。如果没有,它进行通常处理。如果是的话,它进行特殊处理,在其中调用 get_compute_ports_on_host_by_subnet(subnet_id),以获得本地虚拟机在此路由器的接口列表。然后,它使用 的端口列表及路由器接口的端口信息,在隧道和集成网桥上建立OVS规则。

从分布式路由移除接口

在 一个分时路由上执行一个路由接口的删除命令,在L3-Agent-on-CN调用routers_updated() RPC请求。作为这样一个请求的服务的一部分,L3-Agent-on-CN初始化时验证这个影响到的路由器是否是一个分布式路由,如果是,他就会获取对 应的要被删除掉额接口端口。再将路由接口端口从集成网桥移除。这个操作在本质上类似于L3 agent,除了在L3-Agent-on-CN运行在计算节点,而且删除的端口,这种端口只会在分布式路由器上。 在删除路由器上在br-int上的接口端口,L3-Agent-on-CN这个端口的缓存来确定端口中可以被删除的路由器接口就行。然后它会为列表中所有 端口移除路由器命名空间中的静态ARP表项。这样就完成了DVR侧的路由器接口删除的处理。

 

这些被L3-Agent-on-CN删除的路由器接口端口被L2 agent检测到。L2 agent识别这个端口是否是分布式路由接口。如果不是,就进行通常处理;如果是,完成特定的进程,将所有的与删除的路由器接口端口匹配的OVS规则从集成网桥和隧道网桥中移除。

新的虚拟机加入到分布式路由器的子网接口

当 一个新租户下VM被添加到分布式路由管理的子网接口,一个创建port的api调用被nova完成去主持新租户下的VM。作为ML2插件提供的创建端口服 务的一部分,ML2插件将通知L3 Plugin一个新的端口正在被添加。L3 Plugin将检查这个新的端口是否在一个DVR组建的子网中。如果不是,则不做任何操作。如果是,L3 Plugin将启动一个RPC call port_add() 到 the L3-Agent-on-CN。L3-Agent-on-CN收到这个RPC请求,会获取这个port的信息,然后为这个port增加静态的ARP表项到 对应的路由器命名空间。这样就完成DVR侧对一个新租户的VM port的增加。

新 租户的VM的端口被L2 agent检测到,L2 agent验证这个端口是否是已经存在分布式路由的子网的一个成员。如果不是,则做普通操作。如果是,执行特定操作:在br-int和br-tun上为匹 配的子网网关添加这个port(OFPORT)到现有的OVS规则中。

 

现有的虚拟机从一个分布式的路由器子网接口中删除

当 一个租户VM从一个被分布式路由管理的子网中移除,一个DeletePort API调用被Nova执行用来删除租户VM。作为ML2插件提供的删除创建端口服务的一部分,ML2插件将通知L3 Plugin一个新的端口正在被删除。L3 Plugin将检查这个要删除的端口是否在一个DVR组建的子网中。如果不是,则不做任何操作。如果是,L3 Plugin将启动一个RPC call port_delete() 到 the L3-Agent-on-CN。L3-Agent-on-CN收到这个RPC请求,会获取这个port的信息,然后为这个port移除静态的ARP表项到 对应的路由器命名空间。这样就完成DVR侧对一个新租户的VM port的移除。

移除的port被L2 agent检测到,L2 agent验证这个端口是否是已经存在分布式路由的子网的一个成员。如果不是,则做普通操作。如果是,执行特定操作:在br-int和br-tun上为匹配的子网网关移除这个port(OFPORT)到现有的OVS规则中。

原文出自:http://blog.csdn.net/canxinghen/article/details/41443127

责任编辑:Ophira 来源: Hcloud的博客
相关推荐

2015-01-20 13:19:52

OpenStack网络层数据链路层

2022-04-20 15:37:54

恶意软件漏洞恶意代码

2015-07-27 15:45:29

企业级应用OpenStack网络服务

2022-02-17 16:47:40

OpenharmonIPC通信鸿蒙

2022-02-14 13:52:04

OpenHarmor系统鸿蒙

2015-08-18 09:40:32

OpenStack Neutron虚拟网络

2022-02-08 15:07:45

OpenHarmor鸿蒙操作系统

2022-07-04 16:41:16

IPC通信HiTrace

2022-02-21 15:38:57

Openharmon操作系统鸿蒙

2022-07-14 19:03:33

IPC服务鸿蒙

2022-06-22 09:14:23

事件打点HiSysEvent

2015-09-17 11:32:56

NeutronSDN虚拟网络

2013-11-07 10:17:00

OpenStack开源Neutron

2021-10-20 19:14:30

缓存CacheCPU

2015-06-09 09:51:20

SDNOpenStackNeutron

2012-11-06 10:10:06

BoxeeDVR云存储

2023-10-10 15:33:55

机器学习相似性度量

2014-01-10 09:20:33

OpenStackOpenStack N

2015-06-15 09:43:05

SDNOpenStack N

2015-12-11 16:23:16

点赞
收藏

51CTO技术栈公众号