为 libvirt 虚拟化添加新的虚拟接口类型 MacVTap

https://blueprints.launchpad.net/nova/+spec/libvirt-macvtap-vif

将 macvtap 作为新的虚拟接口 (vif) 类型添加到 Nova 的 libvirt 驱动程序。这是为了通过 macvtap 将 libvirt 管理的 KVM 虚拟机连接到主机网络所必需的。它将被新的 macvtap ml2 插件和 agent 利用。当前规范托管在 github 上 [1],但最终目标是将它纳入统一管理。

Macvtap 虚拟机连接具有以下优点
  • 吞吐量明显高于参考实现 ovs

  • 延迟明显低于参考实现 ovs

  • 与参考实现 ovs 相比,超visor 上的每吞吐量 CPU 消耗明显降低

  • 内置于每个内核中 - 无需额外软件包

  • 配置所需的工作量更少

然而,macvtap 连接的缺点是,目前技术上无法支持安全组和规则。更多细节请参见“安全影响”部分。

问题描述

新的 macvtap neutron 驱动程序和 agent [1] 需要 nova vif 驱动程序集成。相应的 vif_type 应该代表一个通用的 macvtap 设备。它负责 * 根据 xml 定义创建 * 正确的插拔操作

用例

  • 通过 macvtap 将 libvirt/KVM 虚拟机连接到主机网络

Nova 侧的参与者没有额外影响(配置在 Neutron 中完成)

项目优先级

提议的变更

添加对通用 macvtap vif_type 的支持,该类型由以下 domain.xml 表示

<interface type='direct'>
  <source dev='<macvtap_src>' mode=’<mode>’/>
  <model type='virtio' />
</interface>

以下属性是 neutron 必须通过 vif 字典传递给 nova 的变量

  • macvtap_src: 这是 macvtap 的源设备(macvtap 所在的设备)。

  • mode: macvtap 设备应该实例化时的模式。例如 ‘bridge’ 或 ‘vepa’

带宽配置与使用基于 macvtap 的连接的其他 vif 类型一样受支持(例如 ‘hw_veb’)。

此提议的更改将考虑正在进行中的 os-vif-library 讨论 ([5] 或替代方案 [3]) 并

  • 如果获得批准,则以这种新方式实现。

  • 如果它被移出,则以旧方式实现。

相应的 neutron 代码将使用 vnic_type ‘normal’。

备选方案

重用现有 vif_type

重用已存在的类型是不可能的

  • 它取决于 [5] 允许不同的插拔操作

  • 它需要重构现有的 vif_types xml 生成方法

  • 现有的 vif_type 将不得不重命名,这会破坏其他 ml2 插件

为直接连接创建新的通用 vif_type

这将是 os-vif-library 工作的一部分 [5]

支持的 vnic 类型

计划仅支持 vnic_type ‘normal’。

然而,还有另外两种 vnic_type:‘direct’ 和 ‘macvtap’。这两种 vnic_type 都会在 nova 中触发 PCI 请求,因此无法重用。新的 macvtap 支持应该是硬件独立的。但仅看名称,我可以看到与现有 ‘macvtap’ 类型的混淆。一个想法是将类型 ‘macvtap’ 重命名为 ‘sriov-macvtap’ 之类的名称。但这需要另一个蓝图,可能还需要 nova api 更改。

数据模型影响

REST API 影响

安全影响

Macvtap 不提供应用 iptables 或 ebtables 到虚拟机流量的钩子,因此不支持 Neutron 安全组和反欺骗规则。从技术上讲,linux macvtap 驱动程序将来可以实现这样的钩子。但即使没有这样的钩子,macvtap 今天已经可以防止 MAC 欺骗。

因此,建议配置 NoopFirewallDriver,就像其他集成的直接连接类型一样。

通知影响

其他最终用户影响

性能影响

从 Openstack 代码的角度来看,没有。

但是,与 ovs 参考实现相比,虚拟机的网络性能应该提高。

其他部署者影响

Nova 没有

开发人员影响

实现

负责人

主要负责人

scheuran (andreas.scheuring@de.ibm.com)

其他贡献者

工作项

依赖项

新的 vif-plug 方法

测试

  • 单元测试

  • 没有 tempest 测试。它们将与相应的 neutron 代码一起添加,并由 neutron 第三方 CI 运行。

文档影响

Nova 没有

参考资料

历史

修订

发布名称

描述

Liberty

引入