Задание:

d) Создайте балансировщик нагрузки и распределите трафик между инстансами Cloud-HA01 и Cloud-HA02.

  • i. Ограничьте внешний доступ к балансировщику только протоколами HTTP и HTTPS.

2. Имена инстансов, виртуальных сетей, и балансировщика нагрузки должны соответствовать именованиям, указанным в Топологии (см. Топология L-3).

Основные моменты на что стоит обратить внимание перед написанием скрипта с использованием Terraform:

Разбираемся с балансировщиком нагрузки 'loadbalancer.tf'. Общий принцип:

Необходимо создавать следующие ресурсы:

  • Создать балансировщик нагрузки с каким-то именем;
    • при необходимости:
      • добавить в конкретную подсеть;

      • присвоить конкретный IP-адрес (порт);

    • Создать правило (правила) в созданном балансировщике нагрузки;

    • Создать целевую группу (группы) с указанием алгоритма балансировки, например "ROUND ROBIN", для определённого протокола (протоколов);

    • Добавить инстанс (инстансы) в целевую группу с указанием протокола (протоколов);

Пример в контексте текущего задания:

Cloud-ADM:

  • Вся дальнейшая работа реализуется в контексте директории /home/altlinux/bin/terraform:
cd /home/altlinux/bin/terraform
  • Создадим файл 'loadbalancer.tf', в котором последовательно будем описывать всё что касается создаваемого балансировщика нагрузки в контексте данного задания:
vim loadbalancer.tf
  • Добавляем следующее содержимое:
    • см. комментарии в коде;
# Создание балансировщика нагрузки с именнем "Cloud-LB"
# в подсети "External-SubNet", которая создаётся в сети "External-Net"
# с назначением IP-адреса "172.16.1.1" в соответствие с L3-Топологией
resource "openstack_lb_loadbalancer_v2" "cloud_lb" {
  name          = "Cloud-LB"
  vip_subnet_id = openstack_networking_subnet_v2.external_subnet.id
  vip_port_id   = openstack_networking_port_v2.port_externalnet_lb.id
}

# Создание правила в балансировщике нагрузки для HTTP трафика
resource "openstack_lb_listener_v2" "cloud_lb_listener_http" {
  name            = "HTTP"
  protocol        = "TCP"
  protocol_port   = "80"
  loadbalancer_id = openstack_lb_loadbalancer_v2.cloud_lb.id
}

# Создание правила в балансировщике нагрузки для HTTPS трафика
resource "openstack_lb_listener_v2" "cloud_lb_listener_https" {
  name            = "HTTPS"
  protocol        = "TCP"
  protocol_port   = "443"
  loadbalancer_id = openstack_lb_loadbalancer_v2.cloud_lb.id
}

# Создать целевую группу для HTTP с указанием алгоритма балансировки "ROUND ROBIN"
resource "openstack_lb_pool_v2" "cloud_lb_pool_http" {
  name        = "HTTP"
  protocol    = "HTTP"
  lb_method   = "ROUND_ROBIN"
  listener_id = openstack_lb_listener_v2.cloud_lb_listener_http.id
}

# Создать целевую группу для HTTPS с указанием алгоритма балансировки "ROUND ROBIN"
resource "openstack_lb_pool_v2" "cloud_lb_pool_https" {
  name        = "HTTPS"
  protocol    = "HTTPS"
  lb_method   = "ROUND_ROBIN"
  listener_id = openstack_lb_listener_v2.cloud_lb_listener_https.id
}

# Добавить инстанс HA01  в целевую группу HTTP
resource "openstack_lb_member_v2" "cloud_lb_member_ha01_http" {
  name          = "HA01"
  subnet_id     = openstack_networking_subnet_v2.external_subnet.id
  pool_id       = openstack_lb_pool_v2.cloud_lb_pool_http.id
  address       = "172.16.1.2"
  protocol_port = "80"
}

# Добавить инстанс HA01  в целевую группу HTTPS
resource "openstack_lb_member_v2" "cloud_lb_member_ha01_https" {
  name          = "HA01"
  subnet_id     = openstack_networking_subnet_v2.external_subnet.id
  pool_id       = openstack_lb_pool_v2.cloud_lb_pool_https.id
  address       = "172.16.1.2"
  protocol_port = "443"
}

# Добавить инстанс HA02  в целевую группу HTTP
resource "openstack_lb_member_v2" "cloud_lb_member_ha02_http" {
  name          = "HA02"
  subnet_id     = openstack_networking_subnet_v2.external_subnet.id
  pool_id       = openstack_lb_pool_v2.cloud_lb_pool_http.id
  address       = "172.16.1.3"
  protocol_port = "80"
}

# Добавить инстанс HA02  в целевую группу HTTPS
resource "openstack_lb_member_v2" "cloud_lb_member_ha02_https" {
  name          = "HA02"
  subnet_id     = openstack_networking_subnet_v2.external_subnet.id
  pool_id       = openstack_lb_pool_v2.cloud_lb_pool_https.id
  address       = "172.16.1.3"
  protocol_port = "443"
}
  • Проверяем конфигурацию и план terraform validate и terraform plan и запускаем развёртывание ресурсов:
terraform apply
    • Подтверждаем развёртывание введя yes:

    • Результат:

  • Проверяем наличие созданных ресурсов средствами openstack-cli:

  • Проверяем наличие созданных ресурсов средствами веб-интерфейса:

Последнее изменение: вторник, 24 июня 2025, 12:55