你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 实验室服务中启用嵌套虚拟化

嵌套虚拟化支持在 Azure 实验室服务中创建包含多虚拟机 (VM) 环境的实验室。 可以为多 VM 环境准备实验室模板。 用户无需在其实验室 VM 上启用嵌套虚拟化或安装嵌套 VM。 发布实验室时,每个实验室用户都会有一个已包含嵌套 VM 的实验室 VM。

先决条件

  • 具有活动订阅的 Azure 帐户。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户

有关嵌套虚拟化的概念、注意事项和建议,请参阅 Azure 实验室服务中的嵌套虚拟化

注意

除 Hyper-V 之外的虚拟化应用程序不支持嵌套虚拟化。 这包括需要硬件虚拟化扩展的任何软件。

重要

创建实验室时,选择“大型(嵌套虚拟化)”或“中等(嵌套虚拟化)”作为虚拟机大小。 否则,嵌套虚拟化将不起作用。

启用嵌套虚拟化

若要在模板 VM 上启用嵌套虚拟化,请先使用远程桌面 (RDP) 客户端连接到 VM。 然后,可以通过运行 PowerShell 脚本或使用 Windows 工具来应用配置更改。

重要

建议在 Windows 11 上使用嵌套虚拟化。 可以利用在 Windows 客户端 OS 上安装 Hyper-V 时创建的“默认交换机”。 需要对网络设置进行额外控制时,应使用 Windows Server 操作系统上的嵌套虚拟化。

可以使用 PowerShell 脚本在 Azure 实验室服务中的模板 VM 上设置嵌套虚拟化。 以下步骤将引导你了解如何使用实验室服务 Hyper-V 脚本。 该脚本适用于 Windows 11。

  1. 按照以下步骤连接到模板计算机并对其进行更新

  2. 以管理员身份启动 PowerShell

  3. 你可能需要更改执行策略才能成功运行该脚本。 运行以下命令:

    Set-ExecutionPolicy bypass -force
    
  4. 下载并运行脚本以启用 Hyper-V 功能和工具。

    Invoke-WebRequest 'https://aka.ms/azlabs/scripts/hyperV-powershell' -Outfile SetupForNestedVirtualization.ps1
    .\SetupForNestedVirtualization.ps1
    

    注意

    该脚本可能需要重启 VM。 如果是这样,请从 Azure 实验室服务网站停止再启动模板 VM,然后重新运行脚本,直到在输出中出现“脚本已完成”

  5. 请不要忘记重置执行策略。

    Set-ExecutionPolicy default -force
    

模板 VM 现已配置为与嵌套虚拟化一起使用。 你可以在其中创建 VM。 创建新的 Hyper-V VM 时请使用脚本指定的开关。

连接到另一个实验室 VM 中的嵌套 VM

需要进行额外的配置才能从一个实验室 VM 上的嵌套 VM 连接到另一实验室 VM 中托管的嵌套 VM。 使用 Add-NetNatStaticMapping PowerShell cmdlet 将静态映射添加到 NAT 实例。

注意

不能使用 ping 命令测试嵌套 VM 之间的连接。

注意

静态映射仅在使用专用 IP 地址时才起作用。 实验室用户从其进行连接的 VM 必须是实验室 VM,或者,如果使用高级网络,该 VM 必须位于同一网络上。

示例方案

考虑以下示例实验室设置:

  • 实验室 VM 1(Windows Server 2022,IP 10.0.0.8)

    • 嵌套 VM 1-1(Ubuntu 20.04,IP 192.168.0.102,允许 SSH)
    • 嵌套 VM 1-2(Windows 11,IP 192.168.0.103,启用并允许远程桌面)
  • 实验室 VM 2(Windows Server 2022,IP 10.0.0.9)

    • 嵌套 VM 2-1(Ubuntu 20.04,IP 192.168.0.102,允许 SSH)
    • 嵌套 VM 2-2(Windows 11,IP 192.168.0.103,启用并允许远程桌面)

启用从实验室 VM 2 到嵌套实验室 VM 1-1 的 SSH 连接:

  1. 在实验室 VM 1 上,添加静态映射:

    Add-NetNatStaticMapping -NatName "LabServicesNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.102 -InternalPort 22 -ExternalPort 23
    
  2. 在实验室 VM 2 上,使用 SSH 进行连接:

    ssh user1@10.0.0.8 -p 23
    

启用从实验室 VM 2 或其嵌套 VM 到嵌套实验室 VM 1-2 的 RDP 连接:

  1. 在实验室 VM 1 上,添加静态映射。

    Add-NetNatStaticMapping -NatName "LabServicesNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.103 -InternalPort 3389 -ExternalPort 3390
    
  2. 在实验室 VM 2 或其嵌套 VM 上,使用 RDP 连接到 10.0.0.8:3390

    重要

    在用户名前面包含 ~\。 例如,~\Administrator~\user1

故障排除

这些建议可能会解决一些常见问题。

Linux VM 仅显示黑屏

执行以下步骤以验证嵌套 VM 配置:

Hyper-V 无法启动并出现错误 The virtual machine is using processor-specific xsave features not supported

  • 当实验室用户将 Hyper-V VM 保持为已保存状态时,可能会发生此错误。 可以在 Hyper-V 管理器中右键单击该 VM,然后选择“删除已保存状态”

    注意

    删除保存的状态意味着任何未保存的工作将丢失,但已保存到磁盘的任何工作保持不变。

  • 当 Hyper-V VM 关闭且 VHDX 文件损坏时,可能会发生此错误。 如果实验室用户创建了 VDHX 文件的备份或保存了快照,则可以从该备份点还原 VM。

建议 Hyper-V VM 的自动关闭操作设置为关闭

Hyper-V 速度太慢

在 Hyper-V 管理器中增加分配给 Hyper-V VM 的 vCPU 数量和内存量。 vCPU 总数不能超过主机 VM(实验室 VM )的核心数。 如果使用可变内存(默认选项),请增加分配给 VM 的最小内存量。 分配的最大内存量(如果使用可变内存)可能会超过主机 VM 的内存量。 如果仅需要在一个 Hyper-V VM 上完成资源密集型操作,此方法可以提供更大的灵活性。

如果在实验室中使用中型(嵌套虚拟化)VM 大小,请考虑使用大型(嵌套虚拟化)VM 大小,以便为每个实验室 VM 提供更多计算资源

Internet 连接不适用于嵌套 VM

  • 验证是否已按照前述步骤启用嵌套虚拟化。 考虑使用 PowerShell 脚本选项。

  • 如果使用的是 Windows Server,请检查主机 VM(实验室 VM)上是否安装了 DHCP 角色。

    不支持将实验室 VM 作为 DHCP 服务器运行。 请参阅能否在虚拟网络中部署 DHCP 服务器?。 更改实验室 VM 的设置可能会导致其他实验室 VM 出现问题。

  • 检查 Hyper-V VM 的网络适配器设置。

    • 将 DNS 服务器和 DHCP 服务器的 IP 地址设置为 168.63.129.16

    • 如果手动设置来宾 VM IPv4 地址,请验证其是否位于连接到 Hyper-V 交换机的 NAT 网络范围内。

    • 请尝试启用 Hyper-V DHCP 防护路由器防护

      Get-VMNetworkAdapter * | Set-VMNetworkAdapter -RouterGuard On -DhcpGuard On
      

注意

不能使用 ping 命令从 Hyper-V VM 到主机 VM。 若要测试 Internet 连接,请启动 Web 浏览器并验证网页是否正确加载。

无法启动 Hyper-V VM

创建实验室时,可以选择创建非管理员用户。 为了能够启动或停止 Hyper-V VM,必须将此类用户添加到“Hyper-V 管理员”组。 有关 Hyper-V 和非管理员用户的详细信息,请参阅非管理员用户

在模板 VM 上配置嵌套虚拟化后,即可使用 Hyper-V 创建嵌套虚拟机。 请参阅 Microsoft 评估中心以查看可用的操作系统和软件。