配置 USB 主机直通

目录

功能概述

USB(通用串行总线)直通功能使您能够从虚拟机访问和管理 USB 设备。

使用场景

某些运行在虚拟机(VM)中的应用程序具有加密需求,需要与专用的 USB 设备交互。在这种情况下,需要将 USB 设备从主机直通到虚拟机。

前提条件

  • 平台版本必须至少为 v3.18。

操作步骤

暴露 USB 设备

要将 USB 设备分配给虚拟机,必须通过 ResourceName 暴露该 USB 设备。可以通过编辑 kubevirt 命名空间下的 HyperConverged CR 中的 spec.permittedHostDevices.usbHostDevices 部分来配置。

以下是一个 USB 设备的示例配置,ResourceName 为 kubevirt.io/storage,厂商 ID 为 0bda,产品 ID 为 8812

spec:
  permittedHostDevices:
    usbHostDevices:
      - resourceName: kubevirt.io/storage
        selectors:
          - vendor: '0bda'
            product: '8812'
提示

USB 设备的厂商和产品标识符可以通过 lsusb 命令获取。 例如:

lsusb
Bus 001 Device 007: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter

该命令列出所有连接的 USB 设备,其中 ID 显示厂商:产品对

将 USB 设备分配给虚拟机

现在,在虚拟机配置中,可以添加 spec.domain.devices.hostDevices.deviceName 来引用上一步中提供的 ResourceName,并为其指定本地名称。 例如:

spec:
  domain:
    devices:
      hostDevices:
        - deviceName: kubevirt.io/storage
          name: usb-storage
提示

编辑配置前请确保虚拟机已停止。

操作结果

完成配置后,在虚拟机内执行 lsusb 命令。如果输出中列出了主机节点的 USB 设备,则表示直通成功。 例如:

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0bda:8812 Realtek Semiconductor Corp. RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

了解更多

您可能希望将多个 USB 设备直通到虚拟机,例如键盘、鼠标或智能卡设备。我们支持在同一个 resourceName 下分配多个 USB 设备。配置方法如下:

暴露多个 USB 设备

spec:
  permittedHostDevices:
    usbHostDevices:
      - resourceName: kubevirt.io/peripherals
        selectors:
          - vendor: '0bda'
            product: '8812'
          - vendor: '062a'
            product: '4102'
          - vendor: '072f'
            product: 'b100'
提示

注意:所有 USB 设备必须物理连接并被主机检测到,才能确保成功分配给虚拟机。

将 USB 设备分配给虚拟机

spec:
  domain:
    devices:
      hostDevices:
        - deviceName: kubevirt.io/peripherals
          name: local-peripherals