向访客暴露 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 本身不足以确保安全,他们还负责配置机架顶部的交换机。

开发人员影响

实现

负责人

工作项

  • 为 VirtualInterface 对象及其数据库表定义新的“vlans”属性。

  • 修改 _update_ports_for_instance 以在创建的 VirtualInterface 对象中包含 vlans

  • 修改 InstanceMetadata 对象以包含 vlans 属性

依赖项

测试

将编写新的单元测试和功能测试来覆盖这些更改。

文档影响

参考资料

历史

修订

发布名称

描述

Ocata

引入