Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Установка Kong Gateway в Portainer, защита Admin API и настройка Nginx

Linux и DevOps

Kong Gateway используют для маршрутизации, защиты и интеграции API. Материал подходит для тех, кто разворачивает API-инфраструктуру в Docker/Portainer и хочет безопасно закрыть Admin API, настроить публичный Proxy API и подключить внешний сервис (например, OpenAI).

Установка 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.

Оцените статью
ctrllife.ru
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x