为 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 没有
参考资料¶
Macvtap 驱动程序/agent 的规范:https://github.com/scheuran/networking-macvtap/blob/bp/initial-macvtap -support/specs/liberty/macvtap-ml2.rst
核心供应商分解:https://github.com/openstack/neutron-specs/blob/master/specs/kilo/ core-vendor-decomposition.rst
VIF-plug-script 提案:https://review.openstack.org/#/c/162468/
请求 networking-macvtap stackforge 项目:https://review.openstack.org/#/c/189644/
os-vif-library:https://review.openstack.org/#/c/193668/
macvtap-agent 的 Launcpad 项目:https://launchpad.net/networking-macvtap
历史¶
发布名称 |
描述 |
|---|---|
Liberty |
引入 |