ADR-002: Агент подключается к backend
Status: Accepted · Date: 2026-07-03
Контекст
Section titled “Контекст”Backend и агенты должны обмениваться конфигурацией, статусами и статистикой. Кто-то должен быть инициатором соединения.
Решение
Section titled “Решение”Агент устанавливает долгоживущий bidirectional gRPC-стрим к backend (mTLS). Приватный ключ агента генерируется на ноде (CSR при enrollment) и никогда её не покидает. См. Безопасность агента.
Отклонённые альтернативы
Section titled “Отклонённые альтернативы”Backend подключается к агенту (предыдущий дизайн): нода слушает gRPC-порт — management-порт виден при сканировании и выдаёт принадлежность к панели; ноды за NAT требуют проброса; bootstrap требует доставки серверного сертификата и ключа на ноду, из-за чего приватные ключи агентов хранились в БД панели — компрометация панели означала компрометацию всех нод.
Последствия
Section titled “Последствия”- (+) Нода снаружи выглядит как обычный веб-сервер: только порты инбаундов.
- (+) Bootstrap — два значения: адрес backend + одноразовый токен.
- (+) Живость соединения = живость стрима; отдельный heartbeat-протокол не нужен.
- (−) Backend должен держать N открытых стримов (дёшево при целевых масштабах).
- (−) Горизонтальное масштабирование backend потребует балансировки стримов (решаемо, отложено).