Conteúdo

Aprenda como configurar seu primeiro serviço no Apache APISIX em 3 passos simples, dominando conceitos essenciais como Routes, Services, Upstreams e Loadbalance em um API Gateway robusto.

O Apache APISIX é um poderoso API Gateway que permite gerenciar routes, services e upstreams com eficiência, segurança e suporte a loadbalance para criar arquiteturas de API modernas e escaláveis. Neste tutorial, vamos guiá-lo na configuração do seu primeiro serviço, trazendo conceitos complexos para um contexto simples e prático.

Quer colocar o Apache APISIX em funcionamento rapidamente?
Baixe os arquivos de configuração completos e comece agora mesmo! Acesse: Github

Insights

  1. Configurar um API Gateway robusto como o Apache APISIX é a chave para criar APIs seguras e escaláveis, otimizando o desempenho com balanceamento de carga.
  2. Plugins como proxy-rewrite e response-rewrite permitem personalizar requisições e fortalecer a segurança, ocultando informações sensíveis do backend.
  3. Isolar backends para acesso exclusivo via API Gateway é uma prática essencial para proteger serviços e centralizar o controle de tráfego.

Preparando o ambiente no Docker Compose

No nosso exemplo, estamos utilizando duas APIs simuladas, implementadas em .NET 9. Esses serviços foram configurados no Docker Compose para funcionar como backends. Abaixo, algumas práticas importantes adotadas:

1. Identificação de serviços com variável de ambiente

Cada API é identificada pela variável de ambiente SERVICE_NAME. Essa variável permite diferenciar os serviços, mesmo que eles estejam usando a mesma imagem ou configurados de maneira similar.

Com isso, cada instância da API retorna um identificador que facilita os testes de balanceamento e a visualização de como as requisições são distribuídas entre os serviços.

2. Boa prática: Isolamento de serviços

Uma boa prática de segurança é isolar os serviços backend, permitindo o acesso a eles apenas por meio do Apache APISIX.

No nosso Docker Compose, os serviços demo1 e demo2 estão configurados de forma que suas portas não estão expostas para fora. Isso significa que eles só podem ser acessados por outros serviços dentro da rede apisix definida no compose.

Por que isso é importante?
Expor diretamente os backends pode criar vulnerabilidades, como ataques diretos ou acesso não autorizado. Usando o APISIX como intermediário, é possível centralizar regras de segurança e monitoramento, mantendo os backends protegidos.

3. Conexão com o API Gateway

O Apache APISIX, também configurado no Docker Compose, é o único ponto de entrada para os clientes externos. Ele recebe as requisições, aplica as configurações definidas (como balanceamento, plugins, etc.) e encaminha as requisições aos serviços backend.

Compreenda os conceitos fundamentais para configurar seu serviço no Apache APISIX

Antes de colocarmos a mão na massa, é importante entender os conceitos que estruturam a configuração no Apache APISIX. Esses elementos são as peças-chave para conectar clientes aos seus serviços de forma eficiente, escalável e segura.

O que é um Upstream?

Um upstream no Apache APISIX representa o destino final de uma requisição. Em outras palavras, ele mapeia o backend onde o serviço está hospedado. Esse backend pode ser um servidor, um grupo de servidores ou até mesmo uma aplicação em contêiner.

No nosso caso, utilizaremos duas APIs simuladas em contêineres, chamadas demo1 e demo2, configuradas para demonstrar balanceamento de carga.

Dica prática: Imagine o upstream como a “porta de entrada” para o seu serviço, que o APISIX utiliza para decidir para onde enviar as requisições.

O que é um Service?

No Apache APISIX, o service atua como um intermediário entre o cliente e o upstream. Ele permite adicionar configurações específicas, como autenticação, limitação de requisições (rate limiting) e a aplicação de plugins.

Um exemplo simples de service:
Se você tiver um serviço de catálogo de produtos, o service seria responsável por encaminhar as requisições ao backend que contém os dados e aplicar regras específicas antes de responder ao cliente.

O que é uma Route?

A route é o elemento que conecta os clientes ao service. Ela é definida por critérios como o caminho da URL (URI), o método HTTP ou cabeçalhos específicos.

No APISIX, as rotas permitem definir regras detalhadas sobre como as requisições devem ser tratadas. Por exemplo, podemos configurar uma rota para atender apenas requisições GET ou direcionar usuários autenticados para diferentes services.

O que é um Loadbalancer?

O balanceamento de carga distribui as requisições entre os servidores disponíveis, otimizando o uso de recursos e aumentando a disponibilidade do serviço.

O algoritmo Round Robin, usado pelo APISIX, funciona de maneira simples: ele distribui as requisições igualmente entre os servidores configurados.

Exemplo prático:

  • Primeira requisição → Servidor 1
  • Segunda requisição → Servidor 2
  • Terceira requisição → Servidor 1 (e assim por diante).

O que é Keep-alive e por que ele é importante?

O keep-alive mantém conexões HTTP reutilizáveis entre o APISIX e o backend, reduzindo a latência e otimizando o desempenho.

Dica prática: Se você está enviando muitas requisições para o mesmo backend, habilitar o keep-alive economiza tempo e recursos.

Monitorando Upstreams com Health Checks

O health check monitora os upstreams para garantir que apenas servidores saudáveis recebam requisições. Caso um backend fique indisponível, o APISIX o remove automaticamente do balanceamento de carga até que esteja novamente operacional.

Tipos de health checks no APISIX:

  • Ativo: O APISIX envia requisições de teste periodicamente.
  • Passivo: Baseado na resposta de requisições reais dos clientes.

Configurando o primeiro Upstream no Apache APISIX

O Upstream é o destino final para onde as requisições serão encaminhadas. No nosso exemplo, configuraremos dois servidores backend simulados pelas APIs demo1 e demo2, que serão balanceados utilizando o algoritmo Round Robin.

Passo 1: Acesse o Dashboard do APISIX

  1. Abra o navegador e acesse o dashboard do APISIX pelo endereço:
    http://localhost:9000.
  2. Faça login utilizando suas credenciais. Caso esteja utilizando a configuração padrão, o usuário e senha podem ser admin/admin.

Passo 2: Criando um novo Upstream

  1. No menu lateral, clique em Upstreams.
  2. Clique no botão Create para iniciar a configuração de um novo upstream. Configuração do Upstream na Interface Gráfica
    • Nome: demo_upstream (dê um nome descritivo para o seu upstream).Nodes:
      • demo1:8080 com peso 1.demo2:8080 com peso 1.
      Algoritmo de Balanceamento: Selecione Round Robin.Keep-alive: Ative para melhorar o desempenho de conexões persistentes.Health Check: Habilite o monitoramento ativo para verificar a saúde dos servidores.
    Clique em Submit para salvar a configuração.

Passo 3: Representação em JSON

Caso prefira configurar via API, aqui está o JSON correspondente para criar o upstream:

Nota: Substitua demo1 e demo2 pelos nomes reais dos contêineres ou IPs configurados no Docker Compose.

Configurando o Primeiro Upstream no Apache APISIX

Configurando o Service no Apache APISIX

Com o Upstream configurado, o próximo passo é criar um Service. O Service é o ponto central para aplicar regras específicas, como autenticação, plugins e definições de tempo limite, antes de conectar o cliente ao Upstream.

Passo 1: Navegue até o Dashboard do APISIX

  1. No menu lateral do Dashboard, selecione Services.
  2. Clique em Create para iniciar a configuração de um novo serviço.

Passo 2: Configurando o Service na interface gráfica

Preencha os campos conforme a imagem de exemplo:

  • Name: demo-service (nome do serviço).
  • Description: Adicione uma breve descrição para identificar o propósito do serviço, caso necessário.
  • Hosts: Deixe em branco para permitir acesso universal (ou preencha para restringir a um domínio específico).
  • Upstream: Selecione o upstream configurado anteriormente (demo-upstream).
  • Algorithm: O algoritmo de balanceamento foi definido como Round Robin no upstream.
  • Timeouts: Mantenha os valores padrão para conexões, envio e leitura (6 segundos).
  • Health Check: Certifique-se de que a verificação ativa está configurada no upstream.

Clique em Next e depois em Submit para salvar o serviço.

Passo 3: Representação em JSON

O JSON gerado pelo APISIX para o serviço configurado é:

Configurando o Service no Apache APISIX

Criando a Route no Apache APISIX

Com o Upstream e o Service já configurados, o próximo passo é criar a Route. A Route define como as requisições dos clientes são encaminhadas para o serviço correspondente. Além disso, permite aplicar regras como manipulação de URI (proxy-rewrite) e remoção de informações sensíveis (response-rewrite).

Passo 1: Acesse a Configuração de Rotas

  1. No Dashboard do APISIX, clique em Routes no menu lateral.
  2. Clique em Create para configurar uma nova rota.

Passo 2: Configurando a Route na Interface Gráfica

Conforme a imagem fornecida, preencha os campos principais:

Definir a Requisição da API

  • Name: demo-route (identifique claramente o propósito da rota).
  • Path: /demo/* (aceita qualquer URI que comece com /demo/).
  • Service ID: demo-service (relacione a rota ao serviço previamente criado).
  • HTTP Methods: Selecione todos os métodos HTTP que a rota deverá suportar:
    • GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, etc.
  • Labels: Adicione uma label como API_VERSION: v1 para identificar versões ou categorizar a rota.

Definir o Servidor de Backend

Selecione o Upstream configurado anteriormente (demo-upstream). Confirme que o algoritmo de balanceamento está configurado como Round Robin.

Configuração de Plugins

Adicione os seguintes plugins para melhorar a segurança e a funcionalidade:

Proxy-rewrite (Manipulação de URI):

  • Configure a expressão regular (regex) para redirecionar URIs que começam com /demo/ para o backend correspondente.
  • Expressão utilizada: "regex_uri": ["^/demo/(.*)", "/$1"]

    Essa expressão faz o seguinte:

    • A captura ^/demo/(.*) identifica qualquer caminho que comece com /demo/ e armazena o restante da URI no grupo (.*).
    • O caminho capturado é substituído por /$1, enviando apenas a parte capturada para o backend.

    Por que usamos o proxy-rewrite?
    Para simplificar as URIs que chegam ao backend, garantindo que o destino receba apenas o caminho necessário. Isso evita conflitos ou dependências de prefixos desnecessários.

    Response-rewrite (Segurança):

    Por que remover o cabeçalho Server?

    Expor o tipo ou versão do servidor no cabeçalho HTTP pode facilitar ataques. Remover essa informação é uma prática recomendada de segurança.

    Passo 3: Representação em JSON

    O JSON gerado pelo APISIX para esta configuração é o seguinte:

    Nota: O service_id e o upstream_id conectam esta rota diretamente ao serviço e ao upstream, garantindo que as requisições sejam roteadas corretamente.

    Validação da Route

    Após salvar a rota no Dashboard, teste acessando a URI configurada (por exemplo, http://localhost:9080/demo/). Certifique-se de que:

    • O backend está retornando a resposta esperada.
    • O balanceamento de carga entre demo1 e demo2 está funcionando (veremos isso na demonstração prática a seguir).

    Testando o balanceamento e plugins no Apache APISIX

    Com o Upstream, Service e Route configurados, é hora de testar o comportamento do API Gateway e verificar se tudo está funcionando conforme o planejado. Nessa demonstração prática, faremos os seguintes testes:

    Verificar o balanceamento de carga utilizando o algoritmo Round Robin e remoção do header Server.

    Aprenda como configurar seu primeiro serviço no Apache APISIX em 3 passos simples, dominando conceitos essenciais como Routes, Services, Upstreams e Loadbalance em um API Gateway robusto.

    Aprenda como configurar seu primeiro serviço no Apache APISIX em 3 passos simples, dominando conceitos essenciais como Routes, Services, Upstreams e Loadbalance em um API Gateway robusto.
    Testar o redirecionamento de URI aplicado pelo plugin proxy-rewrite.

    Conclusão

    Neste tutorial, percorremos todas as etapas para configurar um serviço completo no Apache APISIX, desde a criação do Upstream, Service e Route até a validação prática de balanceamento de carga e segurança. Exploramos conceitos fundamentais como o uso de plugins, boas práticas para proteger backends e a importância de manter uma arquitetura organizada e escalável.

    Ao final, você aprendeu:

    • Como configurar e conectar Upstreams, Services e Routes.
    • A importância de isolar backends, permitindo acesso apenas pelo API Gateway.
    • Como o algoritmo Round Robin distribui requisições para melhorar a performance.
    • Aplicação prática de plugins como proxy-rewrite e response-rewrite para manipular URIs e reforçar a segurança.

    Por que isso importa?
    Com essas práticas, você pode criar APIs mais seguras, eficientes e prontas para crescer, independentemente do volume de requisições ou complexidade do sistema.

    Agora que você domina a configuração básica do APISIX, pode explorar recursos mais avançados como autenticação, rate limiting, monitoramento e integração com outras ferramentas. O Apache APISIX é um API Gateway robusto, que se adapta tanto a pequenos projetos quanto a arquiteturas empresariais.

    Se tiver dúvidas ou quiser explorar mais funcionalidades, compartilhe nos comentários ou confira a documentação oficial do APISIX.

    FAQ: Perguntas Frequentes

    1. O que é o Apache APISIX e para que ele é usado?

    O Apache APISIX é um API Gateway moderno e de alto desempenho, projetado para gerenciar tráfego de APIs com segurança, flexibilidade e escalabilidade. Ele permite configurar rotas, balanceamento de carga, autenticação, manipulação de cabeçalhos e outras funcionalidades essenciais para arquiteturas de API.

    2. Como configurar balanceamento de carga no Apache APISIX?

    O balanceamento de carga no Apache APISIX é configurado utilizando Upstreams. É possível usar algoritmos como Round Robin para distribuir as requisições entre múltiplos servidores backend. No tutorial, mostramos como configurar dois backends utilizando o dashboard e o JSON, garantindo que as requisições sejam alternadas automaticamente entre eles.

    3. Por que devo usar o plugin response-rewrite para segurança?

    O plugin response-rewrite é essencial para remover cabeçalhos sensíveis, como o Server, que podem expor informações sobre o backend e aumentar o risco de ataques. Essa prática ajuda a proteger o ambiente e é uma recomendação de segurança amplamente adotada.

    4. Qual a vantagem de isolar os serviços backend no Docker Compose?

    Isolar os serviços backend, configurando-os para não expor suas portas externas, impede acessos não autorizados e vulnerabilidades diretas. O API Gateway funciona como único ponto de entrada, aplicando regras de segurança e controle de tráfego antes de encaminhar as requisições aos backends.

    5. Como o plugin proxy-rewrite ajuda na manipulação de URIs?

    O plugin proxy-rewrite ajusta as URIs enviadas ao backend, simplificando o caminho ou removendo prefixos desnecessários. No tutorial, utilizamos uma expressão regular (regex) para redirecionar requisições que começam com /demo/, garantindo que o backend receba apenas o trecho relevante da URL.

    6. Como o algoritmo Round Robin funciona no balanceamento de carga?

    O Round Robin distribui as requisições de forma alternada entre os servidores configurados no Upstream. Por exemplo, se você tiver dois backends, a primeira requisição será enviada ao primeiro servidor, a segunda ao segundo servidor, e assim por diante. Esse método ajuda a distribuir o tráfego de forma equilibrada e previsível.

    7. Quais são as boas práticas de segurança ao configurar um API Gateway?

    Entre as boas práticas estão:

    • Isolar os backends para acesso apenas via API Gateway.
    • Remover cabeçalhos sensíveis com plugins como response-rewrite.
    • Habilitar health checks para garantir que apenas servidores saudáveis recebam tráfego.
    • Configurar limites de requisições (rate limiting) para proteger contra abusos.

    Compartilhe:

    Tiago Tartari

    Tiago Tartari

    Eu ajudo e capacito pessoas e organizações a transformar problemas complexos em soluções práticas usando a tecnologia para atingir resultados extraordinários.

    Qual é o desafio
    que você tem hoje?