В этой статье:

Шаг 1. Получение корневого сертификата

Шаг 2. Настройка взаимодействия кластера BI-серверов с балансировщиком нагрузки

Шаг 3. Настройка взаимодействия кластера серверов управления сессиями с балансировщиком нагрузки

Шаг 4. Настройка взаимодействия балансировщика нагрузки с кластером BI-серверов и кластером серверов управления сессиями

Особенности использования балансировщиков нагрузки

Создание кластера серверов управления сессиями

Кластер серверов управления сессиями обеспечивает отказоустойчивость менеджера сессий. При формировании контура промышленной эксплуатации кластер BI-серверов взаимодействует с кластером серверов управления сессиями через балансировщик нагрузки:

mTLS-соединение устанавливается между кластером BI-серверов (клиентом) и балансировщиком нагрузки (сервером), между балансировщиком нагрузки (клиентом) и кластером серверов управления сессиями (сервером). Отношения между элементами системы двусторонние: каждый элемент должен предъявить сертификаты безопасности, подписанные общим корневым сертификатом, для формирования единого пространства доверия.

Для получения подробной информации об алгоритме взаимодействия элементов системы обратитесь к разделу «Конфигурация системы».

Для создания кластера серверов управления сессиями:

  1. Установите менеджер сессий на несколько серверов в ОС Linux.

  2. Установите балансировщик нагрузки в соответствии с официальной документацией HAProxy, nginx. Дистрибутив установки HAProxy доступен для скачивания на официальном сайте HAProxy, при необходимости можно использовать официальный репозиторий на GitHub.

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

Шаг 1. Получение корневого сертификата

Получите и разместите корневой сертификат ca.crt в папках:

Импортируйте корневой сертификат в хранилище доверенных корневых центров сертификации. Для получения подробной информации обратитесь к разделу «Менеджер сессий».

Для обеспечения доверия между элементами системы используйте полученный корневой сертификат для подписания сертификатов безопасности в шагах 2, 3, 4.

Шаг 2. Настройка взаимодействия кластера BI-серверов с балансировщиком нагрузки

Для настройки взаимодействия кластера BI-серверов с балансировщиком нагрузки:

  1. Получите сертификат клиента fp-sesman-client.crt и его закрытый ключ fp-sesman-client.key. Убедитесь, что сертификат подписан корневым сертификатом, полученным в шаге 1.

  2. Разместите сертификат клиента и его закрытый ключ в папке /opt/foresight/ssl.

  3. Задайте адрес балансировщика нагрузки и пути до сертификатов безопасности в подразделе SessionServer в файле settings.xml или реестре:

<Key Name="System">
  <Session UseSessionServer="1" />
  <SessionServer Host="<балансировщик нагрузки>" Port="<номер порта>" CheckSessionAliveInterval="10">
    <State SaveObjectState="1" ObjectStateSaveInterval="30"></State>
    <Ssl RootCertificateFile="/opt/foresight/ssl/ca.crt" ClientCertificateFile="/opt/foresight/ssl/fp-sesman-client.crt" ClientKeyFile="/opt/foresight/ssl/fp-sesman-client.key"></Ssl>
  </SessionServer>
</Key>

Где:

  1. Перезапустите BI-сервер.

Повторите действия на каждом BI-сервере в кластере. После чего будет настроено взаимодействие кластера BI-серверов с балансировщиком нагрузки.

Шаг 3. Настройка взаимодействия кластера серверов управления сессиями с балансировщиком нагрузки

Для настройки взаимодействия кластера серверов управления сессиями с балансировщиком нагрузки:

  1. Получите сертификат сервера server.crt и его закрытый ключ server.key. Убедитесь, что сертификат подписан корневым сертификатом, полученным в шаге 1.

  2. Разместите сертификат сервера и его закрытый ключ в папке /opt/foresight/fp10.x-sesman/etc/ssl.

  3. Убедитесь, что в группе параметров ssl в файле config.yaml заданы корректные пути до сертификатов безопасности. По умолчанию используются следующие значения параметров:

ssl:
  rootCertificateFile: /opt/foresight/fp10.x-sesman/etc/ssl/ca.crt
  serverCertificateFile: /opt/foresight/fp10.x-sesman/etc/ssl/server.crt
  serverKeyFile: /opt/foresight/fp10.x-sesman/etc/ssl/server.key

При изменении файла config.yaml перезапустите службу sesman:

sudo systemctl restart sesman

Повторите действия в каждом менеджере сессий в кластере. После чего будет настроено взаимодействие кластера серверов управления сессиями с балансировщиком нагрузки.

Шаг 4. Настройка взаимодействия балансировщика нагрузки с кластером BI-серверов и кластером серверов управления сессиями

Балансировщик нагрузки используется в двух ролях: в роли сервера для кластера BI-серверов и в роли клиента для кластера серверов управления сессиями.

Для настройки взаимодействия балансировщика нагрузки с кластером BI-серверов и кластером серверов управления сессиями:

  1. Сгенерируйте закрытый ключ:

  2. Создайте запросы на выпуск сертификатов безопасности:

  3. Подпишите запросы общим корневым сертификатом, полученным в шаге 1.

  4. Объедините сертификат сервера и его закрытый ключ в файл haproxy.pem/nginx.pem, сертификат клиента и его закрытый ключ в файл client.pem.

  5. Разместите сертификаты безопасности в папке:

  1. Измените конфигурационный файл:

Пример файла /etc/haproxy/haproxy.cfg с минимально необходимыми настройками:

global
    log /dev/log local0
    maxconn 4096
    user haproxy
    group haproxy
    daemon
 
defaults
    log global
    mode http
    option httplog
    option dontlognull
    timeout connect 5s
    timeout client 50s
    timeout server 50s
 
frontend sesman_frontend
    bind *:11000 ssl crt /etc/haproxy/ssl/haproxy.pem ca-file /etc/haproxy/ssl/ca.crt verify required alpn h2
    mode http
    default_backend sesman_backend
 
backend sesman_backend
    mode http
    balance roundrobin
    option http-server-close
    server sesman1 <IP-адрес или DNS-имя менеджера сессий 1>:<номер порта 1> ssl ca-file /etc/haproxy/ssl/ca.crt crt /etc/haproxy/ssl/client.pem verify required alpn h2 check
    server sesman2 <IP-адрес или DNS-имя менеджера сессий 2>:<номер порта 2> ssl ca-file /etc/haproxy/ssl/ca.crt crt /etc/haproxy/ssl/client.pem verify required alpn h2 check
    ...
    server sesmanN <IP-адрес или DNS-имя менеджера сессий N>:<номер порта N> ssl ca-file /etc/haproxy/ssl/ca.crt crt /etc/haproxy/ssl/client.pem verify required alpn h2 check

В разделе frontend sesman_frontend укажите путь до сертификата сервера и корневого сертификата. В разделе backend sesman_backend задайте адреса менеджеров сессий, укажите путь до корневого сертификата и сертификата клиента. Для получения подробной информации о настройках в файле haproxy.cfg обратитесь к официальной документации HAProxy.

Для применения изменения конфигурации балансировщика нагрузки перезапустите службу haproxy:

sudo systemctl restart haproxy

Пример файла /etc/nginx/nginx.conf с минимально необходимыми настройками:

upstream sesman_backend {
    least_conn;
    server <IP-адрес или DNS-имя менеджера сессий 1>:<номер порта 1>;
    server <IP-адрес или DNS-имя менеджера сессий 2>:<номер порта 2>;
    ...
    server <IP-адрес или DNS-имя менеджера сессий N>:<номер порта N>;
}
 
server {
    listen 11010 ssl;
    http2 on;
 
    # Сертификат сервера
    ssl_certificate     /etc/nginx/ssl/nginx.pem;
    ssl_certificate_key /etc/nginx/ssl/nginx.pem;
 
    # Настройки mTLS для взаимодействия с кластером BI-серверов
    ssl_client_certificate /etc/nginx/ssl/ca.crt;
    ssl_verify_client on;
    ssl_verify_depth 2;
 
    location / {
        grpc_pass grpcs://sesman_backend;
        grpc_ssl_name sesman;
 
        # Проверка сертификатов безопасности через корневой сертификат
        grpc_ssl_trusted_certificate /etc/nginx/ssl/ca.crt;
        grpc_ssl_verify on;
        grpc_ssl_verify_depth 2;
 
        # Сертификат клиента
        grpc_ssl_certificate /etc/nginx/ssl/client.pem;
        grpc_ssl_certificate_key /etc/nginx/ssl/client.pem;
 
        grpc_socket_keepalive on;
        grpc_set_header Host $host;
        grpc_set_header X-Real-IP $remote_addr;
        grpc_connect_timeout 5s;
        grpc_read_timeout 60s;
        grpc_send_timeout 60s;
    }
}

В разделе upstream sesman_backend задайте адреса менеджеров сессий. В разделе server укажите путь до сертификата сервера, корневого сертификата и сертификата клиента. Для получения подробной информации о настройках в файле nginx.conf обратитесь к официальной документации nginx.

Для применения изменения конфигурации балансировщика нагрузки перезапустите службу nginx:

sudo systemctl restart nginx

После выполнения действий будет настроено взаимодействие балансировщика нагрузки с кластером BI-серверов и кластером серверов управления сессиями.

Алгоритм соединения BI-сервера с балансировщиком нагрузки по протоколу mTLS:

  1. BI-сервер подключается к балансировщку нагрузки по указанному IP-адресу или DNS-имени сервера, на котором установлен балансировщик нагрузки.

  2. Балансировщик нагрузки отправляет сертификат сервера haproxy.pem/nginx.pem BI-серверу.

  3. BI-сервер проверяет полученный сертификат сервера с помощью корневого сертификата ca.crt. Если сертификат сервера подписан корневым сертификатом, действителен на момент его использования, IP-адрес или DNS-имя сервера совпадает с параметрами сертификата CN или SAN, то BI-сервер отправляет сертификат клиента fp-sesman-client.crt балансировщику нагрузки.

  4. Балансировщик нагрузки проверяет полученный сертификат клиента с помощью корневого сертификата ca.crt.

Алгоритм соединения балансировщика нагрузки с менеджером сессий по протоколу mTLS:

  1. Балансировщик нагрузки подключается к менеджеру сессий по указанному IP-адресу или DNS-имени сервера, на котором установлен менеджер сессий.

  2. Менеджер сессий отправляет сертификат сервера server.crt балансировщику нагрузки.

  3. Балансировщик проверяет полученный сертификат сервера с помощью корневого сертификата ca.crt. Если сертификат сервера подписан корневым сертификатом, действителен на момент его использования, то балансировщик нагрузки отправляет сертификат клиента client.pem менеджеру сессий.

  4. Менеджер сессий проверяет полученный сертификат клиента с помощью корневого сертификата ca.crt.

После успешной проверки сертификатов безопасности устанавливается защищённое соединение между элементами системы по протоколу mTLS.

Особенности использования балансировщиков нагрузки

В HAProxy используется настройка «verify required» в разделах frontend sesman_frontend и backend sesman_backend, указание настройки в разделе backend sesman_backend не обязательно, проверка параметра CN не выполняется.

В nginx по умолчанию проверяется параметр CN, заданный в сертификате сервера. Значение параметра CN должно совпадать со значением параметра «grpc_ssl_name». В каждом менеджере сессий при генерации сертификатов безопасности должен быть указано общее значение параметра CN, например, «sesman».

Если авторизация пользователя в веб-приложении выполняется с ошибкой, то используйте файл с логами /var/log/nginx/error.log. В файле содержатся только успешно пройденные проверки сертификатов. Ошибки «upstream SSL certificate does not match» или «No route to host» указывают на проблемы с сертификатами или сетью.

См. также:

Настройка отказоустойчивости системы | Менеджер сессий | Сервер состояний