配置 USB 主机直通

功能概述

USB(Universal Serial Bus)直通功能使您能够访问和管理虚拟机中的 USB 设备。

使用案例

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

先决条件

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

步骤

显示 USB 设备

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

以下是具有 ResourceName kubevirt.io/storage 的 USB 设备的示例配置,其中供应商为 0bda,产品为 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