Архитектура
Gateway отделяет централизованное управление, намерения и идентификацию ресурсов от выполнения операций непосредственно на хостах. Благодаря этому вы можете управлять инфраструктурой из одного места, не открывая управляющие интерфейсы хостов в сеть.
flowchart TB
users["Пользователи и автоматизация"] -->|"HTTPS / WebSocket"| gateway["Приложение Gateway"]
gateway <-->|"Долговременное состояние и координация"| state[("PostgreSQL / Redis")]
gateway <-->|"Аутентифицированный служебный канал"| relay["Gateway Relay<br/>TCP 9443"]
subgraph hosts["Управляемые хосты"]
direction LR
daemons["Ролевые демоны<br/>nginx · Docker · Databases · Build Worker · Monitoring"]
workloads["Приватные адреса приложений и баз данных"]
daemons -.->|"Жизненный цикл на хосте"| workloads
end
relay <-->|"Исходящие управляющие сеансы"| daemons
relay <-->|"Приватные потоки данных"| workloads
Полезная нагрузка передаётся напрямую между Relay и локальными адресами приложений или баз данных. Gateway авторизует и координирует эти пути, но само приложение Gateway не участвует в передаче полезной нагрузки.
Плоскость управления
Заголовок раздела «Плоскость управления»Приложение Gateway образует контур управления. В его зоне ответственности находятся пользователи, группы, области доступа, определения ресурсов, желаемое состояние, записи аудита, зашифрованные учётные данные интеграций, состояние длительных операций и решения по восстановлению. PostgreSQL служит долговременным источником истины для этих данных. Redis обеспечивает необходимую кратковременную координацию — сеансы, кэши, очереди, ограничения частоты запросов и ограниченные резервирования, — но не заменяет долговременное состояние ресурсов.
Операторы и системы автоматизации передают свои намерения в контур управления через Operations Console, REST API, OAuth, удалённый MCP или AI Workspace. Все эти точки входа используют одинаковые серверные проверки авторизации, валидации, доступности функций по тарифу, владения и жизненного цикла. Скрытие действия в UI не создаёт границу безопасности, а обращение через API или AI-инструмент не позволяет обойти правила продукта.
Принятый запрос не считается доказательством того, что работа на хосте завершена. Изменения, для которых нужен демон, сохраняются и отправляются как ограниченные операции. Ответственный демон сообщает ход выполнения и наблюдаемое состояние, а Gateway показывает долговременные Tasks, состояние ресурса, события и журналы. По этим данным оператор может подтвердить, что фактическое состояние сошлось с желаемым.
Relay — обязательная долговременная служба контура данных и единственный публичный владелец 9443/tcp. Управляемые демоны устанавливают исходящие соединения через аутентифицированный транспорт; обычно их управляющие интерфейсы не открыты в сеть. Служба приёма gRPC-соединений приложения Gateway остаётся внутренней, а взаимодействие с Relay проходит через аутентифицированную межсервисную границу.
Relay передаёт управляющий трафик управляемых нод и поддерживаемые приватные потоки. При этом Relay не отвечает за конфигурацию nginx, Containers, базы данных, сборки или мониторинг на целевом хосте. Он также не создаёт правила межсетевого экрана, не обеспечивает обход NAT и не работает как универсальный VPN. Каждый управляемый хост должен иметь доступ к назначенному адресу Relay.
Если Relay недоступен, новые операции с управляемыми нодами и новые подключения приватных связей отклоняются по безопасному принципу: Gateway не может подтвердить идентичность и авторизацию. Ранее применённые рабочие нагрузки могут продолжать работать локально. Существующие сеансы контура данных сохраняются только там, где это допускают протокол и жизненный цикл авторизации; работающий процесс приложения сам по себе не означает, что управляющий путь восстановлен.
Управляемые демоны
Заголовок раздела «Управляемые демоны»У каждого управляемого демона есть ограниченная роль и собственная идентичность. Профили Ingress, Docker, Databases, Build Worker, Monitoring и Relay предоставляют разные возможности и имеют разные границы доверия. Docker-демон не может стать демоном базы данных только потому, что клиент изменил запрос, а пользовательские API жизненного цикла не могут изменять внутренние Containers, принадлежащие Gateway.
Демоны сообщают о доступных возможностях, инвентаре, состоянии, метриках, служебных адресах и результатах операций. На основании этих отчётов Gateway решает, может ли хост безопасно выполнить действие. Одного наличия установленных пакетов недостаточно: демон должен подтвердить, что функция доступна и работоспособна. Если нода отключена или отчёт о возможностях устарел, данные для чтения могут оставаться доступными из очищенного снимка, но изменения, которым требуется актуальное состояние хоста, отклоняются.
Демон отвечает за выполнение на своём хосте: например, nginx применяет конфигурацию, Docker управляет объектами среды выполнения, а нода баз данных запускает движки баз данных. Gateway отвечает за долговременную идентичность и желаемую конфигурацию управляемых ресурсов. Такое разделение позволяет рабочей нагрузке продолжать работу при временном сбое контура управления, но не позволяет хосту самостоятельно создавать новое авторизованное состояние.
Плоскость данных
Заголовок раздела «Плоскость данных»Публичный трафик приложений обслуживают ноды Ingress с nginx. Domain определяет размещение, Route задаёт поведение трафика, а Gateway передаёт сертификат только тем нодам, где включены использующие его TLS Routes. Поэтому nginx относится к контура данных, а записи Domain, Route, сертификата, доступа и желаемого состояния остаются в контура управления.
Для приватных путей используются узкие специализированные механизмы, а не единая плоская сеть. Secure Link между nginx и рабочей нагрузкой использует принадлежащий Gateway коннектор и транспорт Relay. Привязка управляемой базы данных использует отдельную идентичность движка и службу приёма соединений, которой управляет целевой Docker-демон в приватной сети конкретной привязки. Оба механизма обеспечивают приватное подключение, но имеют разные зоны ответственности и способы диагностики.
Gateway Inference образует ещё одну отдельную контур данных. Контролируемое ядро вывода обращается к поставщикам и доступно через прокси Gateway. Опубликованные идентификаторы моделей, подключения поставщиков, пользовательские лимиты, учёт и авторизация остаются в зоне ответственности контура управления Gateway.
Эксплуатационные границы
Заголовок раздела «Эксплуатационные границы»Чтобы определить ответственный за сбой уровень, начните со страницы ресурса и долговременной истории операций. Сохранённое желаемое состояние при отключённой ноде указывает прежде всего на хост, демон, системное время, DNS, идентичность сертификата или соединение с Relay. Подключённая нода с неуспешной Task указывает на среду выполнения или предварительное условие конкретной роли. Работоспособная среда выполнения при неудачном публичном запросе указывает на цепочку Domain, TLS, Route, Secure Link или на само приложение.
Не пытайтесь исправить нарушение владения прямым редактированием внутренних дочерних объектов. Слоты Deployment управляются через Deployment, Containers и сети Compose — через Compose Project, Secure Links конкретного Route следуют за этим Route, а идентичности управляемых баз данных — за жизненным циклом привязки. Прямое изменение на хосте может создать расхождение, которое Gateway не сможет безопасно устранить.
Модель отказов
Заголовок раздела «Модель отказов»Пока нода отключена, представления для чтения могут использовать очищенные снимки последнего известного состояния. Эти данные помогают диагностике, но не подтверждают текущую авторизацию. Изменения остаются недоступными, если Gateway не может доказать владение, наличие нужной возможности, доступность функции по тарифу или актуальное состояние.
Желаемое состояние и записи операций хранятся долговременно, поэтому Gateway может согласовать состояние после перезапуска приложения, Relay, демона или ноды. При восстановлении сначала верните в работу ответственный за сбой компонент, дождитесь свежего инвентаря и отчёта о возможностях, затем проверьте каждое семейство зависимых ресурсов. Не удаляйте и не создавайте идентичности заново первым действием: это может отозвать права, нарушить связи или помешать прежнему демону безопасно переподключиться.
Подробная матрица отказов для каждого пути — включая различие между работающим Relay, локальным Relay на потерянном хосте Gateway и независимым внешним Relay — приведена в разделе Доступность, совместимость и пределы.
