Governança de APIs com Kong

Natura @ Tech
7 min readMay 16, 2019

--

Por Denis Santos, Rafael Silva, Eli Melo, Alexandre Bellini e Renzo Petri

Falar sobre API já não é mais novidade para nenhuma empresa que esteja envolvida com projetos de desenvolvimento de sistemas, cada vez mais as empresas querem agilizar a entrega de seus projetos para gerar valor para seus clientes.

Dentro da Natura o tema API faz parte do nosso dia a dia, disponibilizamos centenas de features por meio de APIs REST para todos os nossos canais e formatos, seja ele uma Web Application, Mobile, IoT, Analytics, etc.

Após uma longa jornada pelo universo das APIs e com arquiteturas voltadas para microservices e serverless obtivemos uma grande quantidade de serviços com inúmeras versões (/v1, /v2, /v3 … ), além de inúmeros consumers desses serviços (aplicativos, aplicações front-end, aplicações backend, aplicações terceiras, monitorias, dispositivos IoT). Nessa jornada ficou clara a necessidade de se ter um Orquestrador para prover a organização de tantos serviços e consumers.

Kong API Gateway o Orquestrador de APIs

O Kong Enterprise foi o Orquestrador de APIs que escolhemos para organizar esse universo, ele que por sua vez funciona por meio de proxies (vamos falar disso mais para frente).

Caso queira se saber mais sobre o Kong, segue o link para o site oficial: https://konghq.com/

Neste artigo vamos explicar quais benefícios de se ter o Kong como API Gateway.

A primeira pergunta que devemos nos fazer: Quais as vantagens de orquestrar minhas APIs num API Gateway?

É uma pergunta essencial. Ao disponibilizar nossas APIs num API Gateway nos leva aos seguintes benefícios:

Governança das aplicações

O Kong permite por meio de um Dashboard Administrativo organizar e agrupar as APIs por domínios de negócio, essa funcionalidade é chamada de workspace, com isso fornecendo um controle centralizado de permissões para os usuários, definindo papéis sobre o que cada um pode fazer (visualizar, alterar, deletar, criar, publicar, etc).
Para esse tema de gestão de domínios para organização de APIs, vale uma leitura a parte sobre DDD — Domain-Driven Design: https://www.infoq.com/minibooks/domain-driven-design-quickly

Solução Multi-Cloud

Outra vantagem dessa solução foi sua aderência para uma solução Multi-Cloud.

Solução 100% RESTful API

Tudo no Kong é baseado em API, ou seja, o Kong provê 100% de serviços sobre as suas próprias funcionalidades, isso permite a criação de qualquer automação no processo de Continuous Integration e Continuous Delivery ou Deployment, totalmente aderente às práticas DevOps.

Solução baseada em Plugins

De maneira moderna o Kong trás em seu Dashboard administrativo um recurso de Marketplace de Plugins, esses que por sua vez podem ser adicionados de maneira global, ou seja, se aplicando para qualquer API nele governada. Ou também de maneira mais granular, como por workspace, service, route, consumer.

Os plugins são bem organizados, veja a variedade de plugins:

  • Authentication
  • Security
  • Traffic Control
  • Serverless
  • Analytics & Monitoring
  • Transformations
  • Logging

Habilita mais Automações (CI/CD)

O Kong se integra com qualquer Pipeline de CI/CD, novamente pela sua vantagem de ser 100% RESTful API. Isso viabiliza a criação de automações na publicação de uma API, basta seguir algumas boas práticas, como implementar a geração da Documentação de API utilizando algum framework baseado na iniciativa OpenAPI (recomendamos o Swagger por sua popularidade e facilidade). Tendo a documentação gerada, podemos utilizar um dos serviços REST do Kong que permite ler esse arquivo do Swagger e publicar de forma automática a API no API Gateway.

O limite de automações fica a critério do nível de maturidade em CI/CD de cada empresa ou de cada projeto, pois o Kong permite automatizar a criação de tudo o que ele possui, como criar uma nova workspace, services, routes, consumers, plugins, users.

Veja um exemplo que implementamos na Natura utilizando o Jenkins:

Facilita o Monitoramento e o dia a dia do Time de Operações

Sabemos que nem só de features vive uma aplicação, existe o mundo de Operações, as coisas uma hora vão para Produção e vamos precisar de evidências para pilotar o negócio. Com o Kong não é diferente, e pensando nisso ele trás ótimas métricas junto ao Prometheus, provendo Dashboards essenciais para o monitoramento do API Gateway e de suas APIs, tais como:

  • Quantidade de requisições
  • Tempo de resposta
  • Taxa de erros

Além de outras integrações por plugins de monitoria, como Datadog, Zipkin e Runscope.

Dashboard de monitoria no Prometheus:

Dashboard de monitoria no Graylog (customizado com base no log padrão):

Dashboard Administrativo do Kong (quantidade de requests e taxa de erro — visão geral ou por workspace):

Dashboard na nossa ferramenta de APM — Dynatrace

Rastreabilidade com Logging e Trace

Por padrão o Kong gera arquivos de log no stdout e stderr, na nossa solução enviamos esse log essencial para o Graylog. Porém esse é um log mais básico com informações de request e response, sem detalhes de um plugin de autorização, uma transformação que possa ter sido configurada no Header, entre outros. Para isso existem algumas estratégias que podem ser adotadas para se obter mais detalhes, que pode ser feita através de plugins de Logging:

  • Plugin Logging File: esse permite criar um arquivo de log detalhado, e fica a seu critério como irá consumir esse arquivo.
  • Plugin Logging TCP ou UDP: Com estes plugins podemos configurar o envio detalhado para uma solução ELK por exemplo, e visualizando facilmente o TRACE das requisições no Kibana.

Baseado em Container

O Kong já é uma solução baseada numa arquitetura de microserviço e distribuída em Docker, utilizando apenas 50MB de memória e uma pequena fração de CPU.

Pronto para rodar no Kubernetes

Além de ser uma solução conteinerizada e o Kong é uma solução clustering. Seu setup para Kubernetes é distribuido de forma oficial no Github, tanto para rodar como API Gateway, como também existe um projeto oficial para utilizar como Load Balancing. Veja as referências:

API Gateway: https://docs.konghq.com/install/kubernetes/

Load Balancing — Kong Ingress Controller: https://github.com/Kong/kubernetes-ingress-controller

Arquitetura moderna, leve e escalável

O Kong basicamente é um conjunto de softwares Open Source, tendo como principal componente de sua arquitetura o OpenResty para prover configurações dinamicamente no NGINX e processar solicitações HTTP.

Segurança em todas camadas

O Kong Enterprise além de verificar os usuários e gerenciar a segurança de maneira granular (como por workspace), ele tem a capacidade de aplicar o controle de acesso baseado em função (RBAC) para todos os recursos como modulo Admin e Proxy, e depois por pequenas partes como services, routes, plugins e consumers. Permitindo o Admin gerenciar as funções dos usuários ou grupos de usuários, criando papéis que garantam o controle de acesso como leitura e gravação, criação, deleção, edição, customização, etc.

Suporte e SLA

Mesmo o Kong sendo um produto bem difundido na comunidade Open Source, é comum empresas de grande porte necessitarem de um suporte com um SLA que não impacte na operação. Tivemos alguns contatos com o time de Engenharia do Kong e todo o suporte foi prestado de maneira rápida e eficiente. Por esse motivo optamos pela versão Kong Enterprise, que além de oferecer suporte também trás uma gama maior de Plugins Avançados e um Dashboard mais completo em questões de funcionalidades.

Impressões

Retomando o assunto lá do início deste artigo, onde falamos da nossa jornada com APIs na Natura, é importante esclarecer que essa já é uma longa jornada e isso nos permitiu uma grande curva de evolução nessa disciplina (maturidade). Onde as primeiras APIs nasceram sem um Orquestrador, depois fizemos o uso de soluções de API Gateway num modelo Saas, e essa jornada nos levou até o Kong Enterprise num modelo Iaas utilizando Kubernetes.

Primeiramente o Kong nos trouxe todos os benefícios listados neste artigo, se mostrando fácil de instalar, escalar, suportar e operar. Além disso, destacou-se no Teste de Performance — adicionando no máximo 10ms no tempo de uma requisição (não passou de 1% de ocupação do tempo de uma requisição, mesmo utilizando plugins de Autenticação, Transformação e Logging).

Obtivemos 700 TPS com apenas três réplicas do Kong em clustering.

Outro destaque, foi o fato do nosso time de DevOps não ter tido nenhuma dificuldade para aprender o seu uso, apenas com a documentação do produto foi o suficiente para gerar conhecimento entre as pessoas e rapidamente ser adotado nos projetos.

Alguns números

--

--

Natura @ Tech

Como fazemos tecnologia na maior empresa de venda direta do país