Kong Gateway используют для маршрутизации, защиты и интеграции API. Материал подходит для тех, кто разворачивает API-инфраструктуру в Docker/Portainer и хочет безопасно закрыть Admin API, настроить публичный Proxy API и подключить внешний сервис (например, OpenAI).
- Установка Kong Gateway в Portainer
- Проверка работоспособности Kong
- Проверка Admin API (локально)
- Проверка публичного Proxy API
- Настройка Kong Service для внешнего API
- Создание маршрута для сервиса
- Тестирование маршрута
- Настройка Nginx как reverse proxy для Kong
- Подключение фронтенда (например, ChatGPT-Next-Web)
- Защита Admin API через SSH-туннель
- Проверка туннеля
- Часто используемые команды Kong
- Список сервисов
- Список маршрутов
- Удаление маршрута
- Заключение
Установка Kong Gateway в Portainer
Ниже приведён стек для Portainer Stack с PostgreSQL, миграциями и безопасной конфигурацией Admin API.
version: "3.9"
networks:
kong-net:
driver: bridge
volumes:
kong_db_data: {}
services:
kong-database:
image: postgres:16
container_name: kong-database
restart: unless-stopped
environment:
POSTGRES_USER: kong
POSTGRES_DB: kong
POSTGRES_PASSWORD: kong
volumes:
- kong_db_data:/var/lib/postgresql/data
networks:
- kong-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U kong -d kong"]
interval: 5s
timeout: 10s
retries: 10
kong-migrations:
image: kong:latest
container_name: kong-migrations
command: kong migrations bootstrap
restart: on-failure
depends_on:
- kong-database
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
networks:
- kong-net
kong:
image: kong:latest
container_name: kong
restart: unless-stopped
depends_on:
- kong-database
- kong-migrations
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: kong-database
KONG_PG_DATABASE: kong
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
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, 0.0.0.0:8444 ssl
KONG_PROXY_LISTEN: 0.0.0.0:8000, 0.0.0.0:8443 ssl
ports:
- "8000:8000"
- "8443:8443"
- "127.0.0.1:8001:8001"
- "127.0.0.1:8444:8444"
networks:
- kong-net
Проверка работоспособности Kong
Проверка Admin API (локально)
curl http://127.0.0.1:8001/ Проверка публичного Proxy API
curl http://127.0.0.1:8000 Настройка Kong Service для внешнего API
Команда создаёт сервис, через который будет работать внешний API.
curl -X POST http://localhost:8001/services \
--data name=external-api \
--data url=https://api.example.com
Создание маршрута для сервиса
Маршрут позволит обращаться к API через путь /api.
curl -X POST http://localhost:8001/services/external-api/routes \
--data name=external-api-route \
--data paths[]=/api \
--data strip_path=true
Тестирование маршрута
curl "https://yourdomain.com/api/test" -k Настройка Nginx как reverse proxy для Kong
Nginx применяется для SSL-терминации и безопасного доступа к Kong Proxy API.
server {
listen 443 ssl;
server_name yourdomain.com;
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
location / {
proxy_pass https://127.0.0.1:8443;
proxy_ssl_verify off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Подключение фронтенда (например, ChatGPT-Next-Web)
Фронтенд использует Kong как прокси для внешнего API.
BASE_URL=https://yourdomain.com/api
API_KEY=<ваш_ключ>
Защита Admin API через SSH-туннель
Admin API должен быть доступен только локально или через защищённый туннель.
ssh -L 8001:127.0.0.1:8001 user@server Проверка туннеля
curl http://localhost:8001/ Часто используемые команды Kong
Список сервисов
curl http://localhost:8001/services Список маршрутов
curl http://localhost:8001/routes Удаление маршрута
curl -X DELETE http://localhost:8001/routes/<id> Заключение
Подход обеспечивает безопасную установку Kong Gateway в Portainer, защищает Admin API, даёт стабильный публичный Proxy API и позволяет гибко подключать внешние сервисы через Nginx и Kong.









