Балансировщик нагрузок HAProxy + Keepalived методом SSL Termination
Автор Vladislav Fomichev, Last modified by Mariya Vorozhba на 01 марта 2024 09:28 PM

Оглавление

Для серверов Indeed AM возможно использовать балансировщик нагрузок HAProxy. Для обеспечения отказоустойчивости самого сервера с HAProxy рекомендуется развернуть второй сервер с HAProxy и использовать конфигурацию HAProxy + Keepalived.

Предусловия:

  1. Установленный и настроен центр сертификации Windows.
  2. Развернутая система Indeed AM с основным и дополнительным серверами.
  3. Развернутые две машины с ОС Linux, с обновленными компонентами.
  4. Рекомендуется установить Midnight Commander - для работы с файлами. В качестве текстового редактора рекомендуется использовать mcedit. Для установки выполните: sudo apt-get install mc

Для настройки балансировки SSL Termination потребуется:

    • Установленный и настроенный центр сертификации.
    • Сертификаты проверки подлинности для серверов Indeed AM.
    • Сертификаты проверки подлинности веб-сервера Haproxy.
    • Корневой сертификат домена.
    • Настройка прозрачной аутентификации.
      • Потребуются создание учетных записей в домене и добавление spn записей. Количество учетных записей зависит от количества серверов Indeed AM.

        Настройка сертификатов

        Запрос и установка сертификатов для серверов Indeed AM

        Необходимо установить сертификаты проверки подлинности веб-сервера для каждого сервера Indeed AM.

        При запросе сертификата, в качестве общего имени, можно использовать полное имя конкретной машины с сервером Indeed, например: indeedAM01.demo.local (При таком сценарии необходимо запросить сертификаты для каждого сервера Indeed), или использовать символ звездочки (*) перед доменным именем (Данный символ означает, что перед доменным именем может быть подставлена любая последовательность символов), например: *.demo.local (При таком сценарии будет достаточно запросить 1 сертификат и установить его на каждый сервер Indeed).

        В данном примере запрашивается один сертификат для всех серверов Indeed AM.

        1. Выполните запрос сертификата и установку для каждого сервера Indeed AM.


        2. Настройте привязку с полученным сертификатом на каждом сервере Indeed AM.

          Запрос и установка сертификатов для серверов HAProxy

          При использовании https требуется установить сертификаты проверки подлинности веб-сервера для каждого сервера с HAProxy. Можно использовать сертификаты полученные от доменного CA, либо сгенерировать сертификаты с помощью OpenSSL (Потребуется добавление всех полученных сертификатов в доверенные). 

          При запросе сертификата указывается общее(Виртуальное) имя, используемое балансировщиками. Данное имя является DNS записью типа “A”  для виртуального ip адреса указанного в Keepalived. 

          В данном примере используется имя server.bal.local.

          Экспорт корневого сертификата УЦ

          Требуется для того, чтобы сервер с Haproxy доверял серверам Indeed AM.

          1. Выполните экспорт корневого сертификата домена в формате .cer в кодировке Base-64.
          2. Скопируйте полученный сертификат на все машины с Haproxy в папку "/etc/ssl/CA". Если данной папке нет, требуется создать её.

          Запрос и установка доменных сертификатов

          1. Выполните запрос сертификата проверки подлинности веб-сервера. Выберете параметр "Общее имя" и укажите полное DNS-имя которое будет использоваться для балансировщика нагрузки. В данной инструкции будет использоваться: server.bal.local
          2. Выполните экспорт полученного сертификата вместе с закрытым ключом.
          3. В окне "Формат экспортируемого файла" оставьте настройки по умолчанию и нажмите "Далее".
          4. Установите пароль и сохраните сертификат.
          5. Скопируйте полученный сертификат на все машины с Haproxy.
          6. Для использования сертификата на haproxy необходимо выполнить следующие действия:
            • Извлечь из сертификата зашифрованный приватный ключ. Для этого выполните команду (Потребуется указать пароль, заданный при экспорте сертификата): 
              openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -nocerts -out <Путь куда будет извлечен ключ>.
              Пример команды: openssl pkcs12 -in /home/indeed/Desktop/server.bal.local.pfx -nocerts -out /home/indeed/Desktop/server.bal.localKEY.key
            • Извлечь сертификат в формате crt. Для этого выполните команду: 
              openssl pkcs12 -in <Путь до вашего сертификата в формате pfx> -clcerts -nokeys -out <Путь куда будет извлечен сертификат в формате crt>. 
              Пример команды: openssl pkcs12 -in /home/indeed/Desktop/server.bal.local.pfx -clcerts -nokeys -out /home/indeed/Desktop/server.bal.local.crt
            • Расшифровать приватный ключ. Для этого выполните команду (Потребуется указать пароль, заданный при экспорте сертификата): 
              openssl rsa -in <Путь до извлеченного ключа> -out <Путь куда будет извлечен расшифрованный ключ>. 
              Пример команды: openssl rsa -in /home/indeed/Desktop/server.bal.localKEY.key -out /home/indeed/Desktop/server.bal.localKEY-descr.key
            • Объединить расшифрованный ключ и сертификат в формате crt и скопировать в папку /etc/ssl/private/ . Для этого выполните команду: 
              sudo bash -c 'cat <Путь до извлеченного расшифрованного ключа> <Путь до сертификата в формате crt> >> /etc/ssl/private/<Имя сертификата с форматом pem>' .
              Пример команды: sudo bash -c 'cat /home/indeed/Desktop/server.bal.localKEY-descr.key /home/indeed/Desktop/server.bal.local.crt >> /etc/ssl/private/server.bal.local.pem' 

          Генерация сертификатов с помощью openSSL

          1. Создайте контейнер для хранения ключей и сертификатов. Для этого выполните команду: sudo mkdir /etc/ssl/indeed-id.local
          2. Создайте секретный ключ и сохраните в файл (Рекомендуется использовать секретный ключ длиной 2048 бит). Для этого выполните команду: sudo openssl genrsa -out /etc/ssl/indeed-id.local/indeed-id.local.key 2048.

          3. Создайте запрос на получение сертификата. Для этого выполните команду (В параметре key указывается файл с секретным ключом.): sudo openssl req -new -key /etc/ssl/indeed-id.local/indeed-id.local.key -out /etc/ssl/indeed-id.local/indeed-id.local.csr
            • Country Name -  Двух буквенный ISO-код страны (RU).
            • State or Province Name - Область или край, где официально зарегистрирована организация (Novgorod).
            • Locality Name - Город, где официально зарегистрирована организация (Novgorod).
            • Organization Name - Точное наименование организации (Indeed-Id).
            • Organizational Unit Name - Название отдела или подразделения (Support).
            • Common Name - Полное доменное имя для веб-сервера в формате FQDN (Fully Qualifed Domain Name) по которому будет доступен Haproxy (server.bal.local). 
            • Email Address - Заполнять не требуется.
            • A challenge password - Заполнять не требуется.
            • An optional company name - Заполнять не требуется.

          4. Подпишите созданный запрос на сертификат. Для этого выполните команду: sudo openssl x509 -req -days 365 -in /etc/ssl/indeed-id.local/indeed-id.local.csr -signkey /etc/ssl/indeed-id.local/indeed-id.local.key -out /etc/ssl/indeed-id.local/indeed-id.local.crt
            • Параметр req - Подписать запрос на сертификацию.
            • Параметр days 365 - Создаваемый сертификат будет действителен в течение 365 дней.
            • В Параметре in указывается файл с запросом.
            • signkey - указывается сгенерированный ранее ключ.
            • В параметре out - Путь по которому будет сохранен файл с сертификатом.

          5. Объедините подписанный запрос и ключ  в один файл и сохраните в формате .pem. Для этого выполните команду (Команда cat выводит содержимое 2х файлов на экран, команда tee записывает выведенную информацию в файл): sudo cat /etc/ssl/indeed-id.local/indeed-id.local.crt /etc/ssl/indeed-id.local/indeed-id.local.key | sudo tee /etc/ssl/indeed-id.local/indeed-id.local.pem

          Конвертация сертификата в формат pfx и экспорт сертификатов на клиентские машины

          1. Необходимо выполнить экспорт сертификата, созданного для Haproxy, в доверенные корневые центры сертификации на клиентские машины. Для этого выполните команду: openssl pkcs12 -export -out /etc/ssl/indeed-id.local/indeed-id.local.pfx -inkey /etc/ssl/indeed-id.local/indeed-id.local.key -in /etc/ssl/indeed-id.local/indeed-id.local.crt Укажите пароль для шифрования закрытого ключа.
          2. Добавьте полученный сертификат формата .pfx в доверенные корневые центры на клиентские машины. Для массового распространения сертификата рекомендуется использовать групповые политики.

            Распространение сертификата через GPO.

            Если сертификат будет добавлен вручную, то пропустите этот пункт.

            1. Создайте групповую политику, откройте "Доверенные корневые центры сертификацииКонфигурация компьютера -> Политики -> Конфигурация Windows -> Параметры безопасности -> Политики открытого ключа. Нажмите правую кнопку мыши и выберете "Импорт".
            2. Выберете загруженный файл сертификата в формате .pfx. Укажите пароль, который был задан при экспорте. Остальные настройки оставьте по умолчанию. 
            3. Выполните gpupdate /force на клиентских машинах, для обновления групповой политики.

              Настройка прозрачной аутентификации

              Здесь предоставлена инструкция для настройки неограниченного делегирования. Для настройки ограниченного делегирования, воспользуйтесь данной инструкцией.

              1. Создайте пользователей, которые будут использоваться в качестве сервисных учетных записей для серверов AM и MC. Учетные записи будут использованы в качестве удостоверения для пула соответствующего сервера. В качестве примера созданы следующие учетные записи: mc_service и am_service. Для каждого сервера Indeed AM требуется отдельная учетная запись.

              2. Настройте Service Principal Names для созданный учетных записей. Для этого выполните следующие команды (Для выполнения команд консоль должна быть запущена от имени Администратора):

              Команды для учетной записи сервера MC (В данном примере используется учетная запись с именем mc_service):

              • setspn /s HTTP/MC12 BAL\mc_service
              • setspn /s HTTP/MC12.bal.local BAL\mc_service
              • setspn /s HTTP/server.bal.local BAL\mc_service
              • setspn /s HTTP/server BAL\mc_service

              HTTP/MC12 - Указывается метод и имя машины где установлена консоль MC.
              HTTP/MC12.bal.local - Указывается метод и полное имя машины где установлена консоль MC.
              HTTP/server.bal.local - Указывается полное dns имя балансировщика.
              HTTP/server - Указывается dns имя балансировщика.
              BAL\mc_service - Указывается имя учетной записи, созданной для сервера MC, в формате DOMAIN\USERNAME.

              Команды для учетной записи сервера AM(В данном примере используется учетная запись с именем am_service):

              • setspn /s HTTP/AM12 BAL\am_service
              • setspn /s HTTP/am12.bal.local BAL\am_service

              HTTP/AM12 - Указывается метод и имя машины где установлен AM сервер.
              HTTP/AM12.bal.local - Указывается метод и полное имя машины где установлен AM сервер.
              BAL\am_service - Указывается имя учетной записи, созданной для сервера AM, в формате DOMAIN\USERNAME.

              3. Включите делегирование для созданных сервисных учетных записей.

              4. Выполните следующие настройки на серверах AM и MC.

              1. Откройте "Диспетчер служб IIS" и выберете пулы приложений. 
              2. Для пула IndeedAM.MC или IndeedAM.Core в панели "Действия" выберете "Дополнительные параметры".
              3. В окне "Дополнительные параметры" измените параметр "Удостоверение". Для этого нажмите на значок "..." справа.
                                                   
              4. В окне "Удостоверение пула приложений" выберете "Особая учетная запись" и нажмите "Установить". Укажите в окне "Задание учетных данных" данные учетной записи для соответствующего сервера (Имя пользователя необходимо указывать в формате DOMAIN\USERNAME). Для сервера MC - mc_service, для сервера AM - am_service.
              5. После изменений параметров для пула приложений IndeedAM.MC или IndeedAM.Core, выполните перезагрузку пула. Для этого выберите пул IndeedAM.MC или IndeedAM.Core и нажмите "Перезапуск..." в окне "Действия".
              6. Выберете приложение mc или core, в пункте "Управление" откройте "Редактор конфигурация".
              7. Откройте конфигурацию system.webServer/security/authentication/windowsAuthentication и измените параметр "useAppPoolCredentials" в "true". Нажмите "Применить".

              8. Проверьте провайдеры для Windows аутентификиации и их порядок. Для этого откройте приложение mc или core, в пункте "IIS" выберете "Проверка подлинности". Выберете "Проверка подлинности Windows" и нажмите "Поставщики".

              9. В окне "Поставщики" провайдеры должны располагаться как на скриншоте. Если один или оба провайдера отсутствуют или располагаются в другом порядке, то необходимо изменить/добавить, выбрав в пункте "Доступные поставщики".

              10. После выполнения всех действий сделайте перезагрузку IIS и выполните команду: klist purge. Команда выполняет сброс билетов Kerberos на компьютере.

              Установка HAProxy + Keepalived

              Установка HAProxy

              Данную установку необходимо произвести на каждом сервере с ОС Linux.

              1. Запустите терминал. Введите команду для установки HAProxy: sudo apt-get install haproxy
              2. Запустите Midnight Commander с root правами: sudo mc
              3. Откройте файл /etc/default/haproxy и добавьте строку ENABLED=1 (Эта настройка позволяет автоматически запускать HAProxy при загрузке системы)
              4. Отредактируйте  файл конфигурации HAProxy: /etc/haproxy/haproxy.cfg используя примеры. Описание настраиваемых параметров:
                • log - вести лог в /dev/log сохраняя в "объект" local0.
                • chroot - настройки безопасности, "запирающие" HAProxy в указанной директории.
                • stats socket - настройки сокета, по которому будет передаваться статистика.
                • maxconn - максимальное количество конкурирующих соединений на один процесс.
                • user - пользователь, от имени которого будет запущена программа.
                • group - группа пользователя, от имени которого будет запущена программа.
                • daemon - запуск процесса как демона.
                • log - указывает, в какой лог вести записи (global в данном случае означает, что используются параметры, заданные в секции global).
                • mode - устанавливает протокол взаимодействия, принимает одно из значений: tcp, http, health.
                • retries - количество попыток соединения с сервером в случае отказа.
                • option httplog - формат лога, в случае использования HAProxy для проксирования HTTP-запросов, рекомендуется включать данную настройку.
                • option redispatch - разрешает программе разорвать и переназначить сессию в случае отказа сервера.
                • contimeout - максимальное время ожидания успешного соединения с сервером.
                • bind :9000 - означает, что HAProxy будет ожидать запросы к порту 9000.
                • stats enable - включить отчеты со статистикой.
                • stats uri - установка адреса страницы с отчетом.
                • stats auth - логин и пароль для авторизации на странице со статистикой (может быть задано несколько).
                • cookie indeedid_proxy insert indirect nocache - строка сообщает HAProxy, что нужно установить cookie с именем indeedid_proxy. Параметр nocache означает, что этот тип трафика должен быть персональным и не кешировал его.

                  HAProxy предлагает несколько алгоритмов балансировки, и в зависимости от вашей задачи можно выбрать наиболее подходящий:

                  • roundrobin - каждый сервер получает запросы пропорционально своему весу, при этом веса серверов могут меняться на лету
                  • static-rr - то же, что и roundrobin, только изменение весов на лету не даст никакого эффекта
                  • leastconn - выбирает сервер с наименьшим количеством активных соединений
                  • first - выбирает первый сервер с доступными слотами для соединения
                  • source - на основе хэша IP-адреса отправителя запроса и весов серверов назначается сервер для соединения
                  • uri - сервер выбирается на основе адреса (без параметров) страницы
                  • url_param - сервер выбирается на основе GET-параметров запроса
                  • hdr - сервер выбирается на основе заголовков запроса
                  • rdp-cookie - сервер выбирается на основе cookie (если они не установлены, то применяется обычный round robin)

              Примеры

                  1. Пример конфигурационного файла при использовании SSL Termination (config-haproxy-Term.cfg):

              global
                  #log 127.0.0.1 local0
                  log /dev/log local0 info
                  chroot /var/lib/haproxy
                  pidfile /var/run/haproxy.pid
                  user haproxy
                  group haproxy
                  daemon
                  ca-base /etc/ssl/CA
                  crt-base /etc/ssl/private
                  tune.ssl.cachesize 100000
                  tune.ssl.lifetime 60000
                  tune.ssl.maxrecord 1460
                  tune.ssl.default-dh-param 2048
                  tune.maxrewrite  10000
                  tune.bufsize     20000
              defaults
                  timeout connect 50000
                  timeout client  50000
                  timeout server  50000
                  maxconn 524288
                  option http-pretend-keepalive
                  option forwardfor
                  log global
                  option httplog
              
              # Модуль статистики. Доступен по http://<IP адрес сервера>:9000/stats Login:admin
              listen stats
                  mode http
                  bind *:9000
                  stats enable
                  stats hide-version
                  stats refresh 30s
                  stats realm Haproxy\ Statistics
                  stats uri /stats
                  stats auth admin:admin
                  
              frontend http_main
                  log 127.0.0.1 local0
                  mode http
                  bind *:443 ssl crt haproxy.bal.local.pem crt-ignore-err all verify optional ca-file eaclient.cer ciphers ALL:@SECLEVEL=1
                  option forwardfor
                  http-request redirect scheme https unless { ssl_fc }
                  http-request add-header X-IndeedAM-ClientCert %{+Q}[ssl_c_der,base64] 
                  default_backend backend_am_servers_ssl
                  
              frontend airkey_server
                  mode http
                  bind *:81 ssl crt haproxy.bal.local.pem
                  option forwardfor 
                  http-request redirect scheme https unless { ssl_fc }
                  default_backend backend_ak_servers_ssl    
              
              backend backend_am_servers_ssl #Балансировка AM серверов
                  mode http
                  log 127.0.0.1 local0
                  balance roundrobin
                  option prefer-last-server
                  option redispatch
                  option forwardfor
                  option httpchk GET /am/core/api/v5/healthcheck/isHealthy
                  option http-keep-alive
                  http-check expect status 200
                  default-server inter 10s downinter 5s fall 5 rise 2
                  cookie IndeedIdProxy insert indirect nocache secure
                  server indeed1 indeed1.bal.local:443 check inter 5000ms cookie indeed1 ssl verify required ca-file ca.cer
                  server indeed2 indeed2.bal.local:443 check inter 5000ms cookie indeed2 ssl verify required ca-file ca.cer
                  
              backend backend_ak_servers_ssl #Балансировка Indeed Key серверов
              	mode http
              	balance roundrobin
              	option prefer-last-server
              	option redispatch
              	option forwardfor
              	option httpchk GET /api/HealthCheck
              	option http-keep-alive
              	http-check expect status 200
              	default-server inter 10s downinter 5s fall 5 rise 2
              	server air1 air1.bal.local:81 check inter 5000ms ssl verify none
                  server air2 air2.bal.local:81 check inter 5000ms ssl verify none

                 
                  2. Пример файла, если требуется включить TLSv1.2 в явном виде, а также установлены рекомендованные настройки безопасности, реализуемые HAProxy (config-haproxy-Term-TLS.cfg).

              Для корректной работы TLSv1.2, требуется включить поддержку на серверах IIS.

              При использовании Windows Server 2022+ возможны проблемы переключения на TLSv1.3, если он в явном виде включен.

              Также, в данном случае, необходимо применить приложенный файл реестра из архива TLSEn.zip на всех балансируемых серверах и перезагрузить их.

              global
                      log /dev/log    local0
                      log /dev/log    local1 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/haproxy/ssl
                      crt-base /etc/haproxy/ssl
              
              #Не использовать tune.* в случае, если этот же балансировщик используется для Patroni
                      tune.ssl.cachesize 1000000
                      tune.ssl.lifetime 900
                      tune.ssl.maxrecord 1419
                      #если нет сгенерированного файла DH
                      tune.ssl.default-dh-param 2048
                      #если есть сгенерированный файл DH
                      #ssl-dh-param-file /etc/haproxy/ssl/dhparams_4096.pem
                      tune.maxrewrite 1024
                      tune.bufsize 16384
              
               # intermediate configuration
                  ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
                  ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
                  ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
              
                  ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
                  ssl-default-server-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
                  ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
              
              
              defaults
                      log     global
                      mode    http
                      option  httplog
                      option  dontlognull
                      timeout connect 5000
                      timeout client  50000
                      timeout server  50000
                      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
              
              # Модуль статистики. Доступен по http://<IP адрес/DNS сервера>:9291/stats Login:admin
              listen stats
                      mode http
                      #выбираем нестандартный порт
                      bind *:9291 ssl crt bal.indeed.local_full.crt crt-ignore-err all
                      stats enable
                      # скрываем версию
                      stats hide-version
                      stats refresh 30s
                      stats realm Haproxy\ Statistics
                      stats uri /stats
                      stats auth admin:admin
                      # HSTS (63072000 seconds)
                      http-response set-header Strict-Transport-Security max-age=63072000
              
              frontend am_server_442_tcp
                      mode tcp
                      option tcplog
                      bind *:442
                      default_backend backend_servers_442
              
              frontend am_server_ssl_443
                      mode http
                      option forwardfor
                      option http-keep-alive
                      option http-server-close
                      timeout client  10s
                      maxconn 524288
                      bind *:443 ssl crt bal.indeed.local_full.crt crt-ignore-err all verify optional ca-file eaclient.cer ciphers ALL:@SECLEVEL=1
                      http-request redirect scheme https unless { ssl_fc }
                      # HSTS (63072000 seconds)
                      http-response set-header Strict-Transport-Security max-age=63072000
                      http-request add-header x-indeedam-clientcert %{+Q}[ssl_c_der,base64]
                      default_backend backend_am_servers_ssl_443
              
              frontend airkey_server_ssl_81
                      mode http
                      option forwardfor
                      option http-keep-alive
                      option http-server-close
                      timeout client  10s
                      maxconn 524288
                      bind *:81 ssl crt bal.indeed.local_full.crt crt-ignore-err all
                      http-request redirect scheme https unless { ssl_fc }
                      # HSTS (63072000 seconds)
                      http-response set-header Strict-Transport-Security max-age=63072000
                      default_backend backend_ak_servers_ssl_81
              
              backend backend_servers_442
                      mode tcp
                      balance roundrobin
                      option httpchk get /am/core/api/v5/healthCheck/isHealthy
                      http-check expect status 200
                      default-server inter 5s downinter 2s fall 2 rise 2
                      server indeed1 indeedam1.indeed.local:442 check check-ssl ca-file ca.cer
                      server indeed2 indeedam2.indeed.local:442 check check-ssl ca-file ca.cer
              
              backend backend_am_servers_ssl_443
                      mode http
                      option forwardfor
                      option redispatch
                      option http-keep-alive
                      option prefer-last-server
                      option http-server-close
                      balance roundrobin
                      timeout connect 10s
                      timeout server  120s
                      option httpchk GET /am/core/api/v5/healthCheck/isHealthy
                      http-check expect status 200
                      default-server inter 5s downinter 2s fall 2 rise 2
                      cookie IndeedIdProxy insert indirect nocache httponly secure
                      server AM1 indeedam1.indeed.local:443 check cookie AM1 ssl verify required ca-file ca.cer sni req.hdr(indeedam1.indeed.local)
                      server AM2 indeedam2.indeed.local:443 check cookie AM2 ssl verify required ca-file ca.cer sni req.hdr(indeedam2.indeed.local)
              
              backend backend_ak_servers_ssl_81
                      mode http
                      option forwardfor
                      option redispatch
                      option http-keep-alive
                      option prefer-last-server
                      option http-server-close
                      balance roundrobin
                      timeout connect 10s
                      timeout server  120s
                      option httpchk GET /api/HealthCheck
                      http-check expect status 200
                      default-server inter 5s downinter 2s fall 2 rise 2
                      cookie IndeedIdProxy insert indirect nocache httponly secure
                      server AK1 ak1.indeed.local:81 check cookie AK1 ssl verify required ca-file ca.cer sni req.hdr(ak1.indeed.local)
                      server AK2 ak2.indeed.local:81 check cookie AK2 ssl verify required ca-file ca.cer sni req.hdr(ak2.indeed.local)
              
              

              3. Проверьте конфигурационный файл командой: haproxy -c -f /etc/haproxy/haproxy.cfg.
              Запустите HAProxy: sudo /etc/init.d/haproxy start.
              Перезапуск сервиса выполняется командами: sudo systemctl restart haproxy или sudo service haproxy restart.

              4. Проверьте работу сервиса перейдя по ссылке: http://<IP адрес сервера Ubuntu c haproxy>:9000/stats Login: admin Pass: admin(для конфигурации из примера, указывается в параметре stats auth, блока listen stats ). Пример работы HAProxy:

              Установка Keepalived

              Данную установку необходимо произвести на каждом сервере с ОС Linux.

              1. Запустите терминал. Введите команду для установки Keepalived: sudo apt-get install keepalived
              2. Запустите Midnight Commander с root правами: sudo mc
              3. Откройте файл /etc/sysctl.conf и добавьте строки:

                net.ipv4.ip_forward=1
                net.ipv4.ip_nonlocal_bind=1

              4. Выполните команду sudo sysctl -p для проверки добавленных изменений
              5. Создайте файл конфигурации /etc/keepalived/keepalived.conf
              6. Настройте файл конфигурации согласно примеру ( config-keepalived-base.cfg ):
                global_defs {
                # Keepalived process identifier
                lvs_id haproxy_DH
                }
                # Script used to check if HAProxy is running
                vrrp_script check_haproxy {
                script "killall -0 haproxy"
                interval 2
                weight 2
                }
                # Virtual interface
                # The priority specifies the order in which the assigned interface to take over in a failover
                vrrp_instance VI_01 {
                state MASTER # MASTER для основного сервера, BACKUP для резевного
                interface ens38 # Имя интерфейса можно узнать с помощью команды ifconfig
                virtual_router_id 51
                priority 101 # Для основного сервера с haproxy 101, для резевного 100
                # The virtual ip address shared between the two loadbalancers
                virtual_ipaddress {
                100.100.1.101 # Виртуальный IP, по которому будет доступен keepalived
                }
                track_script {
                check_haproxy
                }
                }
                1. На дополнительном сервере конфигурационный файл будет отличаться параметрами: "state BACKUP" и "priority 100". ( config-keepalived-backup.cfg )
                  global_defs {
                  # Keepalived process identifier

                  lvs_id haproxy_DH
                  }
                  # Script used to check if HAProxy is running
                  vrrp_script check_haproxy {
                  script "killall -0 haproxy"
                  interval 2
                  weight 2
                  }
                  # Virtual interface
                  # The priority specifies the order in which the assigned interface to take over in a failover
                  vrrp_instance VI_01 {
                  state BACKUP # MASTER для основного сервера, BACKUP для резевного
                  interface ens38 # Имя интерфейса можно узнать с помощью команды ifconfig
                  virtual_router_id 51
                  priority 100 # Для основного сервера с haproxy 101, для резевного 100
                  # The virtual ip address shared between the two loadbalancers
                  virtual_ipaddress {
                  100.100.1.101 # Виртуальный IP, по которому будет доступен keepalived
                  }
                  track_script {
                  check_haproxy
                  }
                  }
              7. Для виртуального адреса из примера: 100.100.1.101 создайте A-запись в DNS (В данной инструкции используется и настраивается для server.bal.local). DNS Manager>Forward Lookup Zones>New Host (A or AAAA). По этому адресу в дальнейшем будут доступны сервера Ubuntu c балансировщиком нагрузок HAProxy.

              8. Запустите keepalived командой /etc/init.d/keepalived start. Проверить работоспособность сервиса можно командой: sudo service keepalived status, а команой ip addr show ens33 (имя сетевого интерфейса) можно проверить поднялся ли виртуальный IP адрес.
                Для перезагрузки службы используйте команду: sudo service keepalived restart

              Инструкция по настройки HAProxy методом SSL Passthrough:
              https://support.indeed-company.ru/Knowledgebase/Article/View/balansirovshik-nagruzok-haproxy-keepalived-ssl-passthrough 



              Вложения 
               
               TLSEn.zip (0.47 кБ)
               config-haproxy-Term.cfg (2.59 кБ)
               config-haproxy-Term-TLS.cfg (6.15 кБ)
               config-keepalived-base.cfg (0.95 кБ)
               config-keepalived-backup.cfg (0.95 кБ)
              (10 голос(а))
              Эта статья полезна
              Эта статья бесполезна

              Комментарии (0)
              Добавить новый комментарий
               
               
              Полное имя:
              Email:
              Комментарии: