Posted in : Azure By Simon Gottschlag

4 years ago

Jag har suttit med ett antal virtual appliances från exempelvis Citrix (NetScaler), Cisco (CSR) och Palo Alto Networks (VM-series) och började fundera kring om jag kan ersätta exempelvis CSR med en billigare variant – exempelvis CentOS – som kan ge högre bandbredd utan några krav på licenser och liknande.
Efter att ha suttit i portalen och skapat VM fram och tillbaka kom jag fram till att även om exempelvis DS2_v2 har stöd för flera NIC så kan man lägga till dem där, så satte mig och gjorde det via powershell.

# Adding VM with Multiple NICs
$VMName = "vm-dev-weu-vti-rtr01"
$RGName = "rg-dev-weu-vti"
$Region = "west europe"
$SAName = "strgdevweuvti01"
$VMSize = "Standard_DS2_v2"
$VNETName = "vnet-dev-weu-vti"
$Subnet01Name = "vnet-dev-weu-vti-sn02"
$Subnet02Name = "vnet-dev-weu-vti-sn03"
$NIC01Name = "nic-dev-weu-vti-rtr01-inside"
$NIC02Name = "nic-dev-weu-vti-rtr01-outside"
$NSGName = "nsg-dev-weu-vti-rtr01-outside"
$PIPName = "vti-rtr01-outside"
# Create Network Security Group
$rule1 = New-AzureRmNetworkSecurityRuleConfig -Name Allow-SSH -Description "Allow SSH" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 22
$NSG = New-AzureRmNetworkSecurityGroup -ResourceGroupName $RGName -Location $Region -Name $NSGName -SecurityRules $rule1
# Create Public IP
$PIP = New-AzureRmPublicIpAddress -Name $PIPName -ResourceGroupName $RGName -AllocationMethod Static -DomainNameLabel $PIPName -Location $Region
# Getting the Network
$VNET = Get-AzureRMvirtualNetwork | where {$_.Name -eq $VNETName}
$SUBNET01 = Get-AzureRmVirtualNetworkSubnetConfig -Name $Subnet01Name -VirtualNetwork $VNET
$SUBNET02 = Get-AzureRmVirtualNetworkSubnetConfig -Name $Subnet02Name -VirtualNetwork $VNET
# Create the NICs
$VNIC01 = New-AzureRmNetworkInterface -Name $NIC01Name -ResourceGroupName $RGName -Location $Region -SubnetId $SUBNET01.Id -EnableIPForward
$VNIC02 = New-AzureRmNetworkInterface -Name $NIC02Name -ResourceGroupName $RGName -Location $Region -SubnetId $SUBNET02.Id -EnableIPForward -NetworkSecurityGroupId $NSG.Id -PublicIpAddressId $PIP.Id
# Create VM
$VM = New-AzureRmVMConfig -VMName $VMName -VMSize $VMSize
$pubName="OpenLogic"
$offerName="CentOS"
$skuName="7.2"
$VM = Set-AzureRmVMOperatingSystem -VM $VM -Linux -ComputerName $VMName -Credential (Get-Credential)
$VM = Set-AzureRmVMSourceImage -VM $VM -PublisherName $pubName -Offer $offerName -Skus $skuName -Version "latest"
$VM = Add-AzureRmVMNetworkInterface -VM $VM -Id $VNIC02.Id -Primary
$VM = Add-AzureRmVMNetworkInterface -VM $VM -Id $VNIC01.Id
$DiskName=$VMName+'-OSDisk'
$SA = Get-AzureRmStorageAccount | where { $_.StorageAccountName -eq $SAName}
$OSDiskUri = $SA.PrimaryEndpoints.Blob.ToString() + "vhds/" + $vmName+"-OSDisk.vhd"
$VM = Set-AzureRmVMOSDisk -VM $VM -Name $DiskName -VhdUri $osDiskUri -CreateOption fromImage
New-AzureRmVM -ResourceGroupName $RGName -Location $Region -VM $VM

Värt att notera kring ovan är:

  • Jag hade redan skapat min resource group, virtual network, subnets och storage
  • Eftersom jag kör premium storage skapas en standard storage för diagnostics med ovan, vilket jag inte hade
  • Public IP kan endast bindas mot det NIC som är märkt som primary

Vill du byta primary NIC är det möjligt, jag gjorde det med tog för lång tid att slå igenom så valde att skapa om VM:et istället:

# Change Primary NIC
$VMName = "vm-dev-weu-vti-rtr01"
$RGName = "rg-dev-weu-vti"
$vm = Get-AzureRmVM -Name $VMName -ResourceGroupName $RGName
$vm.NetworkProfile.NetworkInterfaces.Item(0).Primary = $false
$vm.NetworkProfile.NetworkInterfaces.Item(1).Primary = $true
Update-AzureRmVM -VM $vm -ResourceGroupName $RGName

 

Tags : Azure, PowerShell

Add comment

Your comment will be revised by the site if needed.