Como Instalar e Configurar o Kong Gateway e o Kong Manager Usando Docker

Search for a command to run...

No comments yet. Be the first to comment.
Uma implementação enxuta para usar voz como entrada de assistente sem custo adicional de transcrição

Uma introdução clara à ferramenta, com construção linha por linha e código final completo.

Um proxy CLI em Rust que filtra output antes de chegar no LLM

Arquitetura, primitivas, servidor em Python, testes com Inspector e client próprio.

Como monitorar, debuggar e entender o que seus agentes autônomos estão fazendo com OpenTelemetry, Langfuse e ferramentas open-source
Estava testando o Kong Manager, pois estava acostumado a usar somente kong deck ou KONGA. E após testar bastante, decidi resumir o teste para um post sobre como rodar do zero o Kong Gateway da sua máquina com docker e configurar um serviço e 2 rotas para o funcionamento básico via Kong Manager.
Caso exista o interesse de algumas pessoas, posso fazer outras partes falando sobre outras features que o Kong Gateway possui, desde como habilitar os logs de todas requisições e gerar dashboards no kibana / grafana, utilização de alguns plugins, consumers, entre outras features.
O Kong Gateway é uma plataforma open-source amplamente reconhecida como um API Gateway, projetada para gerenciar e proteger APIs de forma centralizada, operando na borda da infraestrutura. Ele atua como um intermediário entre os clientes e os serviços de backend, facilitando o controle e a escalabilidade das APIs. Com o Kong, você pode realizar um gerenciamento eficiente, seguro e centralizado de suas interfaces. A plataforma oferece uma ampla gama de funcionalidades avançadas, incluindo:
Roteamento de APIs: permite que você direcione o tráfego para diferentes serviços backend de forma inteligente.
Autenticação e Segurança: protege suas APIs com métodos de autenticação como OAuth, JWT, ou API keys.
Escalabilidade e Performance: projetado para lidar com grandes volumes de requisições em ambientes de produção de alto tráfego.
Monitoramento e Logs: permite rastrear e monitorar todo o tráfego através do gateway, essencial para manter o controle e otimizar o desempenho.
Flexibilidade com Plugins: você pode adicionar funcionalidades como cache, rate-limiting, gRPC, AWS Lambda diretamente na rota, entre outros, através de plugins customizáveis, ou criando o seu próprio plugin em Lua ou Go.
Além disso, nas novas versões do Kong temos o gerenciamento através do Kong Manager, uma interface gráfica simples e intuitiva, acessível pela porta 8002. Com ela, você pode configurar e monitorar APIs sem a necessidade de lidar com comandos complexos.
Existe outra possibilidade de configurar diretamente todo o kong via porta 8001 via cURL.
Ou se deseja manter suas rotas e configurações versionadas, é possível integrar utilizando o projeto https://github.com/Kong/deck, mas deixaremos isso para outro post.
Configurar o Docker Compose
Crie o seguinte arquivo docker-compose.yml para rodar o Kong, o PostgreSQL e o Kong Manager:
version: '3.5'
services:
kong-migrations:
image: kong:latest
command: kong migrations bootstrap
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: db_postgres
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
KONG_PG_DATABASE: kong
depends_on:
- db_postgres
networks:
- kong-net
restart: "no"
kong:
image: kong:latest
environment:
KONG_DATABASE: postgres
KONG_PG_HOST: db_postgres
KONG_PG_USER: kong
KONG_PG_PASSWORD: kong
KONG_PG_DATABASE: kong
KONG_PROXY_ACCESS_LOG: /dev/stdout
KONG_PROXY_ERROR_LOG: /dev/stderr
KONG_ADMIN_ACCESS_LOG: /dev/stdout
KONG_ADMIN_ERROR_LOG: /dev/stderr
KONG_ADMIN_LISTEN: 0.0.0.0:8001
KONG_PROXY_LISTEN: 0.0.0.0:8000
KONG_ADMIN_GUI_LISTEN: 0.0.0.0:8002
KONG_PORTAL_GUI_HOST: localhost:8002
ports:
- "8000:8000" # Proxy
- "8001:8001" # Admin API
- "8002:8002" # Kong Manager (Admin GUI)
depends_on:
- kong-migrations
- db_postgres
restart: on-failure
networks:
- kong-net
db_postgres:
image: postgres:latest
environment:
POSTGRES_DB: kong
POSTGRES_USER: kong
POSTGRES_PASSWORD: kong
POSTGRES_HOST_AUTH_METHOD: trust
healthcheck:
test: ["CMD", "pg_isready", "-U", "kong"]
interval: 5s
timeout: 10s
retries: 5
networks:
- kong-net
restart: on-failure
networks:
kong-net:
driver: bridge
Esta configuração do Docker Compose cria um ambiente para o Kong Gateway e um banco de dados PostgreSQL.
kong-migrations: Executa as migrations para configurar o banco de dados do Kong.
kong: Configura o Kong para gerenciar APIs, ouvindo nas portas 8000 (proxy), 8001 (admin) e 8002 (Kong Manager).
db_postgres: Inicia um banco de dados PostgreSQL para armazenar dados do Kong, com verificações de saúde para garantir que está ativo.
kong-net: Cria uma rede bridge para facilitar a comunicação entre os serviços.
Rodar o Docker Compose
No terminal, execute o comando:
docker-compose up
Isso iniciará o Kong, o PostgreSQL e o Kong Manager.
Entendendo as portas do Kong:
8000: Porta padrão para o Proxy, onde suas APIs serão expostas.
8001: Porta para a Admin API, usada para configurar serviços, rotas, plugins e mais.
8002: Porta do Kong Manager, a interface gráfica que facilita a administração das APIs.
Acessar o Kong Manager
Após subir os containers, acesse o Kong Manager em http://localhost:8002. Aqui você pode gerenciar seus serviços e rotas de maneira fácil e visual.

Criar um Serviço
No Kong Manager:
Vá para a aba Gateway Services.
Crie um novo serviço com as seguintes configurações:
Name: PokeAPI (Nome do seu serviço)
Full URL: https://pokeapi.co
Save

Criar uma Rota para /api/v2/pokemon/ditto
Após criar o serviço, configure uma rota:
Name: Nome da Rota (meu caso, PokemonDitto)
Service: Selecionar o PokeAPI (ID do service (host) onde vai intermediar a rota)
Path: /api/v2/pokemon/ditto
View Advanced Fields
Desmarcar opção: Strip Path
Save

Agora, toda vez que você fizer uma requisição para http://localhost:8000/api/v2/pokemon/ditto, o Kong encaminhará a chamada para o serviço https://pokeapi.co/api/v2/pokemon/ditto.

O problema de ter somente uma rota mapeada e para o pokemon ditto, é que qualquer outro pokemon não será encontrado. Por exemplo se acessarmos agora http://localhost:8000/api/v2/pokemon/pikachu, teremos a pagina de rota não encontrada:

Criar uma Rota para acessar qualquer pokemon
Para permitir que qualquer rota dentro de /api/v2/pokemon seja capturada, crie uma nova rota:
Name: Nome da Rota (meu caso, Pokemon)
Service: Selecionar o PokeAPI (ID do service (host) onde vai intermediar a rota)
Path: /api/v2/pokemon
View Advanced Fields
Desmarcar opção: Strip Path
Save
Isso permitirá que qualquer chamada para /api/v2/pokemon/<nome> seja roteada corretamente, como /api/v2/pokemon/pikachu.

Agora você pode gerenciar suas APIs com facilidade através do Kong Manager!
Lembrando que a ideia não era trazer muita complexidade para este primeiro post, mas conseguir rodar o kong local e fazer upstreams de 2 ou mais rotas.
Aproveitando, sugiro fortemente para que todos olhem o post do Leonardo do Carmo sobre Ambiente de desenvolvimento das galáxias usando Docker com várias ferramentas indispensáveis para o ambiente local.
É isso, espero que gostem =P