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

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

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

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

Мастер слушает два порта. 4505 — publish-канал, по которому мастер публикует задания, и все подключённые миньоны их получают. Каждый миньон сверяет свой id и grains с таргетом и выполняет работу локально. 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: принятие ключа чужого миньона может привести к компрометации данных. В продакшн-среде проверяйте отпечатки ключей (salt-key -f). Вторая ошибка — считать мастер безобидным сервисом: компрометация мастера равна компрометации всех миньонов, поэтому доступ к нему ограничивают строго. Третья ошибка — забыть открыть исходящие порты 4505/4506 от миньонов к мастеру, что приводит к проблемам с соединением. Учитывайте единую точку отказа: пока мастер лежит, push-команды не работают — для критичных сред закладывайте multi-master заранее.

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

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

🔤 Английские термины в этой теме

Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.

Весь словарь терминов →