A Murabei DS disponibiliza uma imagem contendo Kong, um api gateway para auto-discovery de serviços, com um script que faz o bootstrap da base de dados e aguarda essa estar disponível. Isso é importante principalmente para o ambiente de testes para microserviços, o qual muitas vezes é iniciado do “zero”.
O Kong é um API-Gateway baseado em NGINX que apresenta código open-source e uma série de extensões pagas que permitem gerenciar login, segurança, cache entre outras funcionalidades. Ele utiliza uma base de dados (Postgres/Cassandra) para salvar os serviços e compartilhar entre diferentes replicas para aumentar a disponibilidade, isso também facilita caso o serviço caia tornando o service discovery state-full. É possível registrar os end-points através de chamadas JSON, veja mais no site https://konghq.com/kong/.
Antes do Kong cuidar da configuração do service discovery era pior que pentear macaco.
No caso de testes é comum iniciar a base de um container “limpo” e fazer com que cada um dos microserviços faça seu registro para que possam ser expostos pelo Kong. A imagem disponibilizada resolve dois problemas encontrados nesses casos:
Esperar a base de dados ficar disponível
No caso do postgres, existe um período que o container demora para que a base de dados fique disponível para que possa ser usada. Caso o Kong tente inicializar sem a base encontrar-se disponível esse entra em erro e o container é fechado. Para contornar esse problema foi desenvolvido um script bash que antes de iniciar o Kong, entra em um loop que só sairá caso a base de dados fique disponível.
Fazer o bootstrap da base de dados para o Kong
Antes de que possa rodar o Kong precisa criar as tabelas e index necessários para guardar as informações dos serviços, para isso é necessário rodar o comando de bootstrap no Kong. Este é rodado antes de inicializar o api gateway, caso já existam as bases o comando não tem efeito
GitHub e Docker Hub
Os códigos para a imagem e a própria imagem foram disponibilizados no GitHub/Docker Hub:
https://hub.docker.com/repository/docker/andrebaceti/autoboostrap-kong/general
https://github.com/andrebaceti/autoboostrap-kong