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
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
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
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