Tutorial: Configurando o Traefik no Docker Swarm com arquivos YAML

Tutorial: Configurando o Traefik no Docker Swarm com arquivos YAML

traefik-docker

Neste tutorial, você aprenderá como configurar o Traefik no Docker Swarm usando arquivos YAML, uma forma fácil e eficiente de gerenciar seus aplicativos de contêineres em larga escala.

Ao seguir os passos detalhados abaixo, você poderá criar uma rede overlay, iniciar o Traefik, criar um serviço e testá-lo usando uma imagem do Tomcat como exemplo. Não usaremos ssl nesse exemplo, mas darei uma explicação detalhada dos elementos utilizados, como routers, services e middlewares, é fornecida.

Um dos principais benefícios de usar arquivos YAML para configurar o Traefik é que você pode versionar e compartilhar esses arquivos entre diferentes ambientes de desenvolvimento, teste e produção. Além disso, o arquivo de configuração em YAML é mais legível e fácil de entender do que o traefik.toml, o que facilita o gerenciamento e a manutenção do seu ambiente de contêineres.

Para concluir este tutorial, explicaremos como adicionar tomcat.demo.com ao arquivo hosts local do Windows e do Linux para acessar o serviço do Tomcat por esse nome de domínio em vez de usar o endereço IP do host. Por fim, detalharemos as opções providers.docker utilizadas no exemplo para configurar o Traefik, permitindo que você entenda mais profundamente como funciona a integração entre o Traefik e o Docker Swarm.

Pré-requisitos

Obs: Antes de começar, certifique-se de ter o Docker Swarm configurado e em execução em um ou mais nós.

Passo 1 – Criar uma rede overlay

O Traefik precisa de uma rede overlay para se comunicar com os contêineres do Docker Swarm. Para criar a rede overlay, execute o seguinte comando:

docker network create --driver=overlay traefik-net

Passo 2 – Iniciar o Traefik

Para iniciar o Traefik no Docker Swarm, crie um arquivo traefik.yml com o seguinte conteúdo:

version: '3.7'

services:
  traefik:
    image: traefik:v2.5
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.http.address=:80"
      - "--log.level=DEBUG"
      - "--accesslog"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.network=traefik-net"
      - "--providers.docker.swarmModeRefreshSeconds=15s"
      - "--providers.docker.constraints=Label(\"traefik.enable=true\")"
      - "--providers.docker.defaultRule=Host(`{{ trimPrefix `/` (index .Labels `com.docker.swarm.service.name`) }}.{{ index .Labels `com.docker.swarm.service.namespace` }}.swarm`)"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    networks:
      - traefik-net

networks:
  traefik-net:
    external: true

Este arquivo define o serviço do Traefik, incluindo as opções de linha de comando do Traefik como parâmetros do serviço.

Para iniciar o serviço do Traefik, execute o seguinte comando:

docker stack deploy -c traefik.yml traefik

Passo 3 – Criar um serviço
Para demonstrar o exemplo, crie um serviço usando a imagem do Tomcat. Crie um arquivo tomcat-demo.yml com o seguinte conteúdo:

version: '3.7'

services:
  tomcat-demo:
    image: tomcat:latest
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.tomcat.rule=Host(`tomcat.demo.com`)"
        - "traefik.http.services.tomcat.loadbalancer.server.port=8080"
    networks:
      - traefik-net

networks:
  traefik-net:
    external: true

Este arquivo cria um serviço do Docker Swarm chamado tomcat-demo e define as seguintes labels para o Traefik:

traefik.enable=true: habilita o roteamento do Traefik para este serviço.
traefik.http.routers.tomcat.rule="Host(tomcat.demo.com): define uma rota para o serviço com base no host tomcat.demo.com.
traefik.http.services.tomcat.loadbalancer.server.port=8080: define a porta do serviço que o Traefik irá encaminhar o tráfego.

Para iniciar o serviço do Tomcat, execute o seguinte comando:

docker stack deploy -c tomcat-demo.yml tomcat-demo

Passo 4 – Testar o serviço

Agora que o serviço e o Traefik estão em execução, você pode acessar o serviço em um navegador da web usando o endereço http://tomcat.demo.com. Mas para isso devemos realizar a configuração abaixo:

Adicionar a entrada tomcat.demo.com no arquivo hosts do Linux.

Linux

  1. Abra o terminal e execute o seguinte comando para abrir o arquivo /etc/hosts:
    sudo nano /etc/hosts
    
  2. Adicione uma nova linha no final do arquivo /etc/hosts, no seguinte formato:
<endereço IP>  tomcat.demo.com

Por exemplo:

192.168.10.50  tomcat.demo.com

Obs: Agora, a entrada tomcat.demo.com deve estar presente no arquivo hosts do seu sistema operacional e você pode acessar o serviço do Tomcat pelo nome de domínio tomcat.demo.com. Lembre-se de substituir <endereço IP> pelo endereço IP do host onde o serviço está sendo executado.

Obs: _Como estará usando uma rede overlay com Route Mesh, <endereço IP> pode ser qualquer IP de qualquer nó do cluster Swarm.

Explicação dos elementos utilizados:

Routers

Os roteadores (routers) no Traefik 2.5 são responsáveis por receber solicitações e encaminhá-las para o serviço apropriado. No exemplo acima, definimos um roteador com a label traefik.http.routers.tomcat.rule=”Host(tomcat.demo.com)”, que instrui o Traefik a encaminhar o tráfego para o serviço do Tomcat com base no host tomcat.demo.com. O Traefik também oferece outros recursos, como suporte para diferentes protocolos de entrada e para encaminhamento de solicitações com base em cabeçalhos, caminhos e muito mais.

Services

Os serviços (services) no Traefik 2.5 representam os contêineres ou instâncias do serviço que deseja rotear. No exemplo acima, definimos o serviço do Tomcat com a label traefik.http.services.tomcat.loadbalancer.server.port=8080, que informa o Traefik que o serviço está ouvindo na porta 8080. O Traefik suporta o balanceamento de carga entre várias instâncias de serviço, bem como outras funcionalidades, como limites de taxa e circuit breaking.

providers.docker

providers.docker=true: ativa o provedor Docker para o Traefik.

providers.docker.swarmMode=true: especifica que o provedor Docker está sendo usado em um ambiente do Docker Swarm.

providers.docker.exposedByDefault=false: define se os contêineres do Docker serão expostos automaticamente pelo Traefik. No nosso exemplo, definimos como false, o que significa que precisamos definir a label traefik.enable=true em cada serviço que desejamos expor com o Traefik.

providers.docker.endpoint=unix:///var/run/docker.sock: define o ponto de extremidade do daemon Docker, que é o arquivo socket localizado em /var/run/docker.sock.

providers.docker.network=traefik-net: especifica a rede Docker onde o Traefik deve descobrir os serviços a serem roteados.

providers.docker.swarmModeRefreshSeconds=15s: define a frequência com que o Traefik verifica o estado dos serviços do Docker Swarm para atualizar a configuração do roteamento. No nosso exemplo, definimos como 15s, o que significa que o Traefik verifica a cada 15 segundos.

providers.docker.constraints=Label(\"traefik.enable=true\"): define um conjunto de restrições que limita quais contêineres do Docker são roteados pelo Traefik. Neste caso, definimos como traefik.enable=true, o que significa que apenas os contêineres que tiverem essa label definida serão roteados.

providers.docker.defaultRule=Host({{ trimPrefix / (index .Labels com.docker.swarm.service.name) }}.{{ index .Labels com.docker.swarm.service.namespace }}.swarm): define a regra padrão que será aplicada a qualquer serviço que não tenha uma regra explícita definida. No nosso exemplo, definimos como Host({{ trimPrefix / (index .Labels com.docker.swarm.service.name) }}.{{ index .Labels com.docker.swarm.service.namespace }}.swarm), o que significa que o Traefik usará o nome do serviço Swarm como o host para rotear o tráfego.

Conclusão

Neste tutorial, aprendemos como configurar o Traefik 2.5 para uso com o Docker Swarm, usando um exemplo com o serviço Tomcat. O Traefik é uma ferramenta poderosa para gerenciar o tráfego de rede em um ambiente de contêineres, e suas capacidades incluem roteamento flexível, balanceamento de carga e personalização do comportamento do roteador e do serviço. Com este tutorial, você deve estar pronto para começar a usar o Traefik em seus próprios projetos usando arquivos YAML em vez de comandos de linha. O uso de arquivos YAML para descrever o ambiente e configurações do Docker Swarm pode facilitar o gerenciamento e a manutenção de aplicativos de contêineres em larga escala, uma vez que os arquivos YAML podem ser versionados e compartilhados entre diferentes ambientes de desenvolvimento, teste e produção.

 

Líder em Treinamento e serviços de Consultoria, Suporte e Implantação para o mundo open source. Conheça nossas soluções:

CURSOSCONSULTORIA

Anterior Certificações Google Cloud: Aumente suas habilidades e avance na carreira
Próxima Entenda o Processo de Consulta SQL no Sistema Gerenciador de Banco de Dados Postgres

About author

Você pode gostar também

Infraestrutura TI

Introdução ao MongoDB: aprenda sobre JSON, BSON e primeiros passos

Dando continuidade na série de MongoDB, nesse post farei uma Introdução ao formato “Javascript Object Notation” (JSON), ao BSON e aos primeiros passos com o MongoDB. Compartilhe este post: Share

DevOps

Como resolver problemas de dependências de projeto com o servidor de automação Jenkins

Jenkins é um servidor de automação, independente e de código aberto, usado para automatizar todos os tipos de tarefas relacionadas à criação, teste e distribuição ou implementação de software. Recentemente,

DevOps

Atualização do curso de Kubernetes: 40 horas de aula e suporte para certificações CKAD e CKA

Olá para você que trabalha ou tem interesse na área de containers, a 4Linux acaba de atualizar e ampliar o curso de Kubernetes que agora conta com 40 horas de