Локальные клиенты. Создание балансировщика с помощью Terraform

Подробнее о локальных клиентах для управления виртуальными машинами читайте в этой статье.


Данная статья описывает создание балансировщика нагрузки с помощью Terraform.

Создаём сам балансировщик:

resource "openstack_lb_loadbalancer_v2" "1" {
  name          = "test_loadbalancer"
  vip_subnet_id = openstack_networking_subnet_v2.http.id
  depends_on    = [openstack_compute_instance_v2.http]
}

В данном блоке задаётся имя балансировщика и (обязательное значение) сеть, в которой будет выделен адрес балансировщика нагрузки. Терраформ может создавать балансировщики нагрузки только в сетях, добавленных в политику. При изменении этого параметра будет создаваться новый балансировщик нагрузки.

Далее создаём listener:

resource "openstack_lb_listener_v2" "1" {
  name            = "listener_1"
  protocol        = "TCP"
  protocol_port   = 80
  loadbalancer_id = openstack_lb_loadbalancer_v2.http.id
  depends_on      = [openstack_lb_loadbalancer_v2.http]


Обязательные пункты этого блока:

  • Протокол

  • Порт протокола 

  • Балансировщик нагрузки к которому относится данный слушатель

Также можно указать имя слушателя и другие параметры. Например, разного рода time out (timeout_client_data, timeout_member_connect, timeout_member_data, timeout_tcp_inspect).

После этого необходимо настроить метод балансировки нагрузки между инстансами:

resource "openstack_lb_pool_v2" "1" {
  name        = "pool_1"
  protocol    = "TCP"
  lb_method   = "ROUND_ROBIN"
  listener_id = listener_1
  depends_on  = [openstack_lb_listener_v2.http]


Здесь необходимыми будут строки:

  • Протокол (должен быть одним из перечисленных: TCP, HTTP, HTTPS, PROXY or UDP

  • Метод балансировки. Всего их три: ROUND_ROBIN, LEAST_CONNECTIONS и SOURCE_IP

  • ID балансировщика или ID слушателя, к которому применяется данное правило

Остальные строки, такие как имя, могут быть добавлены по желанию администратора.

Сам балансировщик готов к работе. Осталось добавить в его группу "инстансы":

resource "openstack_lb_member_v2" "http" {
  count = var.desired_capacity_http
  address = “10.0.0.1”
  protocol_port = 80
  pool_id       = openstack_lb_pool_v2.http.id
  subnet_id     = openstack_networking_subnet_v2.http.id
  depends_on    = [openstack_lb_pool_v2.http]
}


Для корректной работы необходимо указать:

  • ID группы инстансов

  • IP-адреса виртуальных машин работающих с этим балансировщиком. При добавлении нового адреса будет добавлен новый член группы.

  • Порт  используемого протокола