VF 镜像的端口镜像 API¶
https://blueprints.launchpad.net/neutron/+spec/port-mirroring-sriov-vf
端口镜像是一种常见的功能,可以通过配置规则来识别需要镜像的流量,并指定镜像流量的分析器。此外,可以在 VM 接口上配置镜像,以将接口的所有传入和传出流量镜像到指定的分析器。
此功能的一个常见用例是客户端请求分析器或探针,用于使用 SR-IOV 监控特定 VNF 的流量。
本规范将重点关注基于 SR-IOV VF 到 VF 的端口镜像。目前,本文档主要关注使用 SR-IOV 捕获进出 VM 的流量。本规范基于 Intel 在 i40e 驱动程序上所做的增强,请参阅 [9]
当前的 TAPaaS 是使用 OVS 端口实现的,请参阅 [1] 和 [3],本规范将为 SR-IOV 端口实现相同的功能。
问题描述¶
在虚拟环境中,存在具有将附加到 VNF 的一个 VF 端口看到的网络数据包的副本发送到附加到 VM 分析器的另一个 VF 端口的功能的网卡。
本规范有助于利用网卡的镜像功能,并使用 Tap as Service 增强功能,可以在主机上配置这些功能,并由租户利用。
如今,租户可以使用 Neutron API 创建使用带有 VLAN 0 和 nova.conf passthrough_whitelist 中使用的物理网络的提供商网络的 SRIOV 端口。该 VF 不会为其配置任何 VLAN 过滤器。请参阅 [2]。可以在同一接口上配置 guest 的多个 VLAN。在 guest 内部,可以配置子接口并可以在多个 VLAN 上进行通信。
可以使用两种方法来实现此功能。
1. 租户可以使用 binding_profile value_spec,例如 guest_vlans,来定义要在 guest 内部配置哪些 VLAN。
由于该参数以与 VF 的其他 PCI 详细信息相同的方式为 VF 配置,因此可以在 API 的相同位置(如其他 SRIOV 相关字段在 binding profile 中)公开该参数。
由于本规范仅描述了基于 SRIOV 的实现中可用的功能,并且 NIC (i40e) 仅允许 VLAN 过滤器来过滤需要在 NIC 上镜像的数据包,因此在为直接端口或 VF 定义多个 VLAN 过滤器方面有规范之前,这种方法就足够了。
这也有助于操作员在一个地方查看 VF 配置,而不是运行多个 API 来确定主机上的 VF 配置。
2. 第二种选择是更改 TapFlow 以包含新的字段 vlan_mirror。TapFlow 是 TapService 的流量分类器,因此使用新的字段对其进行更新将为代理提供配置端口所需的数据。
用例 I. 将特定 VLAN 镜像到 VF¶
此用例将处理将镜像数据包发送到针对在监控 VF 上配置的特定 VLAN 的 tap 服务。VF 上可以配置多个 VLAN。
提议的变更¶
更新 Tap as Service 以支持 VF 到 VF 镜像。
建议的服务将允许租户创建一个带有 SR-IOV 端口的 tap 服务实例,用户可以向该实例添加需要通过从其他 SR-IOV 端口/s 创建 tap flow 来镜像的 Neutron 端口。
用户可以为 tap 服务定义各种端口镜像流,因此一个 tap 服务应该能够处理多个 tap flow。
用例 I. 将特定 VLAN 镜像到 VF¶
本规范还将负责为 NicSwitchTapDriver 开发一个新的驱动程序,该驱动程序将为 Intel 的自定义 i40e 驱动程序执行 sysfs 实现。
VF 将从源端口派生,探针端口将附加到 TapService。用户如何基于 VLAN 2,4,6,18-22 将流量镜像到 PF p1p1 的 VF 3 的示例
# echo add 2,4,6,18-22>/sys/class/net/p1p1/device/sriov/3/vlan_mirror
用户如何从目标 VF 移除 VLAN 4, 15-17 的示例
# echo rem 4,15-17>/sys/class/net/p1p1/device/sriov/3/vlan_mirror
用户如何从 VF 3 移除所有 VLAN 的示例。 # echo rem 0 - 4095>/sys/class/net/p1p1/device/sriov/3/vlan_mirror
此镜像的限制是,监控的 vlan/s 在 probe 或 service 端口上 BOTH 方向接收流量。
与 Tap service 关联的 VF 捕获的镜像数据包将具有在 vlan_filter 字段中指定的 vlan 标签。
数据模型影响¶
这种方法将更改 TapFlow 对象的 data model 以包含新的字段 vlan_filter。
REST API 影响¶
实现将基于上述“问题描述”部分中的选项 2。将对 TapFlow 对象进行更改,以添加 vlan_filter 字段,以便端口能够过滤需要镜像的流量。请参阅 [4] vlan_filter 可用于监控单个 vlan 或 vlan 范围,因此可以像“171”或“161-164”或“161-164,171”这样指定值。
Tap Agent 和 Driver 影响¶
Tap Agent 和 direct 端口的驱动程序将根据上述用例开发,以通过 sysfs 配置 NIC。
对现有 Tap As Service API 的影响¶
vlan_filter 将添加到 TapFlow API 以过滤需要镜像的流量。
命令行客户端影响¶
需要更新 Openstack/Neutron 客户端以支持 TAPaaS。请参阅 [7]
Heat 支持影响¶
Tap as service 资源在 Openstack 中不存在。我们需要创建新的 heat 资源来支持它。请参阅 [8]
实现¶
Tap As a Service Agents 需要添加对 SR-IOV 端口的支持。需要开发一个框架来支持多个代理。同时定义用于 sriov 端口的 taas 代理,taas-sriov-agent。目前只有 ovs 的代理。作为实现的一部分,将开发一个新的驱动程序用于 Tap as service NicSwitchTapDriver 如上述提案中所述。请参阅 [6] 之前曾尝试通过更新 binding profile 将 SRIOV 参数放在一起,但该更改已被放弃。请参阅 [5]
与 Neutron Stadium 集成的额外工作¶
新代理和驱动程序的 Tempest 测试。