Настройка внутреннего балансировщика нагрузки Azure

Я пытаюсь настроить VNET с помощью новой функции внутренней балансировки нагрузки в Azure. Я планирую иметь 2 внешних сервера, взаимодействующих с 2 внутренними серверами через ILB (Internal Load Balancer).

Я считаю, что правильно выполнил все инструкции, но машины в моей сети все еще не могут обмениваться данными с использованием ILB.

Что я сделал:

Я настроил региональную виртуальную сеть с 2 подсетями, Subnet-1 и Subnet-2, загрузив следующий файл конфигурации, так как региональные VNET еще не доступны через пользовательский интерфейс.

Конфигурация сети:

<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>

Я создал 2 виртуальные машины в двух облачных сервисах и добавил их в свою виртуальную сеть с помощью следующего 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 -Расположение "Западная часть США" -VNetName "my-net" 
New-AzureVM -ServiceName "my-net-backend" -VMs $backend2 -Расположение "Западная часть США"
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend1 -Расположение "Западная часть США" -VNetName "my-net" 
New-AzureVM -ServiceName "my-net-frontend" -VMs $frontend2 -Расположение "Запад США"

Я переместился на каждую виртуальную машину и настроил IIS на порту 80 с простой HTML-страницей, чтобы проверить и убедиться, что она работает локально, анонимный доступ и т. Д.

Затем я создал DNS-сервер в VNET со следующей PowerShell:

$ dnsname = "MyDNS"
$ dnsconfig = New-AzureVMConfig -Name $ dnsname -InstanceSize Small -ImageName $ imgname | Add-AzureProvisioningConfig -Windows -AdminUsername $ adminname -Password $ adminpw | Set-AzureSubnet $ frontendSubnet

Когда виртуальная машина была готова, я настроил свой сервер в качестве DNS-сервера в Windows 2012 R2 и добавил зону прямого просмотра с простым суффиксом "mytest.net".

Затем в пользовательском интерфейсе управления Azure я добавил этот DNS-сервер в свою VNET. После перенастройки VNET я перезагрузил все свои виртуальные машины.

Как только мои виртуальные машины вернулись в рабочее состояние, я переместился на свой DNS-сервер и создал A-запись для "test.mytest.net"

После этого я удалил до 1 сервера в каждой подсети и убедился, что NSLOOKUP для "test.mytest.net" решен правильно.

Казалось, что все идет гладко в этот момент.

Наконец, я начал настраивать новый внутренний балансировщик нагрузки Azure с помощью Powershell следующим образом:

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

Насколько я понимаю, я просто создал ILB с именем MyILB со статическим IP-адресом 192.168.10.30, затем на каждой виртуальной машине в моем бэкэнде я создал конечную точку для HTTP-порта 80 и добавил эту машину в ILB. На этом этапе я бы предположил, что трафик HTTP-порта 80, адресованный 192.168.10.30, будет сбалансирован по нагрузке между моими виртуальными машинами Backend1 и Backend2. Тем не менее, это не похоже на работу, как я ожидал.

Я подключился к DNS-серверу и создал A-запись для 192.168.10.30 с именем backend.mytest.net и убедился, что это имя может быть разрешено на всех серверах.

Когда я удаленно подключаюсь к внешнему серверу и использую в браузере DNS-имя backend.mytest.net или 192.168.10.30, я получаю ошибку.

Я также проверил, что на обоих внутренних серверах входящий HTTP 80 разрешен в брандмауэре для всех регионов (домен, публичный и частный).

Пользовательский интерфейс управления не показывает эти конечные точки на виртуальных машинах, но я подозреваю, что это происходит потому, что они создаются с помощью команд powershell, и пользовательский интерфейс пока не поддерживает это.

У кого-нибудь есть понимание или мысли здесь? Я знаю, что я на грани того, чтобы заставить это работать.

Используемые инструкции:
Объявление о внутренней балансировке нагрузки
Региональные виртуальные сети
Неправильный запрос
Настройка DNS в Azure

1 ответ

Решение

Глядя на документацию по Add-AzureEndpoint, я думаю, что вам не хватает -ProbePath

Требуется, если для ProbeProtocol установлено значение "http". Пропустить иначе. Указывает URI, состояние которого будет проверяться.

Поскольку вы используете http, я бы предположил, что это будет необходимо.

Другие вопросы по тегам