En aquest article us ensenyarem com instal·lar i configurar Traefik en un clúster de Docker (Swarm). Molts us preguntareu què és Traefik, tal com el defineixen els seus creadors, és un “encaminador Cloud amb servidor intermediari invers i equilibrador de càrrega”. L'avantatge de Traefik és que es pot integrar amb Docker, de manera que pots desplegar rèpliques dels teus serveis i automàticament queden configurades com a backends a Traefik. Així pots escalar els teus serveis còmodament sense haver de reconfigurar Traefik.
Per poder instal·lar Traefik, el primer que farem és instal·lar el nostre clúster amb Docker Swarm tal com expliquem en aquest article “Docker Swarm a Ubuntu“, només seguirem aquest article fins a l'apartat “Configuración para Workers” inclòs. A partir d'aquí executarem un Stack que, per als qui no sapigueu què és, consisteix en un fitxer amb un conjunt d'instruccions que desplega serveis i contenidors a Docker.
Desplegar Traefik
Ara arriba el moment màgic, com els agrada dir als de Traefik: crearem un fitxer traefik-stack.yml amb el contingut següent:
version: "3.3"
services:
traefik:
image: traefik
command: --web \
--docker \
--docker.swarmmode \
--docker.domain=traefik.kb \
--docker.watch \
--logLevel=DEBUG
networks:
- traefik-net
ports:
- "80:80"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /dev/null:/traefik.toml
deploy:
placement:
constraints: [node.role==manager]
portainer:
image: portainer/portainer
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "portainerdata:/data"
networks:
- traefik-net
deploy:
placement:
constraints: [node.role == manager]
labels:
- "traefik.enable=true"
- "traefik.port=9000"
- "traefik.docker.network=mystack_traefik-net"
- "traefik.frontend.rule=Host:portainer.traefik.kb"
ms1:
image: melvindave/spring-boot-example
networks:
- traefik-net
depends_on:
- mongodb
deploy:
replicas: 3
labels:
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.docker.network=mystack_traefik-net"
- "traefik.frontend.rule=Host:ms1.traefik.kb"
mongodb:
image: mongo
volumes:
- "mongodata:/data/db"
networks:
- traefik-net
deploy:
replicas: 1
ports:
- "27017:27017"
networks:
traefik-net:
volumes:
portainerdata:
mongodata:Crearem 3 registres DNS que apuntin a la IP del nostre “manager-01” per adreçar-nos als serveis desplegats: ms1.traefik.kb, portainer.traefik.kb i dashboard.traefik.kb.
Ara desplegarem el nostre Stack executant:
# docker stack deploy -c traefik-stack.yml mystackEns ha de retornar:
Creating service mystack_ms1
Creating service mystack_mongodb
Creating service mystack_traefik
Creating service mystack_portainerJa ho tenim tot funcionant!
Primers passos amb Traefik
Ara que ja tenim Traefik desplegat, accedirem amb el navegador a http://dashboard.traefik.kb:8080/ i veurem els Frontend i Backends desplegats per a cada servei.
Com podem veure a la captura, el nostre frontal ms1.traefik.kb té 3 backends. Això vol dir que, quan algú visiti el web ms1.traefik.kb, es carregarà des d'un d'ells. Traefik ja fa l'equilibratge de càrrega i va repartint les visites entre els backends; si un backend fallés, enviaria les visites als altres 2. Des de la pestanya “Health” podem comprovar que tot funcioni.
Administrar rèpliques i serveis
Com heu pogut veure, també hem desplegat un servei de Portainer. En aquest article hi ha més explicacions sobre què permet fer Portainer. Per a aquest article accedirem a http://portainer.traefik.kb per administrar backends —rèpliques—. Suposem que preveiem que el nostre web “ms1.traefik.kb” tingui moltes visites per algun motiu: podem desplegar més rèpliques des de Portainer. Quan tornem al volum habitual de visites, podem tornar a reduir el nombre de rèpliques. Us deixem algunes captures del procés.
Com heu pogut veure, és molt fàcil desplegar serveis i backends. L'avantatge de fer servir Traefik respecte d'altres serveis d'alta disponibilitat, com podria ser HAProxy, és que es configura sol.
Pots desplegar o eliminar backends en segons; amb altres serveis, cada vegada que afegeixes o elimines backends has de modificar la configuració.
En aquest article hem fet un exemple senzill amb una pàgina estàtica; es poden fer configuracions similars amb WordPress, PHP,… També es pot configurar el tipus d'equilibratge, el pes de cada backend, el nombre de connexions,… Podeu trobar més informació al web de Traefik.
Ho has provat? Deixa'ns els teus comentaris! 🙂
L'stack d'aquest article s'ha obtingut i modificat a partir de Melvinvivas