// Engineering Log
Servidores proxy: Parte 8 — Traefik
Publicado el 22.09.2026
// Ruta rapida
Este articulo pertenece al tema Despliegue y estabilidad.
Traefik (se pronuncia «trafik») — proxy inverso y balanceador de carga que toma las rutas no de un archivo estático, sino del entorno: de Docker, Kubernetes, archivos o sistemas de descubrimiento de servicios. Iniciaste un contenedor con las etiquetas necesarias — Traefik creó la ruta y obtuvo el certificado. Lo detuviste — la ruta desapareció.
El proyecto está escrito en Go y se distribuye bajo la licencia MIT; la versión vigente en septiembre de 2026 es v3.7.13 (04.09.2026).
Cómo está construido Traefik
La configuración de Traefik se divide en dos partes.
- Estática se define al arrancar (con claves de línea de comandos, archivo o variables de entorno): en qué puertos aceptar el tráfico (entry points), de dónde tomar las rutas (providers), cómo obtener certificados (certificate resolvers). Para cambiarla, hay que reiniciar Traefik.
- Dinámica viene de los providers y cambia en caliente: routers con reglas como
Host(`app.example.ru`)oPathPrefix(`/api`), services — a dónde enviar la petición, y middlewares — autenticación, cabeceras, redirecciones, limitación de tasa.
La cadena es sencilla: la petición llega a un entry point, el router apropiado selecciona el service y en el camino la procesan los middlewares.
Ejemplo práctico: Traefik y una aplicación en Docker Compose
Abajo está la configuración completa: Traefik acepta HTTP y HTTPS, redirige HTTP a HTTPS, obtiene el certificado de Let’s Encrypt mediante la verificación HTTP-01 y publica la aplicación de prueba whoami en app.example.ru.
services:
traefik:
image: traefik:v3.7
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entryPoints.web.address=:80"
- "--entryPoints.websecure.address=:443"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entryPoints.web.http.redirections.entryPoint.scheme=https"
- "--certificatesresolvers.le.acme.email=admin@example.ru"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"
restart: unless-stopped
app:
image: traefik/whoami
labels:
- "traefik.enable=true"
- "traefik.http.routers.app.rule=Host(`app.example.ru`)"
- "traefik.http.routers.app.entrypoints=websecure"
- "traefik.http.routers.app.tls.certresolver=le"
- "traefik.http.services.app.loadbalancer.server.port=80"Lo importante aquí:
exposedbydefault=false— Traefik publica solo los contenedores con la etiquetatraefik.enable=true. Sin esto, se expondrían todos los contenedores del servidor, incluidas bases de datos con puertos abiertos.- La redirección de
webawebsecurees compatible con la verificación HTTP-01: según la documentación de Traefik, las peticiones de verificación pasan por el puerto 80 incluso con la redirección activada. acme.json— archivo donde Traefik guarda los certificados obtenidos. Debe estar en un volumen; de lo contrario, al recrear el contenedor los certificados se solicitarán de nuevo.loadbalancer.server.portindica el puerto dentro del contenedor de la aplicación. No es necesario publicar ese puerto conports: el tráfico va por la red interna de Docker.
Para añadir un segundo servicio, basta con describirlo con las mismas etiquetas y su propia regla Host — no hace falta tocar la configuración de Traefik.
Middlewares: autenticación, cabeceras, limitaciones
Los middlewares se conectan mediante etiquetas. Ejemplo — cerrar un servicio administrativo con contraseña:
labels:
- "traefik.http.middlewares.auth.basicauth.users=admin:$$apr1$$..."
- "traefik.http.routers.admin.middlewares=auth"El hash de la contraseña se prepara con la utilidad htpasswd; los signos $ en docker-compose deben duplicarse, de lo contrario Compose los interpretará como variables. De los middlewares disponibles, los más usados suelen ser BasicAuth, Headers (cabeceras de seguridad), RedirectScheme, StripPrefix y RateLimit.
Panel de control
Traefik muestra las rutas actuales, los services y los errores en el panel web (--api.dashboard=true). Debe exponerse mediante un router independiente con autenticación y HTTPS. El modo --api.insecure=true publica el panel sin protección y solo sirve para experimentos locales.
Traefik en Kubernetes
En Kubernetes Traefik funciona como controlador de ingress: lee los objetos estándar Ingress, sus recursos IngressRoute y Gateway API. La lógica es la misma: las rutas aparecen junto con los servicios, y los certificados los emite el mismo mecanismo de certificate resolvers.
Errores típicos
- No
exposedbydefault=false. Traefik publica todo, incluidos contenedores de servicio. - Contenedor en otra red. Si la aplicación y Traefik no están en la misma red de Docker, la ruta aparecerá pero las peticiones fallarán con error 502. Mantén ambos en la misma red o especifícala con
--providers.docker.network. - Puerto 80 cerrado. La verificación HTTP-01 se realiza por el puerto 80; sin él no se emitirá el certificado.
- Socket de Docker sin restricciones. El acceso a
/var/run/docker.sockequivale a los permisos de root en el host. móntalo solo en modo lectura y, en entornos sensibles, coloca entre Traefik y Docker un proxy para el socket con un conjunto limitado de métodos de la API. - Signos
$simples en el hash de la contraseña. Compose los sustituirá por variables vacías y la autenticación dejará de funcionar. - Panel abierto.
api.insecure=trueen un servidor en Internet es acceso directo al esquema de tu infraestructura.
Cuándo elegir Traefik
Traefik está justificado cuando los servicios aparecen y desaparecen con frecuencia: hosts Docker con decenas de contenedores, entornos para ramas de desarrollo, Kubernetes. Para varios sitios permanentes en un VPS es más sencillo Caddy, y para balanceo avanzado y TCP — HAProxy. Traefik no sirve archivos estáticos por sí mismo, así que un sitio formado por archivos estáticos aún tendrá que ser servido por un servidor web separado. La comparación de los cinco servidores está en el artículo «Caddy vs. Traefik vs. HAProxy vs. Nginx vs. Apache».
// Tarea parecida
Si estas resolviendo algo parecido
Este articulo pertenece a uno de los temas principales de trabajo. Puedes seguir leyendo sobre el tema, ir a la pagina principal para entender a que me dedico o abrir directamente los servicios.
Tema del articulo
Despliegue y estabilidad
Docker, CI/CD, despliegues, monitoreo, observabilidad y respuesta a incidentes.
Tareas frecuentes de esta tema
- Configurar despliegues sin trabajo manual ni caos
- Añadir monitoreo, alertas y observabilidad base
- Investigar incidentes y estabilizar produccion
// Siguiente paso
Si necesitas ayuda con este tema y no solo otro articulo, es mejor ir directo a la pagina del servicio. La pagina principal y la seleccion de materiales quedan como rutas secundarias.
Abrir servicios// Reviews
Reseñas relacionadas
Mijaíl es un profesional excelente! Se nota que tiene mucha experiencia. El trabajo se hizo con precisión y a tiempo. Tuvimos que lidiar con algunos inconvenientes por las imperfecciones del proyecto que instalamos en el servidor, pero Mijaíl nos guió atentamente y con criterio sobre qué y cómo hacer. ¡Al final, todo funcionó! Lo recomiendo a quien valore la calidad del trabajo.
Mijaíl es un excelente profesional. Se nota que es una persona con una gran experiencia. El trabajo se realizó de forma clara y dentro del plazo. Hubo que trabajar más debido a las imperfecciones del proyecto que se …
// Contact
¿Necesitas ayuda?
Escríbeme y te ayudaré a resolver el problema
Respondo en un día laborable (03:00-13:00 GMT)
Или оставьте заявку здесь:
// Related