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
Opinión de Hacker News