Проблема: управление 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-шлюз с нуля.







