Openvswitch Agent 上分布式路由器通告¶
RFE: https://bugs.launchpad.net/neutron/+bug/1961011
Neutron L3 路由器将运行 radvd 来发送 RA(路由器通告)数据包,以通知虚拟机子网的 ManagedFlag、LinkMTU 和 IPv6 子网的前缀。这对于小型云或长期稳定的云环境(没有更改)来说是可以工作的。但对于大型云环境,管理复杂性会增加。
Neutron openvswitch agent 可以被认为是分布式 SDN 控制器,本文档描述了如何在分布式模式下,在每个计算节点上使 RA 工作,而无需额外的进程。
问题描述¶
radvd 在 L3 路由器命名空间中启动,它将在路由器接口上多播 RA,到达所有连接的虚拟机。当前的 radvd 配置如下
interface qr-8fd65326-c4
{
AdvSendAdvert on;
MinRtrAdvInterval 30;
MaxRtrAdvInterval 100;
AdvLinkMTU 1500;
AdvManagedFlag on;
prefix fda7:a5cc:3460:3::/64
{
AdvOnLink on;
AdvAutonomous off;
};
};
为了完成这项工作,L3 agent 需要执行以下操作:* 启动一个 radvd 的进程管理器 * 渲染 radvd 的配置文件 * 监控额外的进程,以防意外退出 * 在发生更改时重新启动进程
对于 DVR 路由器,radvd 也会在计算节点上的每个本地路由器命名空间中运行。
在某些情况下,这会增加服务器进程的数量,增加服务器的资源消耗,增加故障点,并降低 L3 agent 的处理性能。
当前 RA 机制存在缺陷。它强制子网与 Neutron 路由器关联,如果您希望 Neutron 管理 IPv6 相关的配置 [2]。那么,如果一个子网没有连接到路由器,radvd 将不会响应 RS 请求,也不会返回 RA。隔离网络下的虚拟机将无法找到如何处理 IPv6 地址,如何配置 IPv6 地址,以及如何处理 DHCPv6。
因此,此 agent 扩展将使隔离网络能够使用 IPv6。在其下的虚拟机将获得关于 IPv6 子网前缀、自主地址配置标志、管理地址配置标志和其他配置标志的 RA。隔离网络下的虚拟机将根据这些标志使用 IPv6。
提议的变更¶
为 Neutron openvswitch agent 添加一个 agent 扩展,以更自然和优雅的方式向本地虚拟机发送 RA。
注意
此扩展仅适用于 openvswitch agent,其他机制驱动程序将不被考虑,因为此新扩展将依赖于 openflow 协议和原理。
提出的解决方案¶
新的 agent 扩展将使用 os-ken(ryu) [1] 来组装 RA 数据包,然后直接通过 packet-out 到 ofport(虚拟机端口)。任务完成,非常简单!一些主要的代码流程将是
新扩展使用子网缓存列表初始化
启动一个周期性循环,向来自这些子网的每个端口发送 RA
在
handle_port方法中,每个虚拟机端口的子网将被添加到缓存中在
delete_port中,从子网的端口缓存中删除虚拟机端口通过资源缓存 RPC 获取子网信息
循环发送 RA 到每个端口
Openvswitch agent 将通过“资源缓存”相关的 RPC 拉取端口、子网和网络信息。
注意
在某些情况下,neutron 路由器将与上游物理路由器交互。此扩展将不处理此类配置和部署架构。
如果子网的属性 ipv6_ra_mode 为 None,则 Neutron 将不会向虚拟机生成 RA。 ipv6_ra_mode = None 将用于指示是否存在外部(物理)路由器。
实现¶
负责人¶
LIU Yulong <i@liuyulong.me>
工作项¶
添加 ovs-agent 扩展来完成 RA 工作。
使 L3-agent radvd 可配置。
测试。
文档。
依赖项¶
无
测试¶
测试用例以验证 RA 是否适用于端口。