本文将介绍中国区Windows Azure Cloud Service可以启用多个虚拟IP的功能。


Part.1】应用场景:

1)同一个云服务下有多个SSL Website VM,为了能给每个VM分配443端口,需要配置多VIP

2SQL AlwaysOnAnother scenario for the use themultiple VIPs is hosting multiple SQL AlwaysOn availability group listeners onthe same set of Virtual Machines.


wKiom1bCxM2zyWN0AAF8GmnQ2EA043.png


Part.2】配置方法:仅能通过Azure Powershell配置,参考脚本如下:

#为云服务增加VIP

$Servicename="winhe" #定义云服务名字

$VIPname="Vip-01"  #定义新增的VIP的名字

Add-AzureVirtualIP -VirtualIPName $VIPname -ServiceName$Servicename  #执行增加命令

wKiom1bCxM2h97-KAAAeUVY5Mk4559.png

 

#获取一下增加后的VIP状态,发现只有名字Vip-01,并无VIP生成

$deployment= Get-AzureDeployment -ServiceName winhe

$deployment.VirtualIPs  

wKioL1bCxTCwSszCAAAh_rWUFCw503.png

 

#Vip-01添加端口映射:虚拟机win2012mem,内网80--外网80

$Servicename="winhe" #定义云服务名字

$VMname="win2012mem" #定义虚拟机名字

$VM=Get-AzureVM -ServiceName $Servicename -Name $VMname #定义VM变量

$endpointname="vip-01-http" #终结点名字

$Protocol="tcp" #协议类型

$Localport="80" #私有端口

$Publicport="80" #公共端口

$VIPname="Vip-01"  #VIP的名字

Add-AzureEndpoint-VM $VM -Name $endpointname -Protocol $Protocol -LocalPort $Localport-PublicPort $Publicport -VirtualIPName $VIPname | Update-AzureVM

wKioL1bCxTDSOqtYAAAdQ9x54io821.png

 

#再次使用以下命令获取以便VIP状态,可见获取了Vip-01VIP地址

$deployment= Get-AzureDeployment -ServiceName winhe

$deployment.VirtualIPs  

wKiom1bCxM7BZho7AAAj5Fqg2T0676.png

 

由于映射已经做好,那么通过139.217.22.239:80就可以访问虚拟机win2012mem的网站了。

wKiom1bCxM6DOElcAADagmnMEKY478.png

 

winhe.chinacloudapp.cn对应 139.217.19.59 对应虚拟机win-2012的网站

wKioL1bCxTHyVX1PAABO3L2KpH4878.png

 

这样就实现了一个云服务winhe有一个原装VIP(139.217.19.59),又配置了一个多VIP(139.217.22.239)都可以实现映射到后端的VM

 

【补充命令】:

#获取指定虚拟机的所有端点

$Servicename="winhe" #定义云服务名字

$VMname="win2012mem" #定义虚拟机名字

$VM=Get-AzureVM -ServiceName $Servicename -Name $VMname #定义VM变量

Get-AzureEndpoint-VM $VM

 

#删除某一个VIP对应的端点

$Servicename="winhe" #定义云服务名字

$VMname="win2012mem" #定义虚拟机名字

$VM=Get-AzureVM -ServiceName $Servicename -Name $VMname #定义VM变量

$endpointname="vip-01-http" #即将删除的端点名字,一个云服务下端点名字是唯一的

Remove-AzureEndpoint-VM $VM -Name $endpointname | Update-AzureVM

 

#删除多VIP

$Servicename="winhe" #定义云服务名字

$VIP="Vip-01"  #即将删除的VIP的名字

Remove-AzureVirtualIP-VirtualIPName $VIP -ServiceName $Servicename 

 

Part.3Azure Powershell 配置负载平衡

 

当你配置完多VIP功能后,就无法在管理门户上操作以配置Endpoint了:

wKioL1bCxTLTSxblAAAzCUo8IPQ908.png

 

那么如何使用AzurePowershell配置基于端点的负载平衡呢?

 

基于Part.2的实验,我的VMwin-2012win2012mem在云服务winhe下,

默认的VIP win-2012ContractContract139.217.19.59

新增的VIPVip-01139.217.22.239

 

由于要使用两台VM80端口,所以需要删除Vip-01原先设定好的80端口映射,一旦这个唯一的映射移除,139.217.22.239就被释放了,所再次验证负载平衡是需要重新查看IP。我们会在Part.4介绍如何固定这些VIP

 

Vip-01配置基于80端口的负载平衡,后端服务器分别是win-2012win2012mem,参考脚本如下:

 

Get-AzureVM-ServiceName winhe -Name win-2012 `

|Add-AzureEndpoint -Name myEndpoint -LoadBalancedEndpointSetName myLBSet `

    -Protocol tcp -LocalPort 80 -PublicPort 80-VirtualIPName Vip-01  -DefaultProbe `

|Update-AzureVM

 

Get-AzureVM-ServiceName winhe -Name win2012mem `

|Add-AzureEndpoint -Name myEndpoint -LoadBalancedEndpointSetName myLBSet `

    -Protocol tcp -LocalPort 80 -PublicPort 80-VirtualIPName Vip-01  -DefaultProbe `

|Update-AzureVM

wKiom1bCxNCgbWMnAAAsRmdP0u8746.png

 

#获取一下增加后的VIP状态,发现只有名字Vip-01变成了139.217.26.194

$deployment= Get-AzureDeployment -ServiceName winhe

$deployment.VirtualIPs  

wKioL1bCxTPTc-dQAAAkAY8jyDs322.png

 

Vip-01(139.217.26.194)80端口实现了负载平衡,效果如下:

wKiom1bCxNGSD01KAABAAUs1MBc997.png

 

wKiom1bCxNHwxhoVAABO_JQBJls888.png

 

Part.4】固定VIP

 

#固定Vip-01

New-AzureReservedIP-ReservedIPName winherip-vip01 -Location "China North" -ServiceNamewinhe -VirtualIPName Vip-01

 

#固定默认VIP

New-AzureReservedIP-ReservedIPName winherip-win-2012Contract -Location "China North"-ServiceName winhe -VirtualIPName win-2012ContractContract

 

wKioL1bCxTThFt5XAAAsLuvlGdM426.png

 

#也可以使用Get-AzureReservedIP验证是否固定成功

Get-AzureReservedIP| Where-Object Servicename -eq winhe

wKiom1bCxNKjHZ0qAACAqe3GPw0096.png