Перейти к основному контенту
Tech Path Finder
КурсыИнтервьюКод-ревьюБлог
Tech Path Finder

Персонализированный путеводитель в IT. Квизы, мок-интервью, код ревью и аналитика прогресса.

@potapov_me

Платформа

  • Курсы
  • Прогресс
  • Мок-интервью
  • Код ревью
  • Живое ревью с ИИ
  • Тренажёр переговоров
  • Закладки

Контент

  • Блог
  • Главная
  • Обратная связь

Компания

  • О проекте
  • Тарифы
  • Условия использования
  • Конфиденциальность
  • Согласие на обработку данных
  • Cookie
  • Реквизиты

Аккаунт

  • Войти
  • Зарегистрироваться
  • Профиль

© 2026 Tech Path Finder. Все права защищены.

·ИП Потапов К.С.·Политика конфиденциальности·
Сделано с ❤️ в России
  1. Введение в Kong Gateway
introduction

Введение в Kong Gateway

Архитектура Kong, основные компоненты, use cases и сравнение с альтернативами

Введение в Kong Gateway

Kong Gateway — это облачно-нативный API-шлюз с открытым исходным кодом, который решает проблему централизации кросс-сервисных задач в микросервисной архитектуре.

#1. Проблема, которую решает Kong

Проблема: В микросервисной архитектуре каждый сервис должен реализовывать:

  • Аутентификацию и авторизацию
  • Логирование запросов
  • Rate limiting (защита от перегрузок)
  • Мониторинг и метрики
  • Трассировку запросов

Это приводит к:

  • Дублированию кода — каждая команда пишет одно и то же
  • Несогласованности — разные подходы к логированию, аутентификации
  • Сложности изменений — чтобы добавить новую политику безопасности, нужно обновлять все сервисы

Решение: API Gateway выносит эти задачи на уровень шлюза. Микросервисы фокусируются на бизнес-логике, а Kong обрабатывает кросс-сервисные задачи централизованно.

┌─────────────┐
│   Клиент    │
└──────┬──────┘
       │
       ▼
┌─────────────────────────────┐
│       Kong Gateway          │
│  ┌───────────────────────┐  │
│  │  Authentication       │  │
│  │  Rate Limiting        │  │
│  │  Logging & Metrics    │  │
│  │  Routing              │  │
│  └───────────────────────┘  │
└──────────┬──────────────────┘
           │
    ┌──────┴──────┬────────────┐
    ▼             ▼            ▼
┌────────┐   ┌────────┐   ┌────────┐
│ Users  │   │ Orders │   │ Payments│
│ Service│   │ Service│   │ Service │
└────────┘   └────────┘   └────────┘

#2. Архитектура Kong

Kong состоит из двух основных компонентов:

#Data Plane (Kong Proxy)

Проблема: Нужен высокопроизводительный компонент для обработки входящего трафика.

Решение: Data Plane — это компонент, который непосредственно принимает HTTP-запросы и проксирует их на upstream-сервисы. Основан на nginx, что обеспечивает высокую производительность.

  • Обрабатывает входящие запросы на портах 8000 (HTTP) и 8443 (HTTPS)
  • Применяет плагины к запросам (аутентификация, rate limiting, логирование)
  • Проксирует запросы на бэкенд-сервисы согласно конфигурации Routes и Services
  • Работает stateless — может быть горизонтально масштабирован

#Control Plane

Проблема: Нужно централизованное управление конфигурацией всех узлов Data Plane.

Решение: Control Plane хранит конфигурацию и управляет ею через Admin API.

  • Admin API (порт 8001 HTTP, 8444 HTTPS) — REST API для управления конфигурацией
  • База данных — PostgreSQL для хранения конфигурации (Services, Routes, Plugins, Consumers)
  • Распространяет конфигурацию на все узлы Data Plane
┌──────────────────┐
│   Control Plane  │
│  ┌────────────┐  │
│  │ Admin API  │  │
│  │ PostgreSQL │  │
│  └────────────┘  │
└────────┬─────────┘
         │
         │ распространяет конфигурацию
         │
    ┌────┴────┐
    ▼         ▼
┌────────┐ ┌────────┐
│  Data  │ │  Data  │
│ Plane  │ │ Plane  │
└────────┘ └────────┘

#3. Основные концепции

#Service

Проблема: Нужна абстракция для бэкенд-сервисов, чтобы не хардкодить URL в конфигурации маршрутизации.

Решение: Service — это представление upstream-сервиса в Kong.

# Создаём Service для бэкенда пользователей curl -X POST http://localhost:8001/services \ --data "name=users-api" \ --data "url=http://users-service:8080"

Service содержит:

  • name — уникальное имя сервиса
  • url — URL бэкенда (протокол, хост, порт, опционально path)
  • connect_timeout, write_timeout, read_timeout — таймауты
  • retries — количество попыток подключения

#Route

Проблема: Нужно маршрутизировать запросы на разные сервисы в зависимости от пути, хоста, методов.

Решение: Route — правило маршрутизации, которое связывает входящие запросы с Service.

# Создаём Route для пользователей curl -X POST http://localhost:8001/services/users-api/routes \ --data "name=users-route" \ --data "paths[]=/api/users" \ --data "methods[]=GET" \ --data "methods[]=POST"

Route поддерживает различные условиясоответствия:

  • paths —соответствия path запроса (/api/users)
  • hosts —соответствия хоста (api.example.com)
  • methods — HTTP-методы (GET, POST, etc.)
  • headers — заголовки запроса
  • snis — SNI для TLS

#Consumer

Проблема: Нужно идентифицировать пользователей/приложений для аутентификации, авторизации и rate limiting.

Решение: Consumer — представление пользователя или приложения в Kong.

# Создаём потребителя curl -X POST http://localhost:8001/consumers \ --data "username=mobile-app"

Consumer может иметь:

  • API-ключи (плагин key-auth)
  • JWT-токены (плагин jwt)
  • OAuth2 credentials (плагин oauth2)
  • Индивидуальные лимиты запросов

#Plugin

Проблема: Нужен механизм для применения политик (аутентификация, логирование, rate limiting) к запросам.

Решение: Plugin — расширяемый компонент, который выполняется на разных этапах обработки запроса.

# Применяем rate limiting к Route curl -X POST http://localhost:8001/routes/users-route/plugins \ --data "name=rate-limiting" \ --data "config.minute=100" \ --data "config.policy=redis"

Kong предоставляет встроенные плагины:

  • Аутентификация: key-auth, jwt, oauth2, oidc, ldap
  • Безопасность: rate-limiting, ip-restriction, bot-detection, cors
  • Трафик: proxy-cache, request-transformer, response-transformer
  • Наблюдаемость: prometheus, zipkin, tcp-log, http-log
  • Serverless: aws-lambda, azure-functions, google-cloud-functions

#4. Жизненный цикл запроса в Kong

Проблема: Нужно понимать, когда и какие плагины выполняются при обработке запроса.

Решение: Kong выполняет плагины на определённых этапах жизненного цикла:

1. DNS Resolution
       ↓
2. Rewrite (преобразование запроса)
       ↓
3. Access (аутентификация, авторизация, rate limiting)
       ↓
4. Proxy (отправка на upstream)
       ↓
5. Response (получение ответа от upstream)
       ↓
6. Body Filter (трансформация тела ответа)
       ↓
7. Header Filter (трансформация заголовков ответа)
       ↓
8. Log (логирование, отправка метрик)

Пример выполнения плагинов:

  • Access: key-auth проверяет API-ключ, rate-limiting проверяет лимит
  • Proxy: запрос отправляется на users-service:8080
  • Response: response-transformer добавляет заголовки
  • Log: prometheus экспортирует метрики, http-log отправляет логи

#5. Режимы развёртывания

#Традиционный режим (с базой данных)

Проблема: Нужна персистентная конфигурация с возможностью динамического обновления.

Решение: Control Plane использует PostgreSQL для хранения конфигурации.

# docker-compose.yml services: kong: image: kong:3.5 environment: KONG_DATABASE: postgres KONG_PG_HOST: postgres KONG_PG_USER: kong KONG_PG_PASSWORD: kong ports: - "8000:8000" - "8443:8443" - "8001:8001" - "8444:8444"

Преимущества:

  • Динамическое обновление конфигурации через Admin API
  • Поддержка нескольких узлов Data Plane
  • Полная функциональность Kong

#DB-less режим

Проблема: Нужна простая развёртываемость без зависимости от базы данных, конфигурация как код.

Решение: Конфигурация загружается из YAML-файла при старте.

# Запуск в DB-less режиме kong start --conf-file /path/to/kong.yml
# kong.yml _format_version: "3.0" services: - name: users-api url: http://users-service:8080 routes: - name: users-route paths: [/api/users] plugins: - name: rate-limiting config: minute: 100 policy: redis

Преимущества:

  • Проще развёртывание (нет зависимости от БД)
  • Конфигурация как код (версионирование в git)
  • Быстрее старт

#Hybrid Mode

Проблема: Нужно централизованное управление множеством узлов Data Plane с возможностью горизонтального масштабирования.

Решение: Разделение Control Plane и Data Plane на разные узлы.

┌─────────────────────┐
│   Control Plane     │
│   (отдельный узел)  │
│   - Admin API       │
│   - PostgreSQL      │
└──────────┬──────────┘
           │
           │ защищённое соединение (TLS)
           │
    ┌──────┴──────┬────────────┐
    ▼             ▼            ▼
┌────────┐   ┌────────┐   ┌────────┐
│  DP 1  │   │  DP 2  │   │  DP 3  │
│  (EU)  │   │  (US)  │   │  (AS)  │
└────────┘   └────────┘   └────────┘

Преимущества:

  • Централизованное управление
  • Горизонтальное масштабирование Data Plane
  • Изоляция плоскостей (сбой CP не влияет на обработку трафика)

#6. Kong Gateway vs Kong Mesh

Проблема: Нужно понимать разницу между API Gateway и Service Mesh.

Решение: Kong Gateway и Kong Mesh решают разные задачи:

ХарактеристикаKong GatewayKong Mesh
Тип трафикаСевер-Юг (клиент → сервис)Восток-Запад (сервис → сервис)
РазвёртываниеЦентральный шлюзSidecar в каждом pod
БезопасностьTLS terminationmTLS между сервисами
МаршрутизацияПо path/host к сервисамTraffic splitting между версиями
ОсноваnginxEnvoy proxy

Север-Юг трафик:

Клиент → [Kong Gateway] → Сервис

Восток-Запад трафик:

Сервис A → [Sidecar Proxy] → [Sidecar Proxy] → Сервис B

#7. Сравнение с альтернативами

РешениеПреимуществаНедостатки
KongЗрелый продукт, богатая экосистема плагинов, хорошая документацияLua для кастомных плагинов, производительность ниже чем у Envoy
Envoy ProxyВысокая производительность, встроенный support для gRPC, HTTP/2Сложнее в настройке, меньше готовых плагинов
NGINXВысокая производительность, стабильностьМеньше функций для API management, платная версия для продвинутых функций
TraefikПростота, автоматическое обнаружение сервисовМеньше плагинов, менее зрелый для enterprise
AWS API GatewayПолностью управляемый, интеграция с AWSVendor lock-in, дороже на больших объёмах

#8. Use Cases

#1. Централизованная аутентификация

Проблема: 10 микросервисов, каждый реализует JWT-аутентификацию по-своему.

Решение: Kong с плагином jwt-auth проверяет токены централизованно.

curl -X POST http://localhost:8001/plugins \ --data "name=jwt"

#2. Rate limiting для разных тарифов

Проблема: Бесплатные пользователи — 100 запросов/час, премиум — 10000 запросов/час.

Решение: Kong с разными Consumers и плагинами rate-limiting.

# Бесплатный тариф curl -X POST http://localhost:8001/consumers/free-user/plugins \ --data "name=rate-limiting" \ --data "config.hour=100" # Премиум тариф curl -X POST http://localhost:8001/consumers/premium-user/plugins \ --data "name=rate-limiting" \ --data "config.hour=10000"

#3. Canary-развёртывание

Проблема: Нужно развернуть новую версию сервиса с 10% трафика.

Решение: Kong с weighted upstream (в Kong Mesh) или несколько Routes с разными приоритетами.

#4. Агрегация метрик

Проблема: Нужно видеть latency, RPS, ошибки по всем сервисам в одном месте.

Решение: Kong с плагином prometheus экспортирует метрики для Grafana.

curl -X POST http://localhost:8001/plugins \ --data "name=prometheus"

#9. Когда Kong НЕ подходит

  • Монолитное приложение — overhead от шлюза не оправдан
  • Требования к ultra-low latency (< 1ms) — каждый hop добавляет latency
  • Полностью serverless архитектура — лучше использовать managed API Gateway от провайдера
  • Очень простые проекты — можно обойтись reverse proxy (nginx) без дополнительных функций

Далее: Установка и настройка