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.
Mas o que é o Kong Gateway?
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.
Passo a Passo para rodar e configurar o Kong:
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 redebridge
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