Tutorial: Configurando o Traefik no Docker Swarm com arquivos YAML
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
- Abra o terminal e execute o seguinte comando para abrir o arquivo /etc/hosts:
sudo nano /etc/hosts
- 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:
About author
Você pode gostar também
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
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,
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