Настройка режима мульти-мастер с автоматическим переключением (failover)

Режим мульти-мастер с автоматическим переключением (failover) используется для бесперебойного обслуживания большого количества устройств в инфраструктуре.

При стандартном подключении агент (minion) получает открытый ключ проверки от сервера управления (master) и, в случае сбоя сети или оборудования, выдает ошибку и завершает работу. В режиме мульти-мастер с автоматическим переключением (failover) при неисправности одного сервера управления (master) агент (minion) переключается на следующий и продолжает работу.

Чтобы настроить режим мульти-мастер с автоматическим переключением (failover), необходимо:

Подробную информацию о режиме мульти-мастер с автоматическим переключением (failover) см. в официальной документации.

Настройка подписи открытого ключа на серверах управления (masters)

  1. Cоздайте файл конфигурации сервера управления (master) /etc/salt/master.d/master_sign_pubkey.conf.

  2. В конфигурационном файле сервера управления (master) включите настройку подписи всех открытых ключей, установив значение параметра:

    master_sign_pubkey: True
  3. Перезапустите службу salt-master. После перезапуска сервер управления (master) автоматически создаст новую пару ключей:

    master_sign.pem
    master_sign.pub
  4. (Опционально) задайте имя для пары ключей подписи, установив значение параметра:

    master_sign_key_name: <name_without_suffix>

Сервер управления (master) создаст эту пару ключей при перезапуске и будет использовать ее для создания подписи открытых ключей, прикрепленной к ответу аутентификации.

Вычисления выполняются для каждого запроса аутентификации агента (minion). Если большое количество агентов (minions) часто аутентифицируются, рекомендуется использовать настройки conf_master:master_pubkey_signature и conf_master:master_use_pubkey_signature, описанные ниже.

Если используются несколько серверов управления (masters), и они должны подписывать свои ответы аутентификации, пара ключей master_sign.* должна быть скопирована на каждый сервер управления (master). В противном случае агент (minion) не сможет проверить открытые ключи сервера управления (master) при подключении к другому серверу управления (master), так как подпись открытых ключей была создана с другой парой ключей.

Настройка параметров оптимизации производительности работы сервера управления (master)

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

Чтобы избежать высокой нагрузки, сервер управления (master) может использовать созданную заранее подпись публичного ключа. Такая подпись сохраняется в виде строки в кодировке Base64, которую сервер управления (master) читает один раз при запуске и прикрепляет только эту строку к ответам аутентификации.

Включение этого параметра также дает пользователям возможность иметь пару ключей подписи в системе, отличной от текущего сервера управления (master), и создавать там подпись с открытыми ключами. Вероятно, в системе с более строгими правилами брандмауэра, без доступа в Интернет и с меньшим количеством пользователей.

Чтобы создать такую подпись, выполните команду:

salt-key --gen-signature

В директории сервера управления (master) pki будет создан файл с подписью по умолчанию:

/etc/salt/pki/master/master_pubkey_signature

Это простой текстовый файл с двоичной подписью, преобразованной в base64. Если пара подписи еще не существует, пара подписи и файл подписи будут автоматически созданы за один вызов:

salt-key --gen-signature --auto-create

Чтобы сервер управления (master) использовал пересозданную подпись, установите значение параметра:

master_use_pubkey_signature: True

Для этого в каталоге сервера управления (master) pki должен присутствовать файл master_pubkey_signature с правильной подписью. Если у файла будет другое имя, задайте его, указав значение параметра:

master_pubkey_signature: <filename>

При наличии большого количества серверов управления (masters) и открытых ключей (по умолчанию и для подписи) рекомендуется использовать имя хоста salt-masters для имен файлов подписи. Подписи легко перепутать, поскольку они не несут никакой информации о ключе, из которого была создана подпись.

Настройка проверки подписи открытых ключей на агентах (minions)

  1. Скопируйте открытый ключ (по умолчанию master_sign.pub) с сервера управления (master) в каталог агента (minion) pki:

    /etc/salt/pki/minion/master_sign.pub
    Для проверки подписи агент (minion) должен иметь доступ только к открытому ключу. Нельзя копировать файл master_sign.pem. Он должен храниться только на сервере управления (master).
  2. Включите проверку подписи открытого ключа на агенте (minions) — в конфигурационном файле агента (minion) задайте значение параметра:

    verify_master_pubkey_sign: True
  3. Перезапустите агента (minion).

При необходимости вы можете запускать проверку для каждой попытки аутентификации, которые могут выполняться довольно часто. Например, только запуск агента (minion) инициирует 6 проверок подписи: для аутентификации, майнинга, highstate и т. д. Для этого включите настройку:

always_verify_signature: True

Включение режима мульти-мастер с автоматическим переключением (failover) на агенте (minion)

  1. Задайте список адресов серверов управления (masters):

    master:
        - 172.16.0.10
        - 172.16.0.11
        - 172.16.0.12

    В случае сбоев агент (minion) будет выполнять подключение к серверам управления (masters) по очереди в указанном порядке.

  2. (Опционально) чтобы подключение выполнялось в случайном порядке, а не в порядке, указанном в параметре master, установите значение параметра:

    random_master: True
  3. Задайте тип сервера управления (masters):

    master_type: failover

    Первый сервер управления (master), принявший агента (minion), будет использоваться агентом (minion).

  1. (Опционально) укажите временной интервал в секундах, через который будет выполняться проверка подключения агента (minion) к серверу управления (master), установив значение параметра:

    master_alive_interval: <seconds>

Если будет установлена потеря связи, агент (minion) временно удалит сервер управления (master) из списка и попробует подключиться к другому серверу управления (master), выбрав следующий в порядке очереди или случайным образом, в зависимости от заданных настроек.