⏳ Настройка балансировщика нагрузки HAProxy с SSL в Ubuntu 1804 / Debian 10/9

В этом руководстве мы узнаем, как настроить балансировщик нагрузки HAProxy с SSL в Ubuntu 18.04/Debian 10/9.

HAProxy — это де-факторное решение с открытым исходным кодом, обеспечивающее очень быструю и надежную высокую доступность, балансировку нагрузки и прокси для приложений на базе TCP и HTTP.

Таким образом, HAProxy подходит для веб-сайтов с очень высоким показателем трафика.

Настройте балансировщик нагрузки HAProxy с помощью SSL в Ubuntu 18.04/Debian 10/9

В этом руководстве мы продемонстрируем, как HAProxy выполняет балансировку нагрузки с использованием трех веб-серверов, обслуживающих простые HTML-страницы.

Наша архитектура выглядит как показано на схеме ниже;



Установите HAProxy в Ubuntu 18.04/Debian 10/Debian 9

Запустите обновление системы.

apt update apt upgrade

После завершения обновления перейдите к установке HAProxy в ваших системах Ubuntu/Debian.

Создайте HAProxy репозиторий

Для каждой системы существуют разные пакеты HAProxy.

Следовательно, вам нужно создать отдельный репозиторий для каждой системы.

Прежде чем вы сможете создать репозитории, установите ключ подписи APT.

apt install curl -y curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -

Затем создайте репозитории HAProxy.

На Debian 10 Buster/Debian 9 Stretch выполните команду, показанную ниже, чтобы создать репо.

echo "deb http://haproxy.debian.net $(lsb_release -cs)-backports-2.0 main" | tee /etc/apt/sources.list.d/haproxy.list

В Ubuntu 18.04 вам нужно добавить репозитории vbernat haproxy PPA, как показано ниже;

apt install software-properties-common add-apt-repository ppa:vbernat/haproxy-2.0

Как только репозитории созданы в каждой системе, выполните обновление системы и установите HAProxy.

apt update apt install haproxy=2.0.\*

Чтобы проверить версию установленного HAProxy, выполните команду ниже;

haproxy -v
HA-Proxy version 2.0.1-1~bpo9+1 2019/06/27 - https://haproxy.org/

Настройте балансировщик нагрузки HAProxy в Ubuntu 18.04/Debian 10/9

Конфигурация HAProxy — это все то, где он прослушивает запросы на соединение и куда направляет такие запросы.

Поэтому он состоит из системы внешнего интерфейса и одной или нескольких внутренних систем.

Внешняя система определяет IP-адрес и порт, который прослушивает прокси-сервер, а также внутренние системы для использования для конкретного прокси.

Основной файл конфигурации для HAProxy — /etc/haproxy/haproxy.cfg.

Файл конфигурации HAProxy состоит из четырех разделов;

  • global
    раздел определяет настройки безопасности и производительности в рамках всего процесса, которые влияют на HAProxy на низком уровне.
  • defaults
    Раздел  global определяет параметры конфигурации, которые применяются ко всем внешним и внутренним разделам. Вы можете определить несколько разделов по умолчанию, но последующие разделы по умолчанию переопределяют предшествующие ему.
  • frontend
    Когда HAProxy размещается в качестве обратного прокси-сервера, в разделе внешнего интерфейса определяются IP-адреса и порты, к которым могут подключаться клиенты.
  • backend
    Этот раздел определяет группу серверов, которые будут сбалансированы по нагрузке и назначены для обработки запросов.

Секции frontend и backend могут быть объединены с использованием секции listen.

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

Чтобы узнать больше об объяснении разделов конфигурации HAProxy, посмотрите информацию тут.

Прежде чем мы сможем начать какую-либо настройку, давайте создадим резервную копию файла конфигурации.

cp /etc/haproxy/haproxy.cfg{,.bak}

Конфигурация HAProxy по умолчанию содержит параметры конфигурации по умолчанию для разделов global и default.

global log /dev/loglocal0 log /dev/loglocal1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: #https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ # An alternative list with additional directives can be obtained from #https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 ## Add the line below tune.ssl.default-dh-param 2048 defaults log global modehttp optionhttplog optiondontlognull timeout connect 5000 timeout client50000 timeout client50000 timeout server50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http

Мы оставим эти настройки такими, какие они есть, и добавим наши конфигурации для разделов frontend и backend.

Однако вы можете добавить строку tune.ssl.default-dh-param 2048 в глобальный раздел, который устанавливает максимальный размер параметров Диффи-Хеллмана, используемых для генерации эфемерного/временного ключа Диффи-Хеллмана в случае обмена ключами DHE.

Настройте HAProxy с SSL на Ubuntu 18.04/Debian 10/9

Как указано выше, раздел внешнего интерфейса определяет IP-адрес, на котором следует прослушивать запросы на подключение.

Поскольку мы настраиваем HAProxy с SSL, вам необходимо сгенерировать сертификаты SSL/TLS.

В этом руководстве используются самоподписанные сертификаты.

Вы можете получить свой собственный от доверенного CA.

Создание самоподписанных сертификатов SSL для HAProxy

Начните с генерации закрытого ключа.

openssl genrsa -out /etc/ssl/private/haproxy.key 2048

Затем сгенерируйте запрос на подпись сертификата (CSR).

openssl req -new -key /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.csr

Создайте самоподписанный сертификат (CRT)

openssl x509 -req -days 365 -in /etc/ssl/certs/haproxy.csr -signkey /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.crt

Создайте файл pem SSL, содержащий ключ и сертификат.

cat /etc/ssl/private/haproxy.key /etc/ssl/certs/haproxy.crt >> /etc/ssl/certs/haproxy.pem

Определите параметры конфигурации внешнего интерфейса HAProxy

Откройте файл конфигурации HAProxy и настройте параметры внешнего интерфейса, как показано ниже;

vim /etc/haproxy/haproxy.cfg

Это наши основные настройки конфигурации интерфейса.

frontend lb_01 bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem default_backend webapp_backends
  • Параметр bind назначает слушателя для данного IP-адреса и порта. ssl crt инструктирует HAProxy использовать SSL.
  • default_backend дает имя бэкенда для отправки трафика.

Определите настройки конфигурации HAProxy Backend

В базовой конфигурации настройки внешнего бэкенда определены ниже;

backend webapp_backends balance roundrobin server webapp_01.example.com192.168.43.252:80 server webapp_02.example.com192.168.43.174:80 server webapp_03.example.com192.168.43.21:80

Настройка balance определяет алгоритм планирования балансировки нагрузки.
Roundrobin выбирает серверы по очереди.
Другие распространенные алгоритмы включаютe leastconn, которые позволяют балансировщику нагрузки пересылать запросы на серверы с наименьшим количеством соединений.

настройки server указывает серверы, доступные в бэкэнде.

Включить статистику HAProxy через Интернет

listen stats bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem stats enable# enable statistics reports stats hide-version# Hide the version of HAProxy stats refresh 30s # HAProxy refresh time stats show-node # Shows the hostname of the node stats auth admin:P@ssword # Authentication for Stats page stats uri /lb_stats # Statistics URL

Проверьте конфигурацию HAProxy

После завершения настройки вы можете выполнить команду ниже, чтобы проверить конфигурацию HAProxy на наличие ошибок.

haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid

Запуск HAProxy

После установки HAProxy настроен на запуск по умолчанию.

Перезапустите и разрешите запуск HAProxy при загрузке системы;

systemctl restart haproxy systemctl enable haproxy

Проверьте статус;

systemctl status haproxy ● haproxy.service - HAProxy Load Balancer Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-07-12 23:22:58 EAT; 5s ago Docs: man:haproxy(1) file:/usr/share/doc/haproxy/configuration.txt.gz Process: 10686 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS) Main PID: 10687 (haproxy) Tasks: 2 (limit: 2340) CGroup: /system.slice/haproxy.service ├─10687 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock └─10688 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock

Если UFW работает, откройте порт 443,

ufw allow 443

Проверьте балансировку нагрузки HAProxy

Теперь, когда настройка завершена, вы можете получить доступ к вашему HAProxy из Интернета, чтобы увидеть, выполняет ли он какую-либо циклическую балансировку нагрузки, используя адрес https://.

Первая страница загрузки показывает контент-сервер из webapp_01.

Для этой демонстрации у нас есть три тестовых HTML-страницы.

При обновлении отображается содержимое с других серверов.







Как вы понимаете, страницы обслуживаются по порядку, одна за другой.

Вот и все, что касается нашего основного руководства по настройке HAProxy Load Balancer с самоподписанным сертификатом в Ubuntu 18.04/Debian 10/Debian 9.

Отправка комментария

0 Комментарии