Eu estou tentando configurar uma VNET usando o novo recurso Internal Load Balancing no Azure. Eu planejo ter dois servidores frontend se comunicando com 2 servidores de backend em um ILB (Internal Load Balancer).
Acredito que segui todas as instruções corretamente, mas as máquinas da minha rede ainda não conseguem se comunicar usando o ILB.
O que eu fiz:
Eu configurei uma rede virtual regional com 2 sub-redes, Sub-rede 1 e Sub-rede 2, carregando o seguinte arquivo de configuração, já que as VNETs regionais ainda não estão disponíveis pela interface do usuário.
Configuração de rede:
<NetworkConfiguration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/ServiceHosting/2011/07/NetworkConfiguration">
<VirtualNetworkConfiguration>
<VirtualNetworkSites>
<VirtualNetworkSite name="my-net" Location="West US">
<AddressSpace>
<AddressPrefix>192.168.10.0/24</AddressPrefix>
</AddressSpace>
<Subnets>
<Subnet name="BackendSubnet">
<AddressPrefix>192.168.10.0/27</AddressPrefix>
</Subnet>
<Subnet name="FrontendSubnet">
<AddressPrefix>192.168.10.32/27</AddressPrefix>
</Subnet>
<Subnet name="GatewaySubnet">
<AddressPrefix>192.168.10.64/29</AddressPrefix>
</Subnet>
</Subnets>
</VirtualNetworkSite>
</VirtualNetworkSites>
</VirtualNetworkConfiguration>
</NetworkConfiguration>
Eu criei duas VMs em dois serviços de nuvem e as adicionei à minha rede virtual com o seguinte PowerShell.
$imgname = "ad072bd3082149369c449ba5832401ae__Windows-Server-Remote-Desktop-Session-Host-on-Windows-Server-2012-R2-20140403-2126"
$vmname1 = "Backend1"
$vmname2 = "Backend2"
$vmname3 = "Frontend1"
$vmname4 = "Frontend2"
$backendSubnet = "BackendSubnet"
$frontendSubnet = "FrontendSubnet"
$adminname = "SomeAdmin"
$adminpw = "SomePassword"
$backend1 = New-AzureVMConfig -Name $vmname1 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $backendSubnet
$backend2 = New-AzureVMConfig -Name $vmname2 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $backendSubnet
$frontend1 = New-AzureVMConfig -Name $vmname3 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet
$frontend2 = New-AzureVMConfig -Name $vmname4 -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet
New-AzureVM -ServiceName "my-net-backend" -VMs $backend1 -Location "West US" -VNetName "my-net"
New-AzureVM -ServiceName "my-net-backend" -VMs $backend2 -Location "West US"
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend1 -Location "West US" -VNetName "my-net"
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend2 -Location "West US"
Eu fiz uma remotinha em cada VM e configurei o IIS na porta 80 com uma página HTML simples para testar e verificar se ele funciona localmente, acesso anônimo, etc.
Em seguida, criei um servidor DNS na VNET com o seguinte powershell:
$dnsname = "MyDNS"
$dnsconfig = New-AzureVMConfig -Name $dnsname -InstanceSize Small -ImageName $imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $adminname -Password $adminpw | Set-AzureSubnet $frontendSubnet
Após a VM estar pronta, configurei meu servidor como um servidor DNS no Windows 2012 R2 e adicionei uma zona de pesquisa direta com um simples sufixo "mytest.net"
Em seguida, na IU de gerenciamento do Azure, adicionei esse servidor DNS à minha VNET. Depois que o VNET foi reconfigurado, reiniciei todas as minhas VMs.
Depois que minhas VMs voltaram a ficar on-line, fiz um novo login no meu servidor DNS e criei um A-Record para "test.mytest.net"
Depois disso, eu remotquei para 1 servidor em cada sub-rede e assegurei que o NSLOOKUP para "test.mytest.net" fosse resolvido corretamente.
Tudo parecia estar indo bem neste momento.
Por fim, comecei a configurar o novo Azure Internal Load Balancer usando o Powershell da seguinte forma:
Add-AzureInternalLoadBalancer -InternalLoadBalancerName "MyILB" -SubnetName "BackendSubnet" -ServiceName "my-net-backend" -StaticVNetIPAddress "192.168.10.30"
Get-AzureVM -ServiceName "my-net-backend" -Name $backend1 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | Update-AzureVM
Get-AzureVM -ServiceName "my-net-backend" -Name $backend2 | Add-AzureEndpoint -Name "backend-ep" -LBSetName "backend-ep-set" -Protocol tcp -LocalPort 80 -PublicPort 80 -ProbePort 80 -ProbeProtocol http -ProbeIntervalInSeconds 10 -InternalLoadBalancerName "MyILB" | Update-AzureVM
Do meu ponto de vista, acabei de criar um ILB chamado MyILB com um IP estático de 192.168.10.30 e, em seguida, em cada VM em meu back-end, criei um terminal para a porta HTTP 80 e adicionei essa máquina ao ILB. Neste ponto, eu diria que o tráfego da porta HTTP 80 endereçado para 192.168.10.30 seria balanceado de carga entre minhas VMs Backend1 e Backend2. No entanto, isso não parece funcionar como eu esperava.
Conectei-me ao servidor DNS e criei um registro A para 192.168.10.30 com o nome de backend.mytest.net e verifiquei que esse nome poderia ser resolvido em todos os servidores.
Quando eu for remoto para um servidor front-end e usar o nome DNS backend.mytest.net ou 192.168.10.30 no navegador, recebo uma falha.
Também verifiquei que, em ambos os servidores de backend, a entrada HTTP 80 é permitida no firewall para todas as regiões (domínio, público e privado).
A interface do usuário de gerenciamento não mostra esses endpoints nas VMs, mas suspeito que isso seja porque eles são criados por meio dos comandos do powershell e a interface do usuário ainda não suporta isso.
Alguém tem algum insight ou pensamentos aqui? Eu sei que estou no limite de fazer isso funcionar.
Instruções usadas: Anúncio de balanceamento de carga interno
Redes virtuais regionais
Bad Request Troubleshooting
Configurando o DNS no Azure