Архитектура master–minion

Тема дорожной карты · SaltStack

Архитектура master–minion — базовая топология Salt: центральный демон salt-master управляет агентами salt-minion, установленными на каждой машине парка. Ключевая особенность, из которой вытекают почти все свойства Salt, — направление соединения: миньоны сами подключаются к мастеру и держат соединение постоянно. Мастеру не нужен ни SSH-доступ к хостам, ни открытые порты на них — наоборот, это миньоны «звонят домой». Отсюда скорость (команда уходит по уже установленному каналу), проходимость через NAT и firewall'ы (наружу от миньона нужны только два порта мастера) и возможность миньона мгновенно сообщать о событиях наверх.

Как это работает

Мастер слушает два порта. 4505 — publish-канал: сюда мастер публикует задания, и все подключённые миньоны их получают. Каждый миньон сам решает, попадает ли он под таргет (salt 'web*' state.apply — миньоны сверяют свой id и grains с выражением web*), и лишь затем выполняет работу локально. 4506 — request/return-канал: по нему миньоны возвращают результаты и запрашивают у мастера файлы и pillar-данные. Транспорт по умолчанию — ZeroMQ; есть альтернативы (TCP, websocket).

Безопасность двухслойная: при первом подключении миньон отправляет мастеру свой публичный RSA-ключ, и администратор явно принимает его командой salt-key -a <id> (или -A для всех ожидающих). После установления доверия рабочий трафик шифруется AES-ключом, который мастер раздаёт по защищённому RSA-каналу. Важное следствие модели: выполняет работу не мастер, а сам миньон — мастер только публикует задание и собирает результаты, поэтому нагрузка распределяется по парку.

Когда применять

Классический master–minion — режим по умолчанию для парка от десятков машин: полный контроль, максимальная скорость, работает событийная модель. Когда одного мастера мало, архитектура расширяется: multi-master даёт отказоустойчивость (миньоны знают несколько мастеров), syndic строит иерархию «мастер мастеров» для георазнесённых площадок. Для машин, куда агент поставить нельзя или не хочется, есть два обходных пути: salt-ssh выполняет команды по SSH без миньона (список хостов — в roster-файле), а proxy minions управляют сетевым оборудованием и прочими устройствами через их API. Наконец, salt-call --local на самом миньоне позволяет применять состояния вообще без мастера (masterless) — удобно для отладки и иммутабельных образов.

Типичные ошибки

Самая опасная практика — бездумный salt-key -A в автоматизации: приняв ключ чужого миньона, вы отдадите ему pillar-данные его таргета; в проде проверяйте отпечатки ключей (salt-key -f). Вторая ошибка — считать мастер безобидным вспомогательным сервисом: это точка полного контроля над парком, компрометация мастера равна компрометации всех миньонов, поэтому доступ к нему ограничивают жёстче всего. Третья — забыть открыть исходящие 4505/4506 от миньонов к мастеру и часами искать «почему миньон не отвечает». И учитывайте единую точку отказа: пока мастер лежит, push-команды не работают — для критичных сред закладывайте multi-master заранее.

Связанные понятия

Полезные ресурсы

Проверить знания (2)

Загрузка вопросов…