Logo Craft Homelab Docs Нейросети Хостинг Обучение Контакты
Agentgateway: единый шлюз для LLM-провайдеров и MCP-серверов Трендовые github проекты в нашем телеграм канале. Подпишись →
11 октября 2026 г.

Agentgateway в standalone-режиме: запуск, модель конфигурации и продовые настройки

Когда LLM в команде пользуются многие, ключи провайдеров расползаются по .env-файлам, расход токенов никто не считает, а MCP-серверы каждый подключает сам и с любыми командами. Agentgateway закрывает эти три дыры одной точкой входа: пользователи ходят к моделям и MCP через шлюз, администратор выдаёт ключи, ставит лимиты и видит расход.

Проект написан на Rust в Solo.io, входит в Linux Foundation, исходники открыты на GitHub. Первый тег v0.0.2 вышел в марте 2025 года, актуальный — v1.6.0.

Что умеет шлюз

  • проксирует запросы к LLM-провайдерам;
  • проксирует MCP и A2A (agent-to-agent);
  • управляет трафиком: считает потраченные токены и применяет лимиты, добавляет и удаляет заголовки, проверяет содержимое запросов;
  • маршрутизирует инференс.

Развернуть можно двумя способами: standalone-контейнером или в Kubernetes. Для homelab и небольшой команды хватает первого.

Из альтернатив того же класса есть lunar.dev и MCPJungle. При выборе стоит проверить две вещи, на которых они спотыкаются: работает ли продукт без доступа в интернет и что зашито в docker-образ. В одном из образов нашлись переменные окружения с учётными данными и внешним хостом, на который отправляются логи. Для шлюза, через который идут промпты и ключи, это достаточная причина отказаться.

Запуск в Docker

Пример для версии 1.5.0. Забираем образ и создаём каталог, в котором будут лежать config.yaml и файл базы SQLite:

docker pull cr.agentgateway.dev/agentgateway:v1.5.0
mkdir agw-config

Запускаем контейнер:

docker run -d \
  --name agentgateway \
  --user "$(id -u):$(id -g)" \
  -v "$PWD/agw-config:/config" \
  -p 127.0.0.1:4000:4000 \
  cr.agentgateway.dev/agentgateway:v1.5.0

Порт привязан к 127.0.0.1 намеренно: авторизация в UI ещё не настроена, и публиковать его на всех интерфейсах рано. В логах после старта видно, откуда загружен конфиг и какие порты заняты:

info state_manager loaded config from File("/config/config.yaml")
info state_manager Watching config file: /config/config.yaml
info app serving UI at http://localhost:4000/ui
info management::hyper_helpers listener established address=127.0.0.1:15000 component="admin"
info management::hyper_helpers listener established address=[::]:15020 component="stats"
info proxy::gateway started bind bind="bind/4000"

Три порта: 4000 для трафика и UI, 15000 для admin-интерфейса (слушает только loopback), 15020 для статистики. Строка Watching config file означает, что шлюз следит за изменениями config.yaml.

Дальше открываем http://localhost:4000/ui, на стартовом экране включаем блоки LLM и MCP и жмём Continue.

Пять сущностей конфигурации

Gateway — точка входа: именованный порт и эндпоинты, через которые приходит трафик. Здесь же выбирается протокол (HTTP, HTTPS, TCP, TLS) и подключаются сертификаты.

Listener — слушатель внутри gateway. У каждого gateway есть минимум один. Несколько слушателей нужны, когда у шлюза несколько хостнеймов и для каждого свой TLS-сертификат.

Route обрабатывает и перенаправляет входящий трафик. Маршруты объявляются на верхнем уровне конфига и привязываются к gateway по имени, поэтому один маршрут можно использовать в нескольких gateway.

Backend — куда уходит запрос: IP-адрес, хостнейм, LLM-провайдер или MCP-сервер.

Policy — правила управления трафиком, мониторинга и безопасности. Набор доступных политик и момент их срабатывания зависят от объекта, к которому они привязаны:

ОбъектДоступные политикиКогда срабатывает
Gateway или listenerJWT, внешняя авторизация, внешняя обработка, трансформация, Basic Authentication, API-ключиДо выбора маршрута
RouteВсеПосле выбора маршрута, до выбора бэкенда
BackendBackend TLS, backend-авторизация, backend HTTP и TCP, AI/LLM, MCP-авторизация, внешняя авторизация, изменение заголовков запросаПосле выбора бэкенда

Практическое следствие: проверку API-ключа ставят на gateway, чтобы неавторизованный запрос отсекался до маршрутизации, а настройки конкретной модели или MCP-сервера — на backend.

Провайдеры, модели и MCP

Провайдер добавляется в разделе Providers кнопкой Add provider — список готовых вариантов там длинный. После этого в разделе Models заводится модель и привязывается к созданному провайдеру.

Для MCP-серверов поддерживаются три транспорта: Streamable HTTP, SSE (считается устаревшим) и Command Line.

Настройки, без которых шлюз не стоит выпускать в сеть

OIDC для админки

UI нужен только администраторам: пользователям хватает эндпоинта подключения и MCP. Если есть GitLab или другой OIDC-провайдер, вход настраивается в Settings → OIDC, а список конкретных пользователей с доступом — в Settings → Authorization. До этого шага UI должен оставаться на loopback.

Read-only конфиг

Любое изменение в UI переписывает config.yaml (его текущее содержимое видно в Tools → Raw configuration). Если конфиг лежит в git и раскатывается автоматически, правки через интерфейс создают дрейф. Решение — снять права на запись с файла: шлюз продолжит его читать, а изменить не сможет.

HTTPS

Gateway поддерживает протокол HTTPS и подключение сертификатов. Через шлюз идут API-ключи и содержимое промптов, так что HTTP допустим только на loopback.

sensitiveHeaders

Заголовки с секретами попадают в логи и трассировки, если их явно не перечислить:

config:
  sensitiveHeaders:
    - x-api-key
    - cookie
    - x-tenant-secret

Три детали поведения:

  • поле читается только при старте, после правки шлюз нужно перезапустить;
  • маскировка выполняется дважды — при поступлении запроса и после трансформаций и backend-выражений CEL, поэтому заголовок, созданный трансформацией, тоже будет скрыт;
  • скрывается только вывод трассировки и отладки. На бэкенд уходит реальное значение, и в CEL-выражениях оно по-прежнему читается, так что политики и пользовательские поля логов, завязанные на этот заголовок, продолжают работать.

API-ключи с лимитами

Пользователь получает ключ у администратора шлюза. На каждый ключ задаётся лимит потребления токенов и список разрешённых моделей.

Цены на токены

Для каждой модели задаётся стоимость в USD за четыре типа токенов: input, output, cache read, cache write. Значения правятся в конфиге или переопределяются в UI. Без них лимиты на ключах работают некорректно: шлюзу нечем пересчитать токены в деньги. С заполненными ценами в UI появляются графики потребления.

Порядок внедрения

  1. Поднять контейнер на loopback, завести провайдера и одну модель, проверить запрос через шлюз.
  2. Прописать sensitiveHeaders и перезапустить — до того, как в логах накопятся чужие ключи.
  3. Настроить OIDC и список администраторов, включить HTTPS на gateway, после этого открывать порт наружу.
  4. Заполнить цены моделей, выпустить API-ключи с лимитами и списком моделей.
  5. Подключить MCP-серверы и закрыть config.yaml на запись, если конфиг управляется из репозитория.