Windows 上 Neutron OVS agent

https://blueprints.launchpad.net/neutron/+spec/hyper-v-ovs-agent

由于 Open vSwitch 已成功移植到 Hyper-V,现在 Neutron OVS L2 agent 也可以在 Linux 和 Windows 上运行。大部分移植工作包括将 Linux 特定的依赖项替换为可移植的替代方案,特别考虑到 agent 主要执行 OVS CLI 命令,并且 OVS 在 Linux 和 Windows 上具有相同的命令行界面。

问题描述

当前 OVS agent 的实现包含一些 GNU/Linux 特定的组件

  • 使用 rootwrap。这在 Windows 上是不必要的。

  • fcntl 在 agent.linux.utils 中使用,该模块被 agent.linux.ovs_lib 导入。它也被 eventlet 用于设置非阻塞 I/O。fcntl 在 Windows 上不可用,因此任何对此的依赖都将被替换为 Windows 兼容的替代方案。

  • ovsdb_monitor.SimpleInterfaceMonitor 目前仅在 GNU/Linux 上工作。原因是 agent.linux.async_process.AsyncProcess() 使用平台特定的组件,例如 kill 命令。将创建一个 Windows 替代方案来解决这个问题。

提议的变更

考虑到 OVS agent 当前使用一系列 exec 调用来调用 ovs-vsctl 和 ovs-ofctl,ovs_lib 和部分(如果不是全部)utils 将在 Linux 和 Windows 上几乎相同。这意味着它们需要从 neutron.agent.linux 移动到公共位置,例如:neutron.agent.common。将创建一个基类,并抽象平台特定的差异(例如,rootwrap 的需要)。

数据模型影响

REST API 影响

无。

安全影响

无。

通知影响

无。

其他最终用户影响

无。

性能影响

无。

IPv6 影响

无。

其他部署者影响

此更改需要用户在部署 neutron ovs agent 之前安装 Hyper-V 上的 Open vSwitch,并使二进制文件在 PATH 中可用。

开发人员影响

无。

社区影响

备选方案

Neutron Hyper-V agent 已经支持 ML2 插件,反过来允许与其他机制驱动程序互操作,包括 Open vSwitch。此选项的主要限制是,由于 Hyper-V 本身不支持 VXLAN 或 GRE 封装,因此网络仅限于 VLAN 和 flat 选项。

实现

负责人

主要负责人

gabriel-samfira

工作项

  • 将 neutron.agent.linux.ovs_lib 和 neutron.agent.linux.utils 的部分内容移动到 neutron.agent.common

  • 创建一个用于与 Open vSwitch 交互的基类,并抽象平台特定的差异。

  • 移除对 roowrap 的需求。仅在 GNU/Linux 上启用它

  • 相应地更新/添加单元测试

依赖项

此更改不直接依赖于任何其他蓝图。但是,它与以下内容相关

测试

此功能将由 Hyper-V CI 进行测试。

Tempest 测试

当前的 tempest 测试已经足够。

功能测试

将根据需要添加功能测试。

API 测试

无。

文档影响

用户文档

文档应反映 OVS agent 现在也适用于 Hyper-V。

开发人员文档

无。

参考资料

[1] https://blueprints.launchpad.net/nova/+spec/hyper-v-ovs-vif [2] https://github.com/openvswitch/ovs [3] http://www.cloudbase.it/open-vswitch-on-hyper-v [4] https://github.com/gabriel-samfira/neutron/tree/windows-ovs-agent-poc