Налаштування API Gateway (Kong) для веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування API Gateway (Kong) для веб-застосунку
Складна
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування API Gateway (Kong) для веб-додатку

Kong — найпоширеніший open-source API Gateway, побудований на nginx/OpenResty. Обробляє аутентифікацію, rate limiting, трансформацію запитів, моніторинг та маршрутизацію для мікросервісних архітектур.

Архітектура Kong

Kong працює як проксі: всі запити клієнтів проходять через Kong, який застосовує плагіни та перенаправляє трафік до upstream-сервісів. Конфігурація зберігається в PostgreSQL або в режимі DB-less через YAML.

Client → Kong Gateway → Plugins (auth, rate limit, log) → Upstream Service

Встановлення Kong з PostgreSQL

# Docker Compose
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"   # HTTP proxy
      - "8443:8443"   # HTTPS proxy
      - "8001:8001"   # Admin API (обмежити зовнішній доступ!)
    depends_on: [kong-migration]

Налаштування сервісів та маршрутів

# Створити 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 'methods[]=GET' \
  -d 'methods[]=POST' \
  -d strip_path=false

# Тест
curl http://localhost:8000/api/v1/users

Декларативна конфігурація (режим DB-less)

# kong.yml
_format_version: "3.0"

services:
  - name: users-api
    url: http://users-service:3000
    routes:
      - name: users-route
        paths: [/api/v1/users]
        strip_path: false
    plugins:
      - name: rate-limiting
        config:
          minute: 60
          policy: local
      - name: jwt
        config:
          secret_is_base64: false

  - name: products-api
    url: http://products-service:3001
    routes:
      - name: products-route
        paths: [/api/v1/products]
    plugins:
      - name: key-auth

Ключові плагіни

JWT-аутентифікація

# Увімкнути JWT плагін на сервісі
curl -X POST http://localhost:8001/services/users-api/plugins \
  -d name=jwt

# Створити consumer
curl -X POST http://localhost:8001/consumers \
  -d username=mobile-app

# Створити JWT credentials
curl -X POST http://localhost:8001/consumers/mobile-app/jwt \
  -d algorithm=RS256 \
  -d rsa_public_key="$(cat public.pem)"

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  # або ip, service, route

CORS

curl -X POST http://localhost:8001/services/users-api/plugins \
  -d name=cors \
  -d 'config.origins[]=https://app.company.com' \
  -d 'config.methods[]=GET' \
  -d 'config.methods[]=POST' \
  -d 'config.headers[]=Authorization' \
  -d 'config.headers[]=Content-Type' \
  -d config.credentials=true

Request Transformer

curl -X POST http://localhost:8001/services/users-api/plugins \
  -d name=request-transformer \
  -d 'config.add.headers[]=X-Internal-Key:secret123' \
  -d 'config.remove.headers[]=X-Forwarded-For' \
  -d 'config.add.querystring[]=version:2'

Канареєві розгортання через Kong

# Створити upstream
curl -X POST http://localhost:8001/upstreams -d name=api-upstream

# Додати targets з вагами
curl -X POST http://localhost:8001/upstreams/api-upstream/targets \
  -d target=api-v1:3000 -d weight=90

curl -X POST http://localhost:8001/upstreams/api-upstream/targets \
  -d target=api-v2:3000 -d weight=10

Спостережливість

# Prometheus плагін
curl -X POST http://localhost:8001/plugins \
  -d name=prometheus

# Grafana dashboard для Kong доступна як ID 7424 на grafana.com

Метрики в Prometheus:

kong_http_requests_total{service="users-api",route="users-route",status="200"}
kong_request_latency_ms{service="users-api",quantile="0.99"}

Управління через Konga (Web UI)

docker run -d -p 1337:1337 \
  -e NODE_ENV=production \
  -e DB_ADAPTER=postgres \
  -e DB_HOST=kong-db \
  pantsel/konga

Графік

Базова настройка Kong з JWT, rate limiting та маршрутизацією — 2–3 робочих дня. Повна налаштування з спостережливістю, канареєвими розгортаннями та HA-конфігурацією — 5–7 днів.