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

Desenvolvimento

Por que você deve investir tempo estudando Python

Por que você deve investir tempo estudando Python No mundo cada vez maior das linguagens de programação, uma delas se destaca como uma ferramenta versátil e poderosa que conquistou os

Infraestrutura TI

Guia prático: Como criar grupos e aplicar regras de política com SUDO no FreeIPA

Este é o terceiro post de uma série de publicações sobre o FreeIPA. Até aqui vimos em outros posts como subir um servidor IPA e também seus clientes, como criar

DevOps

Criando imagens personalizadas com Packer para Google Cloud Platform

Olá pessoal, hoje no blog da 4Linux, vamos falar dessa ferramenta sensacional que é o Packer da HashiCorp. Bora lá. O que é o Packer O Packer é uma ferramenta