Hyper-V 是微软提供的一项虚拟化解决方案,是 Windows 原生的虚拟化平台。本文简述管理 Hyper-V 嵌套虚拟化的相关操作。

准备

Hyper-V 嵌套虚拟化(Hyper-V Nested-Virtualization)是用于实现在 Hyper-V 虚拟机中运行 Hyper-V 服务的一项功能。嵌套虚拟化可用于构建 Hyper-V 容器或者需要将提供 Hyper-V 服务的设备进行虚拟化的场合。

环境要求

Hyper-V 嵌套虚拟化必须满足以下条件:

  1. 采用支持并开启 VT-x 和 EPT 技术的 Intel 处理器
  2. 主体客体均使用 Windows Server 2016 或安装了周年更新的 Windows 10 操作系统
  3. 采用配置版本高于 8.0 的 Hyper-V 虚拟机
  4. 客体操作系统必须使用 Hyper-V 进行虚拟化操作

Intel 虚拟化技术被称为 IVT(Intel Virtualization Technology),其中基于32位元指令集架构(IA-32)的IVT扩展被命名为 VT-x。VT-x 是 Intel Hypervisor技术中的一个指令集,为虚拟机器监视器(Virtual Machine Monitor,VMM)提供了硬件级别的服务支持,增强了虚拟化服务的安全性和稳定性。

EPT(扩展页列表)是 Intel 实现的第二层位址转译(SLAT)技术。这是一项可以提高计算性能的虚拟化辅助技术。

帮助信息

查看 Hyper-V 配置版本信息,可使用以下命令:

  Get-VM * | Format-Table Name, Version

如虚拟机迁移自其他低等级 Hyper-V 设备,可使用以下命令升级配置版本:

  Update-VMVersion 

需要注意的是,如虚拟机配置版本进行升级操作,将无法降级,即无法迁移回原有被迁移设备。

启用嵌套虚拟化

按照环境要求创建客体机器虚拟机,并在虚拟机关闭的情况下输入以下命令:

  Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

该命令启用指定虚拟机的嵌套虚拟化功能。

禁用嵌套虚拟化

  Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $false

该命令禁用指定虚拟机的嵌套虚拟化功能。注意:该命令须在指定虚拟机关闭时使用

配置内存和网络

动态内存设置

部署 Hyper-V 服务的虚拟机,其上搭载的虚拟机内存必须在其关闭时进行设置。嵌套的虚拟机的内存,设为动态内存时将不能自动调整。

设置嵌套虚拟化不会影响内存或内存大小的设置,只有 Hyper-V 运行在虚拟机环境才会出现内存设置问题。

MAC 地址欺骗

嵌套虚拟化环境中,使用虚拟交换机路由数据包,须在第一级虚拟交换机启用 MAC 地址欺骗。

以下 Powershell 命令用于执行此操作:

  Get-VMNetworkAdapter -VMName <VMName> | \
  Set-VMNetworkAdapter -MacAddressSpoofing On

网络地址转发

网络地址转发(Nat),用于无法使用 MAC 地址欺骗的场合。

在主机(虚拟机)上新建内部虚拟交换机,并设置 Nat。注意:本例使用的IP地址仅供演示。

  New-VMSwitch -name VmNAT -SwitchType Internal
  New-NetNat –Name LocalNAT –InternalIPInterfaceAddressPrefix “192.168.10.0/24”

在该 Nat 交换机上,设置 IP 地址。

Get-NetAdapter "vEthernet (VmNat)" | \
New-NetIPAddress -IPAddress 192.168.10.1 -AddressFamily IPv4 -PrefixLength 24

将嵌套虚拟化使用的内部交换机网关设置为第一级 Nat 交换机的 IP 地址,即可实现使用虚拟交换机路由数据包功能。