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







