Terraform — это инструмент для управления инфраструктурой с помощью кода, созданный компанией HashiCorp. С его помощью можно автоматизировать создание и изменение ресурсов инфраструктуры с использованием декларативного языка конфигурации HCL.
Возможности Terraform:
- Управление инфраструктурой с помощью единого инструмента
- Контроль версий и повторное использование конфигураций
- Возможность отслеживать текущее состояние инфраструктуры
В инструкции рассмотрим, как управлять правилами балансировщика нагрузки с помощью Terraform.
Зачем нужен балансировщик?
Сетевой балансировщик дает возможность равномерно распределить входящий трафик по нескольким серверам для улучшения доступности и надежности вашего сервиса. Он является незаменимым инструментом при реализации горизонтального масштабирования сервисов.
Горизонтальное масштабирование — это процесс добавления дополнительных узлов или машин к существующей инфраструктуре для увеличения её возможностей и обработки большего количества трафика.
Основные преимущества, которые предоставляет балансировщик:
- Балансировка нагрузки для TCP-сессий, обеспечивающая оптимальное использование ресурсов серверов.
- Поддержка различных протоколов HTTP, HTTP2, HTTPS, TCP.
- Отказоустойчивость сервера приложений, позволяющая избежать проблем с доступностью и работоспособностью сервиса.
- Возможность настраивать правила маршрутизации трафика, чтобы направлять запросы к определенным портам на серверах.
- Возможность настройки SSL и переадресации на протокол HTTPS.
Создаем сетевой балансировщик
Для начала определимся с требованиями к балансировщику нагрузки:
- У нас будет два сервера, у которых на 80-м порту будет развернут сайт.
- Обращаясь по 80 порту к адресу балансировщика, мы должны будем попадать на наш сайт, на один из серверов.
- Алгоритм — Round robin.
- Дополнительных параметров нет.
Чтобы добавить правило к нашему балансировщику, нам нужно создать его и настроить балансировку серверов.
Мы добавили два сервера для того, чтобы настроить для них балансировку нагрузки.
Теперь добавим проект на terraform. Подробнее об установке и настройке провайдера можно прочитать тут.
Сначала необходимо создать папку, где будут находиться конфигурации:
Общая структура файлов получилась следующей:
В файле variables.tf укажем переменные для токена провайдера и IP-адресов для балансировки:
В файле main.tf добавим информацию о провайдере:
Когда мы описываем конфигурацию Terraform, мы используем два основных типа сущностей — это источники данных (data) и ресурсы (resources).
- Источники данных предназначены для того, чтобы определять различные переменные и настройки, которые доступны в рамках выбранного провайдера. К таким источникам данных могут относиться, например, пресеты, проекты и другие параметры.
- Ресурсы — это те элементы инфраструктуры, которые мы хотим создать с помощью Terraform — например, серверы, базы данных, балансировщики нагрузки и другие компоненты.
В файле main.tf укажем пресет для настройки:
Если в панели управления вы используете проекты, то можно указать конкретный проект, в котором будут созданы ресурсы. Например, добавим проект с названием «Articles»:
Ресурс, который мы будем создавать, называется twc_lb. При его создании мы можем указать множество опциональных параметров, например настройки healthcheck, выбор алгоритма балансировки. Возьмем самую простую настройку:
Вот какие параметры мы можем еще указать:
ips— список IP-адресов для балансировкиis_keepalive— флаг, который указывает на поддержание TCP-соединения с серверомis_ssl— автоматический редирект на протокол HTTPSis_sticky— сохранять пользовательскую сессию для одного бэкэнд-сервера
Также в проект мы добавили файл .tfvars, где указали значения переменных из variables.tf:
Далее выполним команду:
Если всё хорошо, вы должны увидеть сообщение, как на скриншоте.
Теперь можно выполнить следующую команду, чтобы посмотреть, какие ресурсы будут созданы:
Флаг -var-file=.tfvars позволяет нам указать на файл с переменными, которые необходимо будет подставить при применении этого кода.
Помимо определения переменных в файле, указать их можно следующими способами:
- С помощью параметра
-var, например-var="tw_token=243453452345235456643" - C помощью переменных окружения —
export TF_VAR_tw_token=243453452345235456643
Добавляем правила к балансировщику
Правилом в балансировщике будем называть настройку перенаправления портов. В правиле, независимо от способа создания, необходимо указать:
- Порт, на который мы будем обращаться по адресу балансировщика.
- Порт, на который мы будем перенаправляться на конкретных серверах.
Добавим новый ресурс в нашу конфигурацию, в файл main.tf:
Снова выполним команды:
Подтвердим применение команды, введя yes.
В панели управления видим созданные ресурсы:
- Балансировщик
- Правило
Перейдем по адресу нашего балансировщика (два раза, чтобы попасть на разные серверы):
- Первый сервер, указанный в переменных:
- Второй сервер, указанный в переменных:
Что делать, если нам потребовалось добавить второе правило? Например, на серверах мы развернули новое приложение на порту 81.
Просто добавим еще один блок resource для правила:
Снова выполним команду ниже, чтобы посмотреть на изменения:
Мы видим информацию о том, что один балансировщик и одно правило уже созданы, а новое правило будет добавлено.
Выполним команду:
При запросе согласимся на применение конфигурации:
Теперь заглянем в панель управления — у нас настроены два правила:
Обратимся по адресу балансировщика, чтобы проверить, что всё работает корректно:
Заключение
В этой статье мы научились создавать сетевые балансировщики и правила с помощью Terraform. Помимо использования этого инструмента, балансировщиками можно управлять с помощью CLI и API.
Все примеры из статьи доступны на Гитхабе.
Полезные ссылки: