Como usar múltiplos Traefik Ingress Controller no mesmo cluster

Como usar múltiplos Traefik Ingress Controller no mesmo cluster

Table of contents

No EKS do ambiente de homologação, utilizamos o Traefik como nosso Ingress Controller. Surgiu o desafio de subir aplicações atrás de uma VPN também utilizando o Traefik, mas as regras de segurança eram aplicadas diretamente no ALB. E agora? Voltar a utilizar um ALB para cada aplicação? Subir um Ingress Controller diferente? Foi aí que lendo a documentação encontrei um argumento para informar ao Traefik qual o valor da annotation kubernetes.io/ingress.class que ele escutará.

O tal argumento é --providers.kubernetesingress.ingressclass=<class-name>.

Passo a passo

Vou exemplificar instalando o Traefik utilizando Helm.

  1. Adicione o repositório de chart do Traefik e atualize o cache local

     helm repo add traefik https://helm.traefik.io/traefik
     helm repo update
    
  2. Crie um arquivo YAML com o seguinte conteúdo. Aqui chamei o arquivo de values.yaml

     additionalArguments:
     - "--providers.kubernetesingress.ingressclass=traefik-internal"
    

    Com traefik-internal sendo o valor da annotation kubernetes.io/ingress.class que o Traefik irá escutar, podendo ser qualquer valor definido por você.

  3. Faça o deploy utilizando o arquivo

     helm install traefik --values ./values.yaml traefik/traefik
    

Em seguida o novo traefik irá subir com o argumento especificado, como na imagem com a saída do comando kubectl describe pod nome-do-pod-traefik:

Untitled.png

Pronto, agora todo Ingress com annotation kubernetes.io/ingress.class: traefik-internal será reconhecido por esse Traefik que acabamos de subir. Isso permite que vários Traefik Ingress Controller instalados no mesmo cluster possam coexistir, cada um gerenciando regras de Ingress anotados com a classe que ele está responsável.