При использовании балансировщика нагрузки 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 ###
Описывает детали, необходимые для подключения к OpenStack — имя проекта, логин и пароль.
Описывает детали, необходимые для загрузки сертификата. В нашем примере мы использовали самозаверенный сертификат 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-...
Описывает задание имени для балансировщика и подсеть, которую необходимо прокинуть в балансировщик. Можно использовать как серую, так и белую сети.
Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...
Описывает детали прослушивания: с помощью какого протокола, на каком порту, количество соединений.
Подробнее по ссылке https://registry.terraform.io/providers/terraform-...
Описывает задание параметров непосредственно для пула: используемый протокол и алгоритм для балансировки.
Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...
Описывает детали мониторинга пула инстансов: протокол, с помощью которого будет производится проверка, после выбора которого указываются более подробные детали для выбранного протокола.
Подробнее по ссылке: https://registry.terraform.io/providers/terraform-...
В данном блоке непосредственно указываются имена инстансов-участников, которые будут в пуле, и их адреса, которые необходимо добавить в пул. В качестве примеров указаны имена двух инстансов: alpha_http_member и beta_http_member. Имена можно задавать на своё усмотрение, но необходимо будет указать корректные имена далее по шаблону, если таковые будут встречаться.
Данный блок является опциональным. Он описывает вывод IP-адреса балансировщика непосредственно после его создания.