Categorias
API Gateway

Deck: Uma opção para configurações declarativas para kong api gateway

Conforme seu projeto for crescendo, mais microsserviços surgirão e consequentemente mais rotas, services, plugins e etc serão necessários no kong. Ao mesmo tempo cresce a necessidade da gestão simples e unificada dessas configurações.

O decK fornece uma opção para configurações declarativas (YAML e JSON). Através de um yaml é possível declarar todas as rotas, services, plugins e até mesmo os certificados SSL.

Versionando esse yaml, conseguiremos saber exatamente quem fez a configuração. “Jogando” o yaml num pipeline de CI/CD, conseguiremos fechar esse fluxo de deploy automático das configurações do kong.

Veja na imagem abaixo um exemplo de YAML com declaração do service com o nome mockbin

Instalação

Você pode instalar o deck no mac, linux ou windows, mas aqui vamos rodá-lo num container docker

docker run kong/deck help

Em nossos testes o kong está rodando num container e o kong admin respondendo em http://kong:8001/

A rede do kong em teste chama-se “network-microservicos”

Deck Ping

Testando conexão com o kong admin. Repare que passei o parametro –network e o parametro –kong-addr. Assim consigo fazer com que o deck converse com o kong admin que esta em outra rede. Caso não utilize –kong-addr, ele chamará o endereço http://localhost:8001

docker run --rm \
--network=network-microservicos \
kong/deck \
--kong-addr=http://kong:8001 \
ping 

Exportando sua configuração atual com o comando DUMP

Caso você ja tenha várias configurações no kong e queira jogar as mesmas para dentro de um arquivo yaml, utilize o comando a seguir para exporta-las e salvar no caminho deck/kong.yaml

docker run --rm --network=network-microservicos kong/deck --kong-addr=http://kong:8001 dump --output-file - > deck/kong.yaml

Deck Diff

Antes de aplicar as configurações, você pode verificar a diferença entre as configurações do seu .yaml e as configurações que já estão aplicadas no kong. Uma espécie de dry-mode.

docker run --rm \
--network=network-microservicos \
-v /home/onovaes/Documents/Sites/dothnews/microservicos/kong_konga/deck/:/deck/ \
kong/deck \
--kong-addr=http://kong:8001 \
diff -s deck/kong.yaml

Deck Sync

Esse é o principal comando e faz a sincronização do seu arquivo yaml local com o kong admin

docker run --rm \
--network=network-microservicos \
-v /home/onovaes/Documents/Sites/dothnews/microservicos/kong_konga/deck/:/deck/ \
kong/deck \
--kong-addr=http://kong:8001 \
sync -s deck/kong.yaml

Múltiplos YAML

Você pode também declarar vários arquivos .yaml dentro de um diretório e aplicar as configurações com o seguinte comando.

No exemplo a seguir todos os yaml estão dentro da pasta deck.

docker run --rm \
--network=network-microservicos \
-v /home/onovaes/Documents/Sites/dothnews/microservicos/kong_konga/deck/:/deck/ \
kong/deck \
--kong-addr=http://kong:8001 \
sync -s deck/

Comandos Disponíveis

Aqui é um CTRL C + CTRL V do manual! =D

convert Convert files in one format to another format
diff Diff the current entities in Kong with the one on disks
dump Export Kong configuration to a file
help Help about any command
konnect Configuration tool for Konnect (in alpha)
ping Verify connectivity with Kong
reset Reset deletes all entities in Kong
sync Sync performs operations to get Kong’s configuration to match the state file
validate Validate the state file
version Print the version of decK

Flags:

–analytics share anonymized data to help improve decK (default true)
ca-cert string Custom CA certificate to use to verify Kong’s Admin TLS certificate.
This value can also be set using DECK_CA_CERT environment variable.
config string config file (default is $HOME/.deck.yaml)
–headers strings HTTP Headers(key:value) to inject in all requests to Kong’s Admin API.
This flag can be specified multiple times to inject multiple headers.
-h, –help help for deck
–kong-addr string HTTP Address of Kong’s Admin API.
This value can also be set using DECK_KONG_ADDR
environment variable. (default “http://localhost:8001”)
–konnect-addr string address of the Konnect endpoint (default “https://konnect.konghq.com”)
–konnect-email string Email address associated with your Konnect account
–konnect-password string Password associated with your Konnect account, this takes precedence over –konnect-password-file flag
–konnect-password-file string File containing password to your Konnect account
–no-color disable colorized output
–skip-workspace-crud Skip API calls related to Workspaces (Kong Enterprise only)
–tls-server-name string Name to use to verify the hostname in Kong’s Admin TLS certificate.
This value can also be set using DECK_TLS_SERVER_NAME environment variable.
–tls-skip-verify Disable verification of Kong’s Admin TLS certificate.
This value can also be set using DECK_TLS_SKIP_VERIFY environment variable.
–verbose int Enable verbose verbose logging levels
Setting this value to 2 outputs all HTTP requests/responses
between decK and Kong.