Hola buenas, llevo desde el miércoles dándole vueltas a esto y no encuentro la manera de poder resolverlo, lo mismo es que estoy entendiéndolo malamente o algo.
Estoy montando un clúster de micro servicios en 2 VPS con Docker Swarm y he desplegado Traefik con un Docker-Compose. El problema viene en que no soy capaz de que Traefik se comunique con los otros microservicios pese a que estén en la misma red, he puesto los labels y todo lo necesario y no hay manera.
version: '3.8'
x-default-opts:
&default-opts
logging:
options:
max-size: "10m"
networks:
traefik:
external: true
volumes:
traefik-certificates:
services:
traefik:
<<: *default-opts
# Image tag (replace with yours)
image: traefik:2.4
command:
- "--global.checkNewVersion=true"
- "--global.sendAnonymousUsage=false"
- "--api=true"
- "--log.level=WARN"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--providers.docker=true"
- "--providers.docker.watch=true"
- "--providers.docker.swarmMode=true"
- "--providers.docker.network=traefik"
- "--providers.docker.endpoint=unix:///var/run/docker.sock"
- "--providers.docker.swarmModeRefreshSeconds=15s"
- "--providers.docker.exposedByDefault=false"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
# Email for Let's Encrypt (replace with yours)
- "--certificatesresolvers.letsencrypt.acme.email=alarpae1311@g.educaand.es"
- "--certificatesresolvers.letsencrypt.acme.storage=/etc/traefik/acme/acme.json"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- traefik-certificates:/etc/traefik/acme
networks:
- traefik
ports:
- "80:80"
- "443:443"
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
update_config:
delay: 15s
parallelism: 1
monitor: 10s
failure_action: rollback
max_failure_ratio: 0.55
# Container resources (replace with yours)
resources:
limits:
cpus: '0.35'
memory: 256M
reservations:
cpus: '0.15'
memory: 128M
labels:
- "traefik.enable=true"
# Traefik URL (replace with yours)
- "traefik.http.routers.default.rule=Host(`traefik.alarpae1311.site`)"
- "traefik.http.routers.default.service=api@internal"
- "traefik.http.routers.default.tls.certresolver=letsencrypt"
- "traefik.http.routers.default.entrypoints=websecure"
- "traefik.http.services.default.loadbalancer.passhostheader=true"
- "traefik.http.services.default.loadbalancer.server.port=8080"
# - "traefik.http.routers.default.middlewares=authtraefik"
# Basic Authentication for Traefik Dashboard
# Username: traefikadmin (replace with yours)
# Passwords must be encoded using MD5, SHA1, or BCrypt
# - "traefik.http.middlewares.authtraefik.basicauth.users=traefikadmin:$$2y$$10$$sMzJfirKC75x/hVpiINeZOiSm.Jkity9cn4KwNkRvO7hSQVFc5FLO"
- "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
- "traefik.http.routers.http-catchall.entrypoints=web"
- "traefik.http.routers.http-catchall.middlewares=redirect-to-https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
El .yml este es el único con la versión 2 que he conseguido que se despliegue en Swarm y con Lets Encrypt aunque parezca muy cutrón.
He mirado documentación oficial y un porrón de documentación pero ninguna me sirve, ¿quizás es que lo que estoy intentando hacer con Traefik no se puede? Lo he usado en el ciclo pero estaban todos los servicios corriendo sobre el mismo compose, aquí cada servicio está en una carpeta distinta y en un compose diferente.
Puede que haya quedado muy escueto mi problema con esta información ya que es la primera vez que pido ayuda sobre cualquier tema informático por Internet.