Проблема: управление API без централизованного шлюза
Микросервисная архитектура быстро разрастается: появляются десятки эндпоинтов, дублируется аутентификация, rate limiting в каждом сервисе реализован по-своему, мониторинг разрознен. Мы не раз видели, как команды тратят недели на согласование форматов логов и правил безопасности. Kong API Gateway — open-source решение на базе nginx/OpenResty — централизует эти задачи: маршрутизация, плагины (JWT, rate limiting, CORS, prometheus) и декларативная конфигурация. За 7+ лет мы внедрили Kong более чем в 50 проектах, от стартапов до enterprise.
Какие проблемы решаем
- Раздутая аутентификация: в каждом микросервисе свой JWT-парсер — дублирование кода и баги. Kong берёт аутентификацию на себя, проверяет JWT на входе и передаёт внутренние заголовки. Это сокращает код сервисов и повышает безопасность.
- Rate limiting «на коленке»: лимиты в коде негибкие, их сложно менять без деплоя. Kong поддерживает rate limiting с Redis — до 100 000 запросов в минуту на consumer, с разными политиками (локальная, redis, cluster).
- Отсутствие observability: без единой точки сложно собрать метрики. Kong экспортирует в Prometheus количество запросов, задержки (p50/p99), статусы — сразу в Grafana.
Как Kong решает проблему дублирования аутентификации?
Kong выступает единой точкой входа: все запросы сначала проходят через шлюз, где проверяется JWT. Если токен валидный, Kong добавляет заголовки (x-consumer-id, x-user-id) и передаёт запрос в микросервис. Сервис может доверять этим заголовкам, не реализуя собственную проверку. Это сокращает дублирование кода на 40% и снижает вероятность ошибок безопасности.
Как мы настраиваем Kong под ключ
Используем Kong 3.x (актуальная версия) с PostgreSQL или DB-less режимом. Ниже — типовой стек:
version: '3.8'
services:
kong-db:
image: postgres:15
environment:
POSTGRES_DB: kong
POSTGRES_USER: kong
POSTGRES_PASSWORD: kong_password
kong-migration:
image: kong:3.5
command: kong migrations bootstrap
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong_password
depends_on:
- kong-db
kong:
image: kong:3.5
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-db
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong_password
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
ports:
- "8000:8000"
- "8443:8443"
- "8001:8001"
depends_on:
- kong-migration
Командами Admin API создаём сервисы, роуты и плагины. Пример: настройка JWT и rate limiting на сервис users-api.
# Создать upstream-сервис
curl -X POST http://localhost:8001/services \
-d name=users-api \
-d url=http://users-service:3000
# Создать роут
curl -X POST http://localhost:8001/services/users-api/routes \
-d 'paths[]=/api/v1/users' \
-d 'strip_path=false'
# JWT плагин
curl -X POST http://localhost:8001/services/users-api/plugins \
-d name=jwt
# Rate limiting с Redis
curl -X POST http://localhost:8001/plugins \
-d name=rate-limiting \
-d config.minute=100 \
-d config.hour=5000 \
-d config.policy=redis \
-d config.redis_host=redis \
-d config.redis_port=6379 \
-d config.limit_by=consumer Пример декларативной конфигурации (DB-less)
_format_version: "3.0"
services:
- name: users-api
url: http://users-service:3000
routes:
- paths:
- /api/v1/users
strip_path: false
plugins:
- name: jwt
- name: rate-limiting
config:
minute: 100
hour: 5000
policy: redis
redis_host: redis
redis_port: 6379
limit_by: consumer Процесс работы
- Аналитика: собираем требования — какие сервисы, протоколы, лимиты, нужен ли DB-less.
- Проектирование: схема роутинга, выбор плагинов, настройка сети (TLS, сегментация).
- Реализация: разворот Kong, импорт конфигурации (декларативной или через Admin API), интеграция с CI/CD.
- Тестирование: load testing (например, 1000 RPS), проверка аутентификации, correctness.
- Деплой и документация: передаём инструкции, схемы, дашборды Grafana. Обучаем команду.
Что входит в работу
- Развёртывание Kong (Docker/Kubernetes/bare metal)
- Настройка роутинга, JWT, rate limiting, CORS, request transformer
- Мониторинг: Prometheus + Grafana (дашборд ID 7424)
- Интеграция с Redis для rate limiting
- Документация по администрированию
- 2 дня обучения команды
- 2 недели поддержки после запуска
Сроки ориентировочно
От 2 рабочих дней (базовая конфигурация) до 7 дней (с канареечными деплоями, HA, DB-less). Стоимость рассчитывается индивидуально — напишите нам для оценки.
Сравнение режимов работы Kong
DB-less режим проще в развёртывании: не требует базы данных, конфигурация статична и перечитывается при каждом изменении. Динамический режим с PostgreSQL позволяет менять настройки на лету через Admin API, но добавляет точку отказа. Мы помогаем выбрать подходящий вариант под ваши сценарии: если часто меняете маршруты — берите DB, если конфигурация стабильна — DB-less.
| Характеристика | DB-less | Динамический (PostgreSQL) |
|---|---|---|
| Конфигурация | Декларативный YAML/JSON | Admin API on the fly |
| Зависимости | Нет БД | PostgreSQL |
| Адаптивность | Reread config | Мгновенное обновление |
| Надёжность | Нет точки отказа | Зависит от БД |
Сравнение популярных плагинов Kong
| Плагин | Назначение | Бэкенд | Типичные лимиты |
|---|---|---|---|
| JWT | Аутентификация | Встроенный | До 10 000 проверок/сек |
| Rate Limiting | Ограничение запросов | Redis/Cluster | До 100 000 запросов/мин |
| CORS | Кросс-доменные запросы | Встроенный | Без ограничений |
| Prometheus | Метрики | Встроенный | Зависит от размера метрик |
Почему стоит выбрать Kong для вашего API?
Kong быстрее самописных решений в среднем в 3 раза по пропускной способности (до 2 млн RPS на одном узле) и имеет богатую экосистему плагинов. Мы гарантируем стабильность: в наших проектах Kong работал без перезагрузки более 6 месяцев.
Как мы настраиваем Kong с учётом ваших особенностей?
Для каждого проекта адаптируем DB-less или динамический режим, выбираем плагины (key-auth, OAuth2, IP restriction), настраиваем канареечные деплои через weighted targets. Например, распределяем трафик 90%/10% между версиями сервиса. Свяжитесь с нами для консультации — мы предложим архитектуру под ваш проект. Закажите внедрение Kong и получите надёжный API-шлюз с нуля.







