Como utilizar o Traefik como ingress controller no Kubernetes
O que é Traefik
Traefik (pronuncia-se “traffic”) é um proxy reverso e balanceador de carga para microsserviços de código aberto. Traefik pode nos ajudar a subir serviços mais rapidamente sem barrar no excesso de configurações de infra e simplificar o ambiente. Ele é escrito em go e é super leve e rápido, como exemplo a imagem docker possui 43MB imagem-latest.
Alguns recursos úteis que o Traefik nos disponibiliza:
- Auto Discovery
- Metrics
- SSL
- Dashboard
- Circuit breakers (LatencyAtQuantileMS, NetworkErrorRatio, ResponseCodeRatio)
- Rate Limit
- Retry (Enable retry sending request if network error)
- Sticky sessions
- Health Check
- Canary deployments (Kubernetes)
- Mirroring (Kubernetes)
Instalando Traefik
Pré-requisitos
Precisamos obviamente de um cluster Kubernetes, para nosso exemplo utilizaremos um cluster EKS na AWS, se você não sabe como criar um cluster na AWS pode dar uma olhada nesse artigo que escrevi. Também precisaremos de duas ferramentas instaladas:
- helm
- kubectl
Caso ainda não conheça o helm, sugiro dar uma lida nesse artigo da Red Hat: https://www.redhat.com/pt-br/topics/devops/what-is-helm
Instalação do Traefik
Primeiro vamos criar um arquivo yaml onde iremos declarar alguns ajustes referentes ao traefik e que iremos utilizar durante a instalação. Editando o arquivo traefik-values.yaml
:
|
|
Bom o arquivo aqui é autodeclarativo, mas basicamente estamos dizendo para que durante a instalação seja criado o ingressClass do traefik no nosso cluster e o mesmo, seja utilizado como padrão. Também estamos desabilitando a rota para acessar o dashboard (configuraremos isso em outro post) e também estamos indicando que o tipo de balanceador de carga que iremos utilizar, e aqui será do tipo NLB (Network Load Balancer). Para mais detalhes sobe os valores disponíveis, podemos acessar o arquivo https://github.com/traefik/traefik-helm-chart/blob/master/traefik/values.yaml.
Com nosso arquivo em mãos podemos prosseguir adicionando o repositório helm do Traefik, seguido da atualização dos repositórios e a instalação do Traefik.
|
|
Testando
Se nenhum erro ocorreu durante o processo já teremos o Traefik instalado e pronto para ser testado. Primeiramente vamos verificar os recursos criados durante a instalação em nosso cluster.
|
|
Podemos verificar que diversos recursos foram criados, mas gostaria de destacar o service
criado e automaticamente associado a uma load balancer na AWS, conforme solicitamos no nosso arquivo traefik-values.yaml
. É através desse load balancer que faremos todas as nossas requisições para o cluster.
Por desencargo de consciência vamos tentar o acesso ao endereço:
|
|
Ao acessar nosso endereço recebemos um erro 404, mas até aí tudo bem, esse é um erro esperado. Ainda não temos nenhum serviço dentro cluster e a resposta padrão do Traefik quando não encontra nenhum serviço é de fato retornar um erro 404.
Para termos certeza que tudo vai funcionar como esperado, vamos adicionar um serviço e associar a ele uma regra de acesso. Vamos criar o arquivo 2048.yaml
.
|
|
Para nosso exemplo vamos nos atentar principalmente ao último bloco do arquivo onde ficam as configurações específicas do Traefik. Configuramos aqui uma regra (Rule) onde os acessos ao cluster que acessem na rota principal (/), ou seja, o próprio endereço do cluster será redirecionado para o serviço que criamos. Essa regra poderia ser um path especifico assim como um endereço ou sub domínio, mais exemplos na documentação.
Vamos conferir se o serviço subiu corretamente:
|
|
Para garantir também vamos dar aquela conferida na nossa regra criada para o Traefik.
|
|
Bom, então agora só nos falta o teste final, vamos tentar abrir o endereço do load balancer diretamente no navegador:
E pronto, aí está nosso serviço sendo exposto através do Traefik. Poderíamos deixar nosso Traefik mais parrudo, adicionando certificado, criando regras especificas, adicionando health check e outros recursos que o Traefik disponibiliza, mas vamos deixar para um próximo artigo.
Mas antes de irmos embora vamos criar um novo serviço e ver como a coisa fica muito simples e que realmente funciona. Vamos criar o arquivo whoami.yaml
e seu conteúdo será muito parecido com o outro serviço, obviamente mudando a regra para acesso ao serviço.
|
|
E vamos criar os recursos:
|
|
Vamos direto conferir que nosso ingressRoute foi criado:
|
|
Novamente vamos aos testes, agora cuidando para acessar pelo mesmo endereço e na rota /whoami
.
|
|
https://traefik.io/blog/eks-clusters-with-traefik-proxy-as-the-ingress-controller/