При использовании балансировщика нагрузки 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-адреса балансировщика непосредственно после его создания.