¿Traefik en Docker, en LXC o en una VM sobre Proxmox?
Traefik se puede ejecutar de varias formas en Proxmox. Puedes desplegarlo como contenedor Docker, instalar el binario de Traefik dentro de un contenedor LXC o ponerlo en una máquina virtual dedicada.
Estas opciones se solapan. Docker describe cómo se empaqueta Traefik, mientras que LXC y las máquinas virtuales describen dónde se ejecuta. Los diseños más habituales son Docker dentro de una máquina virtual, Docker dentro de un contenedor LXC o una instalación nativa de Traefik dentro de LXC.
Para la mayoría de usuarios de Proxmox, la mejor opción por defecto es Traefik en Docker dentro de una máquina virtual pequeña y dedicada. Ofrece una integración sencilla con Docker, un aislamiento más fuerte y una resolución de problemas más simple. Una instalación nativa en LXC puede ser más eficiente, pero exige más configuración manual. Docker dentro de LXC funciona, aunque añade una complejidad que muchos entornos no necesitan.
¿Por qué ejecutar Traefik en Proxmox?
Traefik recibe las peticiones dirigidas a las aplicaciones internas y las reenvía al servicio correcto. Puede encargarse del enrutamiento por dominio, los certificados HTTPS, las redirecciones, el middleware de autenticación y el balanceo de carga.
Una sola instancia de Traefik puede enrutar tráfico hacia aplicaciones que se ejecutan en varias máquinas virtuales de Proxmox, contenedores LXC, hosts Docker y servidores físicos. El destino solo tiene que ser accesible por la red.
Traefik funciona especialmente bien con Docker, porque su proveedor de Docker puede descubrir contenedores y crear reglas de enrutamiento a partir de etiquetas. Cuando arranca una aplicación etiquetada, Traefik puede crear su ruta automáticamente, y cuando la aplicación se elimina, la ruta desaparece.
El servidor que aloja Traefik se convierte en una pieza importante de la infraestructura. Si deja de funcionar, las aplicaciones que hay detrás pueden seguir operativas, pero los usuarios ya no podrán llegar a ellas por sus nombres de dominio habituales. Por eso el aislamiento, las copias de seguridad y la recuperación importan más que ahorrar un poco de memoria.
¿Deberías ejecutar Traefik en Docker?
Docker es el método de despliegue más cómodo cuando Traefik va a hacer de proxy para otras aplicaciones Docker.
Traefik ofrece una imagen oficial de Docker y documenta Docker como uno de sus métodos de instalación principales. Un despliegue básico se puede definir en Docker Compose, incluidos los puertos, las redes, los archivos de configuración, el almacenamiento de certificados y el acceso al proveedor de Docker.
Docker Compose también hace que la instalación sea portable. El archivo Compose se puede guardar en control de versiones, copiar a un servidor de reemplazo y usar para volver a crear el contenedor de Traefik.
Las rutas de las aplicaciones se pueden declarar en etiquetas de Docker junto a cada servicio, lo que mantiene unidas la aplicación y sus necesidades de enrutamiento. Un despliegue de Immich, por ejemplo, puede declarar su dominio, su puerto interno y sus ajustes HTTPS en el mismo proyecto Compose.
La principal preocupación es el acceso a la API de Docker. Traefik suele leer la información de los contenedores a través del socket de Docker. La documentación de Traefik advierte de que el acceso sin restricciones a la API de Docker es un problema de seguridad, porque comprometer Traefik podría exponer el host Docker subyacente. Docker también describe su daemon como una superficie de ataque sensible que solo deberían controlar usuarios de confianza.
Montar el socket en solo lectura limita las operaciones normales con archivos, pero no elimina todos los riesgos relacionados con la API. Un diseño más sólido puede usar un proxy de socket restringido o un endpoint remoto de Docker protegido.
Docker es, por tanto, un método de empaquetado excelente, pero el host Docker sigue necesitando una frontera de aislamiento adecuada.
¿Conviene ejecutar Docker dentro de una VM de Proxmox?
Ejecutar Docker y Traefik dentro de una máquina virtual dedicada es la recomendación general más segura.
Las máquinas virtuales de Proxmox usan KVM y tienen un kernel invitado propio, mientras que los contenedores LXC comparten el kernel del host Proxmox. Por eso una máquina virtual crea una frontera más fuerte entre el proxy inverso expuesto a internet y el host Proxmox.
La documentación de Proxmox ha recomendado históricamente ejecutar plataformas de contenedores de aplicaciones como Docker dentro de una máquina virtual QEMU. Así se dispone de un entorno de kernel completo y se evitan los requisitos adicionales de anidamiento que aparecen cuando Docker funciona dentro de LXC.
Una VM para Traefik no necesita muchos recursos. Un invitado Linux modesto, con poca capacidad de procesador y poca memoria, puede atender muchos servicios de homelab o de pequeña empresa, aunque el volumen de tráfico, los registros de acceso y el middleware influirán en los requisitos finales.
La máquina virtual puede tener una dirección IP reservada y acceso directo a los puertos 80 y 443. Dentro de ella, Docker Compose puede ejecutar Traefik y cualquier herramienta de apoyo.
Una VM también es fácil de mover entre nodos de Proxmox. Puede entrar en los flujos normales de migración, copias de seguridad y alta disponibilidad de Proxmox. Recuperarla puede consistir en restaurar el invitado completo o en reconstruirlo a partir de los archivos Compose y de configuración guardados.
La desventaja es la sobrecarga. Una máquina virtual ejecuta un sistema operativo invitado completo y usa más memoria y almacenamiento que un contenedor LXC mínimo, aunque en la práctica esa sobrecarga suele ser pequeña comparada con el aislamiento y la sencillez operativa que aporta.
¿Deberías instalar Traefik directamente en LXC?
Instalar el binario de Traefik directamente dentro de un contenedor LXC es el despliegue limpio más ligero.
Proxmox usa LXC para los contenedores de sistema operativo. Un invitado LXC comparte el kernel del host, pero mantiene su propio sistema de archivos, sus procesos, su configuración de red y sus límites de recursos. Proxmox admite contenedores sin privilegios, en los que el root del contenedor se asigna a un usuario sin privilegios fuera de él.
Un despliegue nativo en LXC evita Docker por completo. Puedes descargar el binario de Traefik, crear un servicio del sistema y guardar la configuración estática y dinámica dentro del contenedor.
Este enfoque usa pocos recursos y reduce el número de capas de software. Puede funcionar bien cuando Traefik enruta sobre todo hacia máquinas virtuales externas, aplicaciones en LXC o servidores físicos.
La contrapartida es la gestión manual. Tienes que encargarte tú de las actualizaciones del binario, los archivos de servicio, los permisos, el almacenamiento de certificados y las rutas de configuración. También pierdes el descubrimiento automático de Docker, salvo que Traefik se conecte en remoto a un host Docker aparte.
El LXC nativo es una opción sensata para administradores Linux con experiencia que quieren un appliance de proxy pequeño y dedicado. Es menos cómodo para equipos que quieren desplegar con Docker Compose y usar etiquetas automáticas en los contenedores.
¿Deberías ejecutar Docker dentro de LXC?
Docker puede ejecutarse dentro de LXC, pero es el más complicado de los tres diseños habituales.
Proxmox ofrece funciones de contenedor como el anidamiento y keyctl, que pueden hacer falta para cargas de trabajo Docker. La documentación de Proxmox señala que activar el anidamiento expone al contenedor parte de la información de procesos y del sistema del host. Su documentación de configuración actual también indica que keyctl es necesario para usar Docker dentro de un contenedor sin privilegios.
Docker dentro de LXC puede resultar atractivo porque usa menos recursos que una máquina virtual completa, y muchos usuarios de homelab lo ejecutan sin problemas.
Pueden surgir problemas con los controladores del sistema de archivos, las asignaciones de usuarios, las funciones del kernel, el comportamiento de las copias de seguridad y los permisos de seguridad. Resolverlos puede exigir entender a la vez Docker, LXC y el host Proxmox.
Esta configuración además mete una plataforma de contenedores dentro de otra frontera de contenedor. Eso puede ser aceptable en un laboratorio, pero aísla menos que una VM dedicada y sigue siendo más complicado que una instalación nativa en LXC. Para un servicio expuesto a internet, la pequeña ganancia de eficiencia rara vez justifica la complejidad operativa añadida.
¿Conviene ejecutar Traefik en el host Proxmox?
Normalmente, Traefik no debería instalarse directamente en el host Proxmox.
El host Proxmox se encarga de la virtualización, el almacenamiento, las redes y la gestión del clúster. Añadir un proxy inverso expuesto a internet trae paquetes, puertos, archivos de configuración y necesidades de actualización que no tienen nada que ver con el hipervisor. Un error de configuración del proxy también podría interferir con la interfaz de gestión de Proxmox o exponer servicios que deberían seguir siendo privados.
Mantener Traefik dentro de un invitado hace que el diseño sea más fácil de documentar, migrar, respaldar y sustituir. También reduce las consecuencias de un compromiso a nivel de aplicación y deja que el host Proxmox se centre en ejecutar y proteger las cargas de trabajo.
¿Qué despliegue es el mejor?
Elige Docker dentro de una máquina virtual dedicada cuando quieras el mejor equilibrio entre sencillez, aislamiento e integración con Docker. Es la mejor opción por defecto para la mayoría de entornos de producción, de pequeña empresa y de homelab serios.
Elige Traefik nativo dentro de un contenedor LXC sin privilegios cuando importe la eficiencia de recursos y no te importe gestionar a mano el binario y la configuración del servicio.
Elige Docker dentro de LXC solo cuando entiendas el anidamiento de Proxmox, los permisos de los contenedores y las contrapartidas de seguridad. Puede funcionar, pero rara vez es el diseño más sencillo.
Elijas la opción que elijas, pon Traefik en una red de confianza, expón solo los puertos necesarios y restringe el acceso a su panel. Guarda la configuración en control de versiones, haz copia de seguridad de los datos de certificados y prueba la recuperación antes de depender del proxy para servicios importantes.
Para la mayoría de despliegues de Proxmox, una VM Linux pequeña con Docker Compose y Traefik es la solución más limpia a largo plazo. Usa algo más de recursos, pero es más fácil de proteger, mover, reconstruir y diagnosticar.