可信虚拟功能

https://blueprints.launchpad.net/nova/+spec/sriov-trusted-vfs

为了使 VF(SR-IOV 虚拟功能)能够请求“可信模式”,Linux 内核 4.4 引入了一个新的可信 VF 概念 [5]

它允许虚拟功能被物理功能信任,并执行一些特权操作,例如启用 VF 混杂模式和在客户机内更改 VF MAC 地址。 无法在客户机中修改 MAC 地址会阻止用户轻松设置客户机中的两个 VF 以进行故障转移绑定。 本规范旨在提出一种让用户启动具有可信 VF 的实例的方法。

问题描述

默认情况下,虚拟功能没有权限执行某些操作,例如启用多播混杂模式和修改客户机中 VF 的 MAC 地址。 这些安全措施旨在防止可能的攻击,但是,在某些情况下,VF 执行这些操作是合法的。 OpenStack 目前没有提供一种简单的方法让用户启动使用可信 VF 的实例。 同样,也没有一种简单的方法让云运营商指定哪些 PF 允许其 VF 变为可信。

用例

在某些情况下,用户更喜欢利用可信 VF。 在客户机中绑定 VF 就是其中一种情况。 需要所有从机使用相同 MAC 地址的绑定模式,需要在故障转移期间修改其中一个 VF 的地址。 由于更改 MAC 地址是一项特权操作,因此参与的 VF 应该可信,才能成功配置客户机中的绑定。[1]

提议的变更

本提案的目的是提供一种让用户启动分配了 SR-IOV VF 并配置为可信的实例的方法。

云运营商将拥有可管理的指定哪些 PF 将允许配置可信 VF 的方法。 运营商可以通过在 nova.conf 中的过滤器中添加一个额外的参数来选择哪些 PF 可以拥有可信 VF。

[pci]
passthrough_whitelist = {"devname": "eth0",
                         "physical_network": "phy0",
                         "trusted": "true"}

在 Neutron 中,端口必须使用特定的绑定创建,以请求启用分配的 VF 的可信功能。

neutron port-create <net-id> \
                    --name sriov_port \
                    --vnic-type direct \
                    --binding:profile type=dict trusted=true

注意:由于请求规范和池标签的表示方式存在限制,因此对于 trusted 标签的值,使用相同的布尔表示非常重要。

请求使用 SRIOV VF 启动的实例将分配 PCI 请求。 对于请求“可信”的实例附加的端口,PCI 请求将通过一个“可信”标签进行增强。

在调度阶段,PciPassthroughtFilter 将 PCI 请求中的标签与传递给 pci_passtrought_whitelist 的标签进行匹配,用于确定是否应在给定主机上启动实例。

然后,virt 驱动程序必须读取绑定配置文件,以检查分配给实例的 VF 是否应激活其可信模式。 在销毁实例时,virt 驱动程序的责任是将其默认状态(可信模式关闭)更新为分配给实例的 VF。

备选方案

运营商可能需要手动更新计算节点上的每个 VF 以使用可信模式

从长远来看,可以使用网络功能并为可信模式添加新的标准化 os-traits,并使用 placement 进行调度阶段,目前有一些正在进行中的工作 [6] [7]

数据模型影响

一个名为 ‘vf_trusted’ 的新属性将被添加到对象 NetworkInterfaceMetadata 中。 仅当接口是 vnic 类型 SRIOV VF 时,该属性才会设置,并且将指示 VF 是否正在使用可信模式。

vf_trusted: fields.BooleanField(default=False)

REST API 影响

在 vif vnic 类型为 SRIOV VF 的情况下,元数据服务将为网络接口返回一个新的 json,其中将包含一个 ‘vf_trusted’ 属性。

{
   "devices": [{
     "type": "nic",
     "bus": "pci",
     "address": "0000:00:02.0",
     "mac": "01:22:22:42:22:21",
     "tags": ["nfvfunc1"],
     "vlans": [300, 1000],
     "vf_trusted": true
     }]
}

将增加 OpenStack 元数据 API 版本

此元数据通过 config drive 和元数据服务提供。 客户机操作系统将能够使用有关这些设备的信息。 但是,客户机操作系统如何执行此操作不在本规范的范围内。

安全影响

可信 VF 功能存在一些安全问题。 如上所述,可信 VF 可以设置为 VF 混杂模式,这将使其能够接收发送到物理功能的未匹配和多播流量 [2] [3] 由部署者决定安全问题是否可管理。

通知影响

N/A

其他最终用户影响

在启动时请求其 NIC 作为“可信”的用户将在客户机 VM 内更改 VF 的 MAC 地址。

性能影响

N/A

其他部署者影响

N/A

开发人员影响

N/A

升级影响

N/A

实现

负责人

主要负责人

Sahid Orentino Ferdjaoui <sahid-ferdjaoui>

其他贡献者

Vladik Romanovsky <vladik-romanovsky>

工作项

  • 添加配置 VF 可信模式的命令

  • 更新 PCI 请求规范以处理可信标签

  • 在 libvirt 驱动程序上配置 VF 的可信模式。

  • 更新元数据服务以包含 ‘vf_trusted’ 属性

依赖项

即使不直接相关,规范“用户控制的 SR-IOV 端口分配” [4] 将在像“故障转移绑定”这样的用例中提供所需的粒度,以连接不同物理交换机上的 NIC。

测试

将编写新的单元测试来涵盖这些更改。

文档影响

将发布一个发布说明,告知用户和运营商如何配置该功能,以及计算管理指南中的新文档 [8],解释如何创建端口并使用 flavor extra-spec 和 host-aggregates 链接它们。 限制和安全问题也应记录在案 - 今天无法实时迁移具有 SRIOV 的实例 - 启用 VF 的可信模式会带来安全影响。

参考资料

历史

修订历史

发布名称

描述

Pike

引入

Queens

重新引入

Rocky

重新引入