Введение

С версии 1.1 добавлены ограничения на подключение к СУБД PostgreSQL со сторонних хостов в схеме работы с резервированием: подключение будет допускаться только с адресов, на которых развернуты ноды NAICE. В схеме одиночной установки (stand alone) доступ к БД со стороны внешних адресов будет полностью закрыт.

Аутентификация клиентов СУБД PostgreSQL управляется конфигурационным файлом, который называется pg_hba.conf и расположен в каталоге с данными кластера базы данных.

HBA расшифровывается как host-based authentication — аутентификации по имени узла.

Файл pg_hba.conf определяет, кто с каких адресов сможет подключиться к базе данных.

Общие рекомендации по содержимому pg_hba.conf:

  1. Разрешить локальные подключения внутри контейнера, которые будут использоваться для отладки или устранения проблем.
  2. Разрешить подключения внутри сети контейнеров, чтобы другие контейнеры могли подключиться к БД.
  3. Внешние подключения для сервисов разрешить только с адресов установки нод NAICE, чтобы разрешить подключения для нормального функционирования NAICE в схеме с резервировоанеим.
  4. Разрешить подключения по учётным данным, используемых для репликации между нодами кластера СУБД.
  5. Запретить подключения с любых других не доверенных адресов.

Состояние NAICE 1.0

Файл pg_hba.conf содержал универсальную конфигурацию и сразу присутствовал в образе.

На этапе разворота базы данных он никак не модифицировался.

Путь до файла:

Состояние NAICE 1.1

Путь до файла в контейнере не изменился /bitnami/repmgr/conf/pg_hba.conf

При развороте кластера из 2-ух узлов

Файл pg_hba.conf не присутствует в образе по умолчанию.

Он формируется в процессе разворота кластера и помещается по пути /<папка установки NAICE>/postgres/

В этот момент в файл подставляются актуальные адреса узлов кластера, указанные в ходе установки NAICE. Подробнее: v1.1_3.4 Установка с резервированием (c использованием VRRP) или v1.1_3.5 Установка с резервированием (без использования VRRP).

Пример содержимого файла после установки кластера:

# Доступ пользователю postgres без пароля во время аутентификации только внутри контейнера
# При первом старте контейнера пользователь postgres создается без пароля, потом назначается в ходе инициализации
local all postgres trust
host all postgres 127.0.0.1/32 trust

# Локальные подключения внутри контенера по логину/паролю
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256

# Внешние подключения для сервисов только с адресов установки кластера найс и VIP адреса
host all all <IP-адрес первой ноды NAICE>/32 scram-sha-256
host all all <IP-адрес второй ноды NAICE>/32 scram-sha-256
host all all <VIP-адрес, используемый протоколом VRRP>/32 scram-sha-256 # Будет добавлен только при установки в схеме с резервированием с использованием VRRP.


# Внешние подключения для репликации
# Доступ до БД replication - для физической репликации данных
# Доступ до БД repmgr - для управления репликацией с помощью repmgr
# Доступ безпарольный, так как repmgr обращается по ключевому доступу
host repmgr repmgr <IP-адрес первой ноды кластера СУБД PostgreSQL>/32 trust
host repmgr repmgr <IP-адрес второй ноды кластера СУБД PostgreSQL>/32 trust
host replication repmgr <IP-адрес первой ноды кластера СУБД PostgreSQL>/32 trust
host replication repmgr <IP-адрес второй ноды кластера СУБД PostgreSQL>/32 trust

# Подключения для сервисов подключаемых с этого же хоста
host repmgr repmgr samenet scram-sha-256
host replication repmgr samenet scram-sha-256
host all all samenet scram-sha-256

# Все остальные подключения блокировать
host    all             all             0.0.0.0/0               reject


В docker-compose.repmgr.yml файл явно монтируется следующим образом

    volumes:
      - ./postgres/pg_hba.conf:/bitnami/repmgr/conf/pg_hba.conf:ro

При развороте кластера из 4-ех узлов

Логика работы не меняется, с той разницой, что адреса будут отличаться

При развороте одного узла

Файл pg_hba.conf содержит универсальную конфигурацию и сразу присутствует в образе:

# For DB Init
local all postgres trust
host all postgres 127.0.0.1/32 trust

# Локальные подключения внутри контенера по логину/паролю
local all all scram-sha-256
host all all 127.0.0.1/32 scram-sha-256

# Подключения для сервисов подключаемых с этого же хоста
host all all samenet scram-sha-256

# Все остальные подключения блокировать
host    all             all             0.0.0.0/0               reject

Процесс обновления 1.0 → 1.1

Если при эксплуатации версий 1.0 и ниже содержимое файла pg_hba.conf не изменялось и он не монтировался явно - ничего делать не нужно.

При работе Ansible Playbook все содержимое файлов docker-compose.repmgr.yml и docker-compose.yml будет приведено в соответствие версии 1.1.

Если вы содержимое файла pg_hba.conf изменялось и он монтировался явно, - необходимо до начала установки 1.1 сохранить его за пределами директории установки NAICE (по умолчанию /etc/docker-naice).

После обновления открыть новый файл /<папка установки NAICE>/postgres/pg_hba.conf и внести туда ранее сделанные изменения, если в этом ещё есть необходимость.

После этого перезапустить контейнеры БД, последовательно: сначала на 2-й ноде кластера СУБД, потом на 1-й:

sudo docker compose -f docker-compose.repmgr.yml stop && sudo docker compose -f docker-compose.repmgr.yml up -d