3 puntos por GN⁺ 2024-05-06 | 1 comentarios | Compartir por WhatsApp

Por qué deberías revisar Traefik aunque no uses contenedores

Lo que se sabe de Traefik

  • Traefik tiene como objetivo ayudar en el mundo de los microservicios.
  • Muchos youtubers comparten que gestionan infraestructura de contenedores como Docker o Kubernetes.
  • Traefik se ejecuta en contenedores y, montando el socket de Docker en el contenedor de Traefik, puede detectar automáticamente otros contenedores que quieras exponer con Traefik.
  • Permite configurar el comportamiento de proxy de un contenedor específico mediante etiquetas.
  • Traefik solicita certificados TLS automáticamente desde Let's Encrypt y deja los servicios disponibles tan pronto como detecta que hay un nuevo contenedor.

Por qué Traefik sigue siendo útil incluso sin usar contenedores

Malentendido común: no necesitas un motor de contenedores

  • Traefik no necesita ejecutarse en un motor de contenedores, y los servicios tampoco necesitan hacerlo.
  • Traefik está escrito en Golang y se compila como un único ejecutable.
  • Es agradable encontrarse con software escrito en Golang y compilado como un único binario.
  • El despliegue es fácil y mantiene control total.

Malentendido común: también soporta archivos de configuración

  • Sin usar contenedores, no puedes usar labels de contenedores, pero las labels son confusas y difíciles de leer.
  • Traefik también puede configurarse con archivos.
  • Traefik separa la configuración en una parte "estática", que incluye proveedores de certificados (por ejemplo, Let's Encrypt) y entrypoints (los puertos en los que escucha Traefik), y una parte "dinámica", que incluye routers, servicios y middlewares.
  • Traefik escucha eventos del sistema de archivos y puede recargar en caliente la parte dinámica.

Buena documentación

  • Explica claramente todos los conceptos en los que se basa Traefik.
  • Las páginas relacionadas muestran ejemplos de configuración para la forma de instancia que elijas.
  • La documentación cubre la mayoría de los casos de uso.
  • La barra lateral es útil.

Traefik parece sólido y bien diseñado

  • Traefik emite advertencias cuando la configuración no tiene sentido y no muestra fallos aleatorios (hasta ahora).
  • Aparentemente no escribe muchos logs por defecto, pero es fácil de entender cómo se procesan las solicitudes y empezar rápido sin frustración.

Funcionalidades que realmente me gustan

TLS passthrough y PROXY Protocol

  • Traefik soporta TLS passthrough y el PROXY Protocol de HAProxy (de entrada y de salida).
  • TLS passthrough significa que puedes reenviar tráfico hacia un servicio web que entregue sus propios certificados TLS.
  • Puedes solicitar directamente a Let's Encrypt desde el servicio sin terminar TLS en el proxy.
  • El protocolo PROXY es una forma más segura de transmitir la información que se pierde cuando el cliente llega primero al proxy.
  • El PROXY Protocol también debe ser soportado por el servicio destino. En el caso de Apache2 y Nginx (y por eso PHP), sí lo soporta, y la lista de servicios compatibles sigue creciendo.

Puntos débiles al usar Traefik

Autenticación

  • En NGINX, se usaba Vouch Proxy para proteger ciertos servicios con Azure AD.
  • Traefik soporta ForwardAuth, que es similar a la autenticación de NGINX, pero Vouch Proxy aún no funciona en Traefik.
  • Puedes desplegar una instancia de Keycloak y luego integrarla con AAD para usarla con ForwardAuth, pero primero debes mantener esa instancia de Keycloak segura y actualizada.
  • traefik-forward-auth se recomienda con frecuencia, pero su última actualización fue en junio de 2020; el maintainer desapareció de GitHub y habría que actualizar sus dependencias.
  • Tuve una mala experiencia previa con oauth2-proxy.
  • HTTP/2/3, timeouts, tamaño de body y WebSocket necesitan configuración en cualquier proxy entre el usuario y el servicio, así que proxificar mediante otro proxy da muchos errores.
  • Traefik ForwardAuth parece simple, así que para integrarlo con AAD tendrás que crear tu propia herramienta simple o hacer fork de traefik-forward-auth, auditarlo y actualizar sus dependencias.

Bloqueo de User-Agent e IP

  • No quiero que archive.org archive servicios internos.
  • Como robots.txt y encabezados similares no funcionan para bloquear a Archive.org, las opciones son bloquear el User-Agent "archive.org_bot" o bloquear su rango de IPs.
  • En Traefik, bloquear User-Agent o direcciones IP solo es posible mediante plugins de terceros.
  • No me gustan los plugins de terceros porque debes tenerlos en cuenta al actualizar y pueden introducir vulnerabilidades de seguridad.
  • Puedes usar el middleware IPAllowList para bloquear IPs y permitir todo lo demás salvo las IPs que quieras bloquear.
  • Puedes calcular rangos de IP y bloquear eso; no está mal comparado con bloquear IPs manualmente, pero no se ve con elegancia qué subred quedó bloqueada exactamente.

Opinión de GN+

  • Traefik se ve como una solución de reverse proxy atractiva sin importar que uses o no contenedores. En especial, el hecho de que esté escrito en Go y compilado en un único ejecutable lo hace fácil de desplegar y administrar.
  • La documentación también está bien hecha y seguramente ayuda mucho a entender los conceptos de Traefik y encontrar ejemplos de configuración.
  • Además, parece soportar muy bien funciones avanzadas como TLS passthrough o PROXY Protocol.
  • En cuanto a autenticación, todavía no parece haber una solución satisfactoria; parece que haría falta desarrollar un sistema propio o mejorar un proyecto existente.
  • Sería ideal que el bloqueo de User-Agent e IP viniera incorporado de fábrica, pero fuera del uso de plugins de terceros no se ve una forma elegante.
  • Traefik vale la pena considerar como alternativa a NGINX, especialmente si la complejidad de configuración de NGINX te parece demasiado alta.

1 comentarios

 
GN⁺ 2024-05-06
Opinión de Hacker News
  • Comparación de pros y contras de Traefik
    • Ventajas: migré de NGINX a Traefik gracias a la integración automática de Let's Encrypt.
    • Desventajas: la documentación no está bien hecha, también es insuficiente el logging y la regeneración de certificados falla intermitentemente, causando incidentes en producción.
    • Finalmente regresé a NGINX.
  • Opiniones que prefieren usar Caddy en lugar de Traefik
    • Caddyfile es mucho más fácil de administrar que la configuración YAML de Traefik.
    • Soporte de múltiples plugins (por ejemplo, el plugin Coraza WAF de Caddy)
  • Discusión sobre casos de uso donde Traefik podría tener ventajas sobre NGINX
    • En un entorno de algunas decenas de contenedores Docker, NGINX Proxy Manager ya es suficiente.
    • En K3s, Traefik viene configurado por defecto, lo que facilita armar rápidamente un clúster K8s para pruebas.
  • Si estás considerando cambiarte de Caddy a Traefik
    • Ventajas de Caddy: configuración automática basada en etiquetas Docker, gestión de certificados TLS, configuración DNS automática, etc.
    • Desventajas de Caddy: cuando un workload se reinicia, Caddy se reinicia por completo y causa una caída temporal del servicio, y la configuración de certificados wildcard es complicada.
    • Dada mi buena experiencia usando Traefik en entornos K8s, estoy evaluando aplicarlo también en proyectos personales.
  • Experiencias al migrar de Traefik a Caddy por la dificultad de la configuración y depuración dinámica de Traefik
    • Caddy es más conciso y tiene menos capas, por lo que su configuración es mucho más fácil.
  • Ventajas de la configuración estática al usar Traefik durante mucho tiempo
    • La dificultad de la configuración dinámica mediante etiquetas Docker y la incomodidad de depurarla.
    • Generar un archivo de configuración estático simple para combinaciones de host/target/puerto mediante un motor de plantillas.
    • Automatizar la generación y despliegue de los archivos de configuración con Ansible.
  • Comparación con HAProxy
    • Llevaba más de 10 años usando HAProxy y se ha modernizado para la era cloud con configuración dinámica a través de Runtime API.
  • Mayor ventaja y desventaja de usar Traefik
    • Ventaja: al pasar la configuración por etiquetas Docker, casi no hace falta modificar directamente la configuración de Traefik.
    • Desventaja: lo más difícil de Traefik es su pronunciación (a uno le da por decir “trey-feek”).