向访客暴露 SR-IOV 物理功能的 VLAN 标签¶
https://blueprints.launchpad.net/nova/+spec/sriov-pf-passthrough-neutron-port-vlan
引入了直通物理功能的网络感知功能的 sriov-pf-passthrough-neutron-port 规范 [1] 已在 Newton 周期中实现。但是,当前的实现忽略了关联 neutron 端口上设置的 VLAN 标签。
问题描述¶
sriov-pf-passthrough-neutron-port 规范 [1] 的目标是为分配的物理功能 (PF) 添加网络感知功能,以便用户以与虚拟功能 (VF) 相同的方式使用该功能。但是,目前的实现忽略了 VLAN 标签设置。
将 SR-IOV 物理功能 (PF) 分配给访客实例将取消绑定 PF 设备与其驱动程序。在 PF 设备驱动程序中设置的任何 MAC 或 VLAN 标签在设备取消绑定后都将丢失。目前,nova 会使用所选 PF 的实际 MAC 地址更新 neutron,但是没有可用的解决方案来传递 VLAN 标签 [3]。
用例¶
需要完全访问物理功能的工作负载还需要能够以与当前 VF 可用相同的方式和灵活性来操作网络设置。这包括设置 VLAN 标签的能力。
提议的变更¶
本提案的目标是通过设备标记机制将关联物理功能的 VLAN 标签暴露给访客实例。可以与网络设备关联多个 VLAN 标签。Neutron 将 VLAN 标签作为端口绑定详细信息的一部分提供
binding:vif_details: {'vlan': 1000}
virt-device-role-tagging 规范 [2] 引入了网络设备元数据的格式。作为本提案的一部分,此格式将扩展为包含 VLAN 列表字段。
例如
{
"devices": [
{
"type": "nic",
"bus": "pci",
"address": "0000:00:02.0",
"mac": "01:22:22:42:22:21",
"tags": ["nfvfunc1"]
"vlans": [300, 1000]
}]
}
这些元数据通过 config drive 和 metadata 服务提供。Guest OS 将能够使用有关这些设备的信息并配置提供的 VLAN 标签。但是,Guest OS 如何执行此操作超出了本规范的范围。
备选方案¶
另一种选择是不允许将 PF 分配给访客,如果 Neutron 为网络设置了 VLAN,并在尝试时引发错误。但是,遵循此建议将留下许多未解决的问题。此功能主要用于特定的 NFV 用例,这些用例需要灵活性和高吞吐量,而此功能可能提供。
数据模型影响¶
将为 VirtualInterface 对象及其关联表引入一个新的字段“vlans”
REST API 影响¶
无
安全影响¶
Neutron 项目当前不提供限制可以暴露给访客的流量的机制,如果它连接到 VLAN 标记的网络。允许 PF 连接到 VLAN 标记或多 VLAN 标记的 trunk 端口可能被认为是一种安全问题。
如果将通过的 PF 放入 VLAN 被用作限制可用于访客的流量的一种方式,我们不能期望访客遵守 metadata 中提供的 VLAN 信息。因此,必须存在外部机制来限制基于其 VLAN 的 PF 可用的流量。Nova 或 Neutron 中都没有这样的机制,也不能有,因为物理接口和连接到交换机的电缆超出了我们的控制范围。部署者有责任确保到达 PF 的流量仅限于打算用于该 VLAN 的流量。
操作员可以通过物理方式进行必要的网络隔离以保护设置,配置机架顶部的交换机以将特定的 PCI 设备映射到物理网络。一些操作员具有私有的外部机制,该机制将 PCI 地址映射到交换机端口映射,并与交换机进行 Openflow 通话。
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
确保物理网络映射到白名单 PCI 设备只能访问打算用于特定用户/租户的流量,从而保护设置。
一些操作员当前使用额外的机制驱动程序来执行此操作,这些驱动程序具有 PCI 地址到交换机端口映射:PF 设备的 PCI 地址与 PF 连接到的交换机端口相关联。使用这些映射,该机制驱动程序可以使用 Openflow 在交换机端口上配置正确的 VLAN。
可以将这种机制作为示例,让操作员了解仅在 Nova 中设置 PF 上的 VLAN 本身不足以确保安全,他们还负责配置机架顶部的交换机。
开发人员影响¶
无
实现¶
负责人¶
Vladik Romanovsky <vromanso@redhat.com>
Artom Lifshitz <alifshit@redhat.com>
工作项¶
为 VirtualInterface 对象及其数据库表定义新的“vlans”属性。
修改
_update_ports_for_instance以在创建的 VirtualInterface 对象中包含 vlans修改 InstanceMetadata 对象以包含 vlans 属性
依赖项¶
无
测试¶
将编写新的单元测试和功能测试来覆盖这些更改。
文档影响¶
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Ocata |
引入 |