Mascota Jacar — leyendo contigo Un portátil cuyos ojos siguen el cursor mientras lees.
Cómo Instalar Herramientas

Cómo instalar Traefik en Docker Swarm con certificados

Cómo instalar Traefik en Docker Swarm con certificados

Actualizado: 2026-05-03

Traefik[1] se ha convertido, casi por ósmosis, en el reverse proxy por defecto en entornos Docker Swarm: enfoque declarativo por etiquetas, certificados Let’s Encrypt casi transparentes, un dashboard que hace que entender las rutas de un clúster sea trivial. Esta guía está pensada para el momento en que pasas de «me ha funcionado en local» a «esto tiene que recibir tráfico real», un salto menos trivial de lo que parece.

Puntos clave

  • La red overlay traefik_public es el punto de unión entre Traefik y los servicios que proxifica.
  • El reto DNS-01 es preferible en producción: permite wildcards y libera el puerto 80 durante la validación.
  • El almacén de certificados en un único volumen local falla cuando escalas a un segundo manager.
  • El dashboard contiene información sensible: nunca lo expongas sin autenticación fuerte.
  • Los middlewares en cadenas reutilizables (chain-base, chain-oauth) son lo que mantiene la configuración manejable.

Qué hace falta antes de empezar

Cuatro cosas deben estar resueltas antes de ejecutar un solo comando:

  • Un clúster Swarm inicializado, aunque sea con un único nodo.
  • Un dominio cuyo registro apunte a la IP pública del manager.
  • Un token de API en el proveedor DNS (Cloudflare, OVH, Route 53) con permisos para crear registros TXT.
  • Una dirección de correo para Let’s Encrypt.

Los puertos 80 y 443 deben estar abiertos hacia el manager. Parece obvio, pero es una de las causas más comunes de errores iniciales: un cortafuegos mal configurado, un proveedor cloud que bloquea el 80 por defecto, un grupo de seguridad aplicado al nodo equivocado.

La red sobre la que se hablan los servicios

Traefik necesita una red overlay compartida con los servicios que va a proxificar. La creación es un paso único:

bash
docker network create --driver=overlay --attachable traefik_public

El flag --attachable permite que contenedores fuera de un servicio Swarm también se conecten. A partir de aquí, cualquier servicio que declare traefik_public como una de sus redes podrá ser descubierto por Traefik automáticamente.

Certificados: reto HTTP o reto DNS

El reto DNS-01 es la elección correcta para producción casi siempre:

  • Libera a Traefik de tener que recibir tráfico en el puerto 80 durante la validación.
  • Permite pedir certificados wildcard (*.example.com), cómodos cuando desplegarás docenas de subdominios.

El reto HTTP-01 basta si solo vas a servir certificados para el dominio ya apuntado al servidor y no necesitas wildcards. Para Cloudflare, la configuración del reto DNS-01 pasa dos variables de entorno al servicio (correo y token de API con permisos limitados). En cuestión de segundos Traefik pide el certificado, el proveedor crea el TXT, Let’s Encrypt valida y el certificado queda emitido.

El almacén de certificados

Let’s Encrypt emite certificados cada noventa días y Traefik los renueva automáticamente, guardándolos en un fichero JSON en disco. Este es el detalle que más suele olvidarse:

  • Con un único manager, un volumen Docker basta.
  • Con múltiples managers, el fichero debe estar en almacenamiento compartido (NFS, GlusterFS, JuiceFS).

Si el servicio Traefik se mueve de un nodo a otro con un volumen local, pedirá certificados nuevos desde cero. Let’s Encrypt tiene cuotas que acabarás pisando. Si anticipas crecer, resuélvelo desde el principio.

Configuración estática y dinámica

Traefik divide su configuración en dos planos:

  • Estática: define cosas que no cambian en caliente (proveedores de descubrimiento, entrypoints, resolvers de certificados, logging). Vive en traefik.yml.
  • Dinámica: define rutas, middlewares, servicios. Vive en las etiquetas de cada servicio.

En el compose de Traefik, la configuración estática se monta como volumen de solo lectura. Allí se declara el resolver ACME con su reto DNS, los dos entrypoints (web para 80, websecure para 443), el proveedor Docker Swarm y el dashboard. No hay nada conceptualmente complejo, solo una convención que se aprende leyéndola una vez con atención.

El dashboard: útil pero hay que protegerlo

El dashboard muestra qué rutas están activas, qué middlewares se aplican, el estado de cada servicio. La tentación de dejarlo expuesto públicamente es alta; no caigas en ella.

Dos enfoques funcionan bien:

  • Dejarlo solo accesible por red interna (por ejemplo, vía WireGuard) sin exponerlo por Traefik.
  • Exponerlo protegido por autenticación fuerte: OAuth vía Authentik, Keycloak, o al menos basic auth con credenciales no triviales.

El dashboard contiene información que ayuda a un atacante a mapear tu infraestructura. Este es también el patrón que usa el propio stack de jacar.es para proteger herramientas internas.

El primer servicio detrás de Traefik

Una vez desplegado Traefik, exponer un servicio es puramente declarativo. El patrón mínimo en el compose del servicio:

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.myapp.rule=Host(`app.example.com`)"
  - "traefik.http.routers.myapp.entrypoints=websecure"
  - "traefik.http.routers.myapp.tls.certresolver=letsencrypt"
  - "traefik.http.services.myapp.loadbalancer.server.port=8080"

Traefik descubre las etiquetas automáticamente en cuanto el servicio se despliega, solicita el certificado si es necesario y empieza a enrutar. Esa magia es lo que explica su popularidad: la configuración vive con el servicio que configura.

Middlewares: donde vive la política

Los middlewares más útiles en producción son:

  • Redirección HTTP→HTTPS: convierte cualquier petición al 80 en una redirección 301.
  • Cabeceras de seguridad: añade Strict-Transport-Security, X-Frame-Options a cada respuesta.
  • Compresión: activa gzip y brotli automáticamente.
  • Rate limiting por IP: amortigua picos y ataques básicos.
  • Forward auth: delega autenticación a Authentik o similar.

La práctica que mejor funciona es definir cadenas que agrupan middlewares comunes: una chain-base con redirección, compresión y cabeceras aplicada a todo lo público; una chain-oauth que añade forward auth para dashboards y herramientas internas. Este patrón de composición también se usa en entornos GitOps con Flux para separar la política de la infraestructura.

Lo que se te va a olvidar la primera vez

Detalles que casi todo el mundo pasa por alto al principio:

  • El logLevel por defecto es demasiado verboso; bajarlo a INFO reduce ruido sin perder información útil.
  • El log de acceso en formato JSON canalizado a Loki o Elasticsearch es enormemente valioso.
  • Las métricas Prometheus están desactivadas por defecto; activarlas es una línea.
  • La autoridad de certificados por defecto de Traefik, si no declaras otra, es la de pruebas de Let’s Encrypt. Hay que declarar explícitamente la de producción en el resolver ACME.

Conclusión

Traefik gana cómodamente en entornos con muchos servicios pequeños cambiando a menudo, que es exactamente la situación de la mayoría de stacks Swarm: configuración por etiquetas, integración nativa con Docker y certificados automáticos son el combo ganador. Empieza por lo mínimo, no actives el dashboard sin autenticación, añade middlewares conforme los necesites realmente. Y cuando la cosa crezca, tómate en serio el almacenamiento compartido del fichero de certificados: es el tipo de decisión que, mal tomada, te persigue hasta el primer escalado.

¿Te ha resultado útil?
[Total: 10 · Media: 4.4]
  1. Traefik

Escrito por

CEO - Jacar Systems

Apasionado de la tecnología, la infraestructura cloud y la inteligencia artificial. Escribe sobre DevOps, IA, plataformas y software desde Madrid.