Thursday, July 26, 2018
Server 2012 Windows Network Virtualization part 1 of many
Server 2012 Windows Network Virtualization part 1 of many
I have spent quite an extensive amount of time working with the Network Virtualization that is in Server 2012.
Most folks that are interested in this have caught the article on Jeff Snovers blog. And have possibly seen a few TechEd presentations that keep working the same graphics. And, if you explore a bit you can find some interesting articles from folks in the networking community like over at NetworkHeresy.com about how NVGRE is a �right thing�. And a primer on NVGRE over at SearchNetworking.com.
Oh, and lets not forget the Network Virtualization Survival Guide by the MSFT folks.
That all sets the basis for the technology. Now the interesting bits. The implementation.
First of all, lets get a big question out of the way: Is SCVMM required to manage Windows Network Virtualization? No, it isn�t. However, you want some management layer to manage the complexities of keeping all of the routes and what not up to date. If you look at Jeff Snover�s graphics, there is this whole set of PA and CA addresses that need to be kept straight. And then there is the LookupRecords.
Really, this is not too bad in a static environment. If the VMS never move or change, you set all these rules once and never touch them again. However, if you move a VM (and Server 2012 makes that super easy) then you need to update the proper records or that VM is off the network. SCVMM 2012 has a similar challenge of keeping LookupRecords and PAs updated if a VM is moved by Failover Clustering due to an HA event that it did not do.
In other words, this is not for the faint of heart. There is actually a lot to this. If you move beyond an environment where your VMs are static then you need to maintain these rules. This is what management layers (like SCVMM, CloudStack) do for you, manage the complex stuff.
Okay, thanks for the warning, now what?
Step one:
Enable Windows Network Virtualization (WNV). This is a binding that is applied to the NIC that you External Virtual Switch is bound to. This can be a physical NIC, it can be an LBFO NIC team. Either way, it is the network adapter that your External Virtual Switch uses to exit the server.
This also means that if you have multiple virtual networks or multiple interfaces that you can pick and choose and it is not some global setting.
If you have one External Virtual Switch this is fairly easy:
$vSwitch = Get-VMSwitch -SwitchType ExternalI have a ForEach in the example above. In case $vSwitch is an array, I assume I want to enable it on all virtual switches. We will deal with the other details later.
# Check if Network Virtualization is bound
# This could be done by checking for the binding and seeing if it is enabled
ForEach-Object -InputObject $vSwitch {
if ((Get-NetAdapterBinding -ComponentID "ms_netwnv" -InterfaceDescription $_.NetAdapterInterfaceDescription).Enabled -eq $false){
# Lets enable it
Enable-NetAdapterBinding -InterfaceDescription $_.NetAdapterInterfaceDescription -ComponentID "ms_netwnv"
}
}
Before me move on, I need to know some constants. Such as my Tenant (Customer). And some topology. We will get there as we work through defining everything.
More to come. Lots to learn about PA, CA, lookup routes, virtual subnet ids, and customer routes. Lots of concepts, options, and rules to keep straight.