Несколько конфигураций интерфейса в балансировщике нагрузки Azure с одной виртуальной машиной с использованием Terraform

#terraform #azure-load-balancer

Вопрос:

Мне нужно выполнить следующие задачи:

  1. Azure Выберите балансировщик нагрузки
  2. Создайте виртуальную машину и запустите два контейнера docker на портах 80080 и 8081
  3. Добавьте виртуальную машину на шаге 2 в качестве внутреннего пула балансировщика нагрузки, созданного на шаге 1
  4. Добавьте правила в балансировщик нагрузки для маршрутизации трафика, который будет сбалансирован по нагрузке между портами 8080 и 8081

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

a) Две конфигурации ip-интерфейса frondend

б) два правила балансировки нагрузки с портами 8080 и 8081 соответственно

c) два исследования состояния здоровья

d) указал на тот же внутренний пул (виртуальная машина на шаге 2)

Настройка работает нормально, но я надеялся, что, когда я попаду на IP-адрес балансировщика нагрузки, он должен быть сбалансирован по нагрузке в любом round robin случае или любым другим механизмом, я должен получать два приложения каждый раз, когда я попадаю на IP, но я ВСЕГДА получаю только один сайт.

Я делаю это с terraform помощью, и вот мой код.

 resource "azurerm_lb" "example" {
  name                = "TestLoadBalancer"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  sku                 = "Standard"

  frontend_ip_configuration {
    name                          = "PrivateIPAddress"
    subnet_id                     = azurerm_subnet.vm.id
    private_ip_address_allocation = "Dynamic"
    availability_zone             = "No-Zone"
  }

  frontend_ip_configuration {
    name                          = "PrivateIPAddress2"
    subnet_id                     = azurerm_subnet.vm.id
    private_ip_address_allocation = "Dynamic"
    availability_zone             = "No-Zone"
  }
}


resource "azurerm_lb_backend_address_pool" "example" {
  loadbalancer_id = azurerm_lb.example.id
  name            = "lbclassic"
}

resource "azurerm_lb_probe" "example" {
  resource_group_name = azurerm_resource_group.example.name
  loadbalancer_id     = azurerm_lb.example.id
  name                = "lbclassic"
  port                = 8081
  interval_in_seconds = 10
  number_of_probes    = 3
  protocol            = "Http"
  request_path        = "/"
}

resource "azurerm_lb_probe" "example2" {
  resource_group_name = azurerm_resource_group.example.name
  loadbalancer_id     = azurerm_lb.example.id
  name                = "lbclassic2"
  port                = 8080
  interval_in_seconds = 10
  number_of_probes    = 3
  protocol            = "Http"
  request_path        = "/"
}

resource "azurerm_lb_rule" "example" {
  resource_group_name = azurerm_resource_group.example.name
  loadbalancer_id     = azurerm_lb.example.id
  name                = "lbclassic"
  protocol            = "Tcp"
  frontend_port       = 80
  backend_port        = 8081
  frontend_ip_configuration_name = "PrivateIPAddress"
  backend_address_pool_id        = azurerm_lb_backend_address_pool.example.id
  probe_id                       = azurerm_lb_probe.example.id
  enable_floating_ip             = false
}

resource "azurerm_lb_rule" "example2" {
  resource_group_name = azurerm_resource_group.example.name
  loadbalancer_id     = azurerm_lb.example.id
  name                = "lbclassic2"
  protocol            = "Tcp"
  frontend_port       = 80
  backend_port        = 8080
  frontend_ip_configuration_name = "PrivateIPAddress2"
  backend_address_pool_id        = azurerm_lb_backend_address_pool.example.id
  probe_id                       = azurerm_lb_probe.example2.id
  enable_floating_ip             = false
}


# one and only backend
resource "azurerm_lb_backend_address_pool_address" "example" {
  name                    = "lbclassic-pool2"
  backend_address_pool_id = azurerm_lb_backend_address_pool.example.id
  virtual_network_id      = azurerm_virtual_network.example.id
  ip_address = "10.0.2.8"

  depends_on = [
    azurerm_linux_virtual_machine.example
  ]
}
 

Может ли кто-нибудь, пожалуйста, помочь мне, как я могу сбалансировать нагрузку трафика между двумя портами, находящимися в одном и том же внутреннем пуле в Azure балансировщике нагрузки?