Создание и настройка балансировщика нагрузки по протоколу terminated_https через Terraform

При использовании балансировщика нагрузки HTTPS с завершением TLS веб-клиенты взаимодействуют с балансировщиком нагрузки по протоколам TLS. Балансировщик нагрузки завершает сеанс TLS и перенаправляет расшифрованные запросы на внутренние серверы. Завершая сеанс TLS на балансировщике нагрузки, мы перекладываем работу по шифрованию, интенсивно использующую ЦП, на балансировщик нагрузки и даем возможность использовать расширенные функции балансировщика нагрузки, такие как функции уровня 7 и манипулирование заголовками.

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

Шаблон по созданию инстанса с помощью Terraform описан по ссылке: https://www.ps.kz/faq/cloud/vpc/terraform-template...

Создание балансировщика через веб-интерфейс Horizon описано по ссылке: https://www.ps.kz/faq/cloud/vpc/loadbalancer

Внимание!
При создании балансировщика с помощью Terraform в блоке, в котором описываются параметры подключения к OpenStack, необходимо указать параметр 

use_octavia = true


#### Configure the OpenStack Provider ####
provider "openstack" {
  user_name   = "your_project_login"
  tenant_name = "your_project_name"
  password    = "your_project_password"
  auth_url    = "<a href="https://auth.pscloud.io/v3/">https://auth.pscloud.io/v3/</a>"
  use_octavia = true
}
#### End config block ####

### Certificate Details ###
resource "openstack_keymanager_secret_v1" "certificate" {
  name                 = "lb1-example-crt"
  payload              = "${file("lb1.example.kz.crt")}"
  secret_type          = "certificate"
  payload_content_type = "text/plain"
}
resource "openstack_keymanager_secret_v1" "private_key" {
  name                 = "lb1-example-key"
  payload              = "${file("lb1.example.kz.key")}"
  secret_type          = "private"
  payload_content_type = "text/plain"
}
resource "openstack_keymanager_container_v1" "tls_1" {
  name = "lb1-example-tls"
  type = "certificate"
  secret_refs {
    name       = "certificate"
    secret_ref = "${openstack_keymanager_secret_v1.certificate.secret_ref}"
  }
  secret_refs {
    name       = "private_key"
    secret_ref = "${openstack_keymanager_secret_v1.private_key.secret_ref}"
  }
}
### End Certificate Detais ###

### Load Balancer Details ### 
resource "openstack_lb_loadbalancer_v2" "lb1-https-test" {
  name = "lb1-https-test"
  vip_subnet_id = "fd9d5eb0-a232-46f9-988b-b911d4f1dbdc"
}
### End Load Balancer Details ### 

### Listener Details ### 
resource "openstack_lb_listener_v2" "listen-https-test" {
    name = "listen-https-test"
    description = "what to listen?"
    protocol = "TERMINATED_HTTPS" 
    protocol_port = 443
    connection_limit = -1
    loadbalancer_id = openstack_lb_loadbalancer_v2.lb1-https-test.id
    default_tls_container_ref = openstack_keymanager_container_v1.tls_1.container_ref
}
### End Listener Details ###

### Pool Details ###
resource "openstack_lb_pool_v2" "https-pool-test" {
    name = "https-pool-test"
    protocol = "HTTP"
    lb_method = "ROUND_ROBIN"
    listener_id = openstack_lb_listener_v2.listen-https-test.id
}
### End Pool Details ### 

### Monitor Details ###
resource "openstack_lb_monitor_v2" "https-monitor-test" {
    name = "https-monitor-test"
    delay = 5
    max_retries = 3
    timeout = 5
    type = "HTTP"
    url_path = "/"
    http_method = "GET"
    expected_codes = "200"
    pool_id = openstack_lb_pool_v2.https-pool-test.id
}
### End Monitor Details ###

### Pool Members Details ###
resource "openstack_lb_member_v2" "centos-lb2-https-test" {
    name = "centos-lb2-https-test"
    address = "192.168.0.31"
    protocol_port = 80
    pool_id = openstack_lb_pool_v2.https-pool-test.id
}
resource "openstack_lb_member_v2" "centos-lb1-https-test" {
    name = "centos-lb1-https-test"
    address = "192.168.0.165"
    protocol_port = 80
    pool_id = openstack_lb_pool_v2.https-pool-test.id
}
### End Members Details ###

### (Optional) Load Balancer IP Output ###
output "http_balancer_vip_address" {
  value = "openstack_lb_loadbalancer_v2.lb1-https-test.vip_address"
}
### (Optional) End Load Balancer IP Output ###


Блок Configure the OpenStack Provider

Описывает детали, необходимые для подключения к OpenStack — имя проекта, логин и пароль.

Блок Certificate Details

Описывает детали, необходимые для загрузки сертификата. В нашем примере мы использовали самозаверенный сертификат SSL, если у вас есть промежуточный сертификат SSL, то Вам необходимо добавить resource для него:

Добавляем в блок Certificate Details:

resource "openstack_keymanager_secret_v1" "intermediate_1" {
  name                 = "intermediate"
  payload              = "${file("intermediate-ca.pem")}"
  secret_type          = "certificate"
  payload_content_type = "text/plain"
}

Также необходимо добавить следующие строки в resource "openstack_keymanager_container_v1" "tls_1" :

secret_refs {
    name       = "intermediates"
    secret_ref = "${openstack_keymanager_secret_v1.intermediate_1.secret_ref}"

Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...

Блок Load Balancer Details

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

Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...

Блок Listener Details

Описывает детали прослушивания: с помощью какого протокола, на каком порту, количество соединений.

Подробнее по ссылке https://registry.terraform.io/providers/terraform-...

Блок Pool Details

Описывает задание параметров непосредственно для пула: используемый протокол и алгоритм для балансировки.

Подробнее по ссылке:  https://registry.terraform.io/providers/terraform-...

Блок Monitor Details

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

Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...

Блок Pool Members Details

В данном блоке непосредственно указываются имена инстансов-участников, которые будут в пуле, и их адреса, которые необходимо добавить в пул. В качестве примеров указаны имена двух инстансов: alpha_http_member и beta_http_member. Имена можно задавать на своё усмотрение, но необходимо будет указать корректные имена далее по шаблону, если таковые будут встречаться.

Блок Load Balancer IP Output

Данный блок является опциональным. Он описывает вывод IP-адреса балансировщика непосредственно после его создания.

Помогла ли вам эта информация?
Не можете найти ответ на свой вопрос?
Напишите запрос в службу поддержки
Написать сейчас