Настройка 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

Observability

# 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 рабочих дня. Полная настройка с observability, канареечными деплоями и HA-конфигурацией — 5–7 дней.