14 Jul Nested Virtualization in Azure
For lab/demo purposes nested virtualization was pursued for the purpose of understanding the configuration required for Skype for Business Online Cloud Connector Edition (CCE). This was primarily to walk through and familarise myself with the steps of installing CCE and not neccesarily for producing a working hybrid configuration of CCE in Azure with SfBO/O365. If the lata materialises to be technically feasable the steps for configuration willl be covered in a later blog post.
CCE is only supported on Hyper-V therefore only Hyper-V could be considered for running the SfBO CCE setup.
A product called Ravello by Oracle was initially explored but Ravello didn’t support nested virtualisation for Hyper-V. Whilst it was possible to install Hyper-V on a Windows 2016 server and even configure a VM, the virtual machines would not power on as the underlying hardware and hypervisor used by Oracle didn’t support nested virtualization for Hyper-V. In addition the nested virtualisation feature introduced in Windows Server 2016 only supported nested virtualisation when the host was physical.
At that time neither Public Cloud Azure or AWS provided support for Nested virtualization. Nested virtualisation in Azure is now possible as of 13/7/2016. See blog post article:-
This post will only cover the initial installation and preparation of the environment required for CCE.
Nested Virtualization architecture
As of the date of this post only the following virtual machine types can be used for Nested Virtualisation.
These VMs are also currently restricted to the following locations: –
- West 2
- East 2
- Asia Pacific
Note: – For the purposes of this lab Standard_D8_v3 was used and an additional storage LUN was added for the virtual machines. This size will support the following specification for the smaller version of CCE (50 simultaneous calls)
- Intel i7 4790 quad core with Intel 4600 Graphics (no high end graphics needed)
- 32 GB DDR3-1600 non ECC
- 2: 1TB 7200RPM SATA III (6 Gbps) in RAID 0
- 2: 1 Gbps Ethernet (RJ45)
A Standard_D8_v3 virtual machine was deployed via the Azure portal. DevTest Labs couldnt be used as the VM Size was unavailable. *See footnote at the end of this article.
Once the VM was deployed the following script NVMBootstrap_WinServer16.ps1 from github: – https://github.com/charlieding/Virtualization-Documentation/tree/live/hyperv-tools/Nested was downloaded to the new host. This script was used to install Hyper-V, enable Nested Virtualization support and configure one virtual machine.
Line 16 of the script can be edited but was left at the default.
#TODO – EDIT ME! Change the Name you want for your Guest VM.
$VMName = “NestedVMGuestSample-Level2”
The Hyper-V host was restarted the first time the script was ran. On reboot the script was run again.
For the Hyper-V guest VMs to access to the internet a NAT network was configured with the following commands.
New-VMSwitch -SwitchName “NATSwitch” -SwitchType Internal
New-NetIPAddress -IPAddress 192.168.2.1 -PrefixLength 24 -InterfaceAlias “vEthernet (NATSwitch)”
New-NetNAT -Name “NATNetwork” -InternalIPInterfaceAddressPrefix 192.168.2.0/24
For demo purposes, a simple RFC class C network was used. This network was also configured for DHCP.
DHCP was installed on the Azure Hyper-V host. The scope was configured with the network above and OpenDNS used for name resolution/DNS.
Windows was installed on the Nested VM and the Nested VM added to the new ‘NATSwitch’.
With DHCP configured the Nested VM can access the internet.
The Azure Hyper-V host is now prepared for CCE.
The following video from Channel 9 was used for this blog post: –
*Footnote:- During testing it was discovered that the CCE ‘Minimum’ hardware type requires the following minimum resource on the host:
- 300GB HD
- 28GB RAM
These requisites must be satisfied or the CCE appliance installation will fail. To accomodate this compute requirement the Azure Hyper-V host was changed to Standard E8s v3 (8 cores, 64GB memory).