Instalando o Kong no Kubernetes

25 de abril de 2021 Por Ramon Durães

O Kong é um API Gateway open source bastante utilizado no mercado. Se você está desenvolvendo API’s e Microservices o API Gateway tem o papel de ser a porta de entrada das API’s oferecendo diversos recursos como segurança, transformação, cache, limites de uso.

Ao disponibilizar as API’s publicamente o acesso será feito pelo API Gateway que vai consumir internamente os seus serviços. A instalação do Kong pode ser feita de várias formas. Nesse contexto utilizaremos uma abordagem no Kubernetes utilizando o pacote criado pelo Bitnami.

O Kong utiliza duas abordagens para a persistência das configurações. Uma tradicional baseada em um banco de dados e outra externamente chamada “DbLess” sem banco de dados.

Em nosso ambiente utilizaremos um cluster Kubernetes criado no Azure Kubernetes Service (AKS) e é necessário que você já tenha instalado o Kubect, Helm e curl.

O Konga é uma ferramenta gratuita para administração do Kong.

Para a primeira instalação siga os passos abaixo:

1) Adiciono uma referência ao Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami

2) Atualize o helm
helm repo update

3) Faça o deploy no Kubernetes
helm install kong bitnami/kong

Ao final da instalação é possivel executar um comando “kubectl get pods” para visualizar as implantações realizadas pelo helm. Nesse contexto temos o kong e o banco de dados postgresql. É importante lembrar que os “ID’s” dos pods mudam conforme o seu contexto. O Kong tem uma portal TCP 8000 para o acesso web público e outra TCP 8001 para a administração.

kong-64bcd9d56d-d5n7z
kong-64bcd9d56d-qdqm9
kong-postgresql-0
Listagem dos pods

O Kong internamente no cluster operece duas portas de conexão e um service. O comando abaixo é um exemplo de mapeando para visualizar no seu computador local.

– kubectl port-forward –address 0.0.0.0 svc/kong 8000:8000 (Serviço padrão para exposição)
– kubectl port-forward pod/kong-64bcd9d56d-d5n7z 8000:8000 (Pod para exposição)
– kubectl port-forward pod/kong-64bcd9d56d-d5n7z 8001:8001 (Pod para Admin)

Lembre de alterar o nome do pod ou utilizar o exemplo abaixo:

kubectl port-forward –address 0.0.0.0 deployment/kong 8000:8000 (Web)
kubectl port-forward –address 0.0.0.0 deployment/kong 8001:8001 (Admin)



O próximo passo é acessar a API do Admin e criar uma rota “/admin-api” de acesso a camada administrativa pelo serviço público que internamente vai executar a API administrativa.

1) Em uma instância do windows terminal ou command execute o comando abaixo. Depois entre em outra aba / instância para os próximos comandos do passo 2.
kubectl port-forward --address 0.0.0.0 deployment/kong 8001:8001
(A porta tcp 8001 estará dísponivel localmente. Você pode substituir o deployment/kong pelo pod)

2) Criando um services
curl -X POST http://127.0.0.1:8001/services --data name=admin-api --data host=127.0.0.1 --data port=8001

3) Adicionando uma rota
curl -X POST http://127.0.0.1:8001/services/admin-api/routes --data paths[]=/admin-api

4) Instalando o plugin auth
curl -i -X POST --url http://localhost:8001/services/admin-api/plugins --data 'name=key-auth'

5) Criando um consumer
curl --location --request POST 'http://localhost:8001/consumers' --form 'username=demo'
(O username utilizado será alterado na url abaixo no passo 6)

6) Obtendo a chave para utilização no acesso a API
curl --location --request POST 'http://localhost:8001/consumers/[username]/key-auth'

Agora que terminou o processo já pode fazer um teste básico. Finalize o mapeamento de porta anterior e execute o comando abaixo para mapear o services no kong em seu computador local.
kubectl port-forward –address 0.0.0.0 svc/kong 8000:80

Agora abra o navegador web e tente acessar a url http://localhost:8000/admin-api ou com o seu ip local
http://seu-ip-local:8000/admin-api para ter o resultado abaixo.

Apesar de apresentar um erro é um indicativo positivo que está disponível a rota e a mesma está protegida.Altere o ip local para o seu endereço ip. Execute ipconfig no command para obter.

O próximo passo é utilizar uma ferramenta administrativa como o Konga para se conetcar no Kong. Eu estarei optando nesse cenário por rodar o Konga em um container na minha máquina conforme o comando abaixo:

docker run -d -p 1337:1337 --name konga -v /var/data/kongadata:/app/kongadata -e "NODE_ENV=production" pantsel/konga

Após iniciar o container entre no navegador web em http://localhost:1337 e faça um cadastro no Konga. Depois basta cadastrar a conexão. Nesse contexto estou utilizando o ip local da minha máquina para que seja acessada de dentro
do container do konga.

Se tudo deu certo até aqui já estará se conectando e realizando as configurações das suas API’s. Para permitir o acesso de fora do seu cluster é necessário criar uma entrada no Ingress para o serviço do kong. Você pode utilizar o Ingress do Nginx ou o do Kong.

Você pode instalar o Kong utilizando vários caminhos inclusive o helm do kong oficial e passando parâmetros para alterar a implantação do pacote helm como credenciais de um banco de dados externo. No exemplo abaixo é utilizado um pacote do kong

helm repo add kong https://charts.konghq.com
helm install kong kong/kong –generate-name –set ingressController.installCRDs=false


Para excluir basta utilizar o helm:
helm delete kong
e depois excluir o PersistentVolumeClaim (PVC)
kubectl get pvc
kubectl delete pvc data-kong-postgresql-0


Para saber mais:
Key Authentication
How to Set Up Kong Gateway
Kong API Loopback
Getting started with the Kubernetes Ingress Controller
Setup (Kong + Konga) as API Gateway


Gostaria de ajuda na estratégia de software e modernização de aplicações? Faça contato e conheça o nosso produto DevPrime.

[],
Ramon Durães