Traefik v3.0 ya está disponible e incluye soporte para Kubernetes Gateway API, WebAssembly y más. Aquí puedes ver cómo actualizar a v3.0
Este año se cumple el noveno aniversario de Traefik y hoy se convirtió en uno de los gateways modernos más utilizados, con más de 3 mil millones de descargas y más de 750 colaboradores. Está en el Top 15 de DockerHub y tiene 47.000 estrellas en GitHub. Aquí en SREDevOps.org, Traefik es nuestro IngressController favorito y ya lo utilizamos en nuestro Cluster Kubernetes con k3s v1.29.4.
Traefik 1.0 se lanzó en 2016. Tres años después, nació Traefik 2.0. Hoy, después de 5 años de desarrollo, Traefik 3.0 está generalmente disponible 🎉
Traefik v3.0 es un gran paso adelante en el mundo cloud native, añadiendo soporte para las últimas tecnologías como WASM, OpenTelemetry, Kubernetes Gateway API y SPIFFE.
El registro de cambios en Github es impresionante, con más de 200 pull requests fusionados, cada uno con nuevas características. La lista de nuevas posibilidades es tan grande que desde TraefikLabs publicarán una serie de artículos en su blog, cada uno profundizando en una característica.
¿Cómo puedo migrar desde Traefik v2 a v3?
Una nueva major version siempre es algo muy esperado: nuevo diseño, nuevas funcionalidades, mejor experiencia de usuario... Pero la desventaja suele ser el dolor y riesgos de migrar. Una versión mayor a menudo significa cambios de última hora, pero eso no debería implicar una experiencia de migración dolorosa, y con Traefik v3 es muy fácil migrar y actualizar.
Traefik v3, incluye un proceso de transición simplificado desde v2. Como recordatorio, Traefik tiene 2 tipos de configuraciones:
La configuración estática que se carga cuando Traefik se inicia y gestiona las opciones globales
Ejemplo: Traefik + Kubernetes Ingress
## Static configuration
## Todas las opciones:
## https://doc.traefik.io/traefik/providers/kubernetes-ingress/#provider-configuration
providers:
kubernetesIngress:
namespaces:
- "mynamespace"
## Ejemplo de Kubernetes Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myingress
namespace: mynamespace
annotations:
# Traefik Entrypoint configurado en puerto 80
traefik.ingress.kubernetes.io/router.entrypoints: web
# Traefik Entrypoint configurado en puerto 443
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
rules:
- host: example.com
http:
paths:
- path: /bar
pathType: Exact
backend:
service:
name: whoami
port:
number: 80 # Puerto del servicio whoami
- path: /foo
pathType: Exact
backend:
service:
name: whoami
port:
number: 80 # Puerto del servicio whoami
La configuración dinámica se puede actualizar mientras Traefik está en funcionamiento y contiene todas las reglas de routing
Se han realizado cambios mínimos en opciones específicas de la configuración estática, y se asegura la compatibilidad con la sintaxis de la v2 en la configuración dinámica. Esto ofrecerá un cambio gradual para adoptar la sintaxis v3, permitiendo a los usuarios migrar progresivamente tus IngressResources de Kubernetes, Docker tags, etc. al nuevo formato.
Ejemplo: Cómo migrar Traefik de v2.11 a v3.0 en Kubernetes
Paso 1: Preparar y probar
Lo primero que hay que hacer es identificar cómo afecta a tu configuración estática los cambios realizados en v3. Los cambios incompatibles son mínimos y se dirigen a opciones muy específicas, en el 90% de los casos de uso, este proceso debería llevar un par de minutos solamente.
Algunos ejemplos de cambios incompatibles:
Característica | Deprecated | Eliminación |
---|---|---|
Kubernetes CRD Provider API Version traefik.io/v1alpha1 |
3.0 | 4.0 |
Kubernetes Ingress API Version networking.k8s.io/v1beta1 |
N/A | 3.0 |
CRD API Version apiextensions.k8s.io/v1beta1 |
N/A | 3.0 |
También debes considerar:
- Docker y Swarm son ahora 2 providers distintos
- HTTP/3 ya no es una opción experimental,
- Rancher v1 ha sido abandonado ya que el proyecto ya no se mantiene activamente, etc.
Consulta la documentación sobre configuración estática, así como la sección operaciones, para obtener la lista completa y preparar tu nueva configuración estática v3.
Agrega este snippet a tu configuración estática actual, así utilizarás por defecto la sintaxis v2 en tus actuales recursos que utilizan Traefik:
core:
defaultRuleSyntax: v2
Cuando estés listo para probar, inicia Traefik v3 con esta nueva configuración. Si no obtienes ningún registro de error, estás OK, de lo contrario, no hay problema, las opciones de migración restantes se explican en los logs de Traefik y puedes aplicarlos.
Cuando tu entorno de prueba no muestre errores de Traefik en v3 y los accesos a tus aplicaciones, APIs, services, etc; funcionan, puedes pasar al siguiente paso.
Paso 2: Rolling Update
Ahora que has probado tu configuración estática actualizada, es el momento de migrar progresivamente tus instancias de producción a Traefik v3. Utilice el mecanismo de rolling update de Kubernetes para reemplazar incrementalmente los Pods actuales por los nuevos.
Mientras la actualización continua está en curso, revisa constantemente el tráfico de entrada en busca de errores inesperados (o inusuales), y ten preparado un rollback para volver a la configuración funcional. Luego, aprovecha el logging, registros de depuración y acceso de Traefik para comprender y solucionar el problema antes de volver a actualizar. En caso de que no estés seguro, consulta la documentación o comenta en nuestro Discord.
Una vez que todos los pods estén actualizados... 🎉🎊🍾 puedes pasar al último paso.
Paso 3: Actualización Progresiva de Ingresses
Ahora que ejecutas Traefik v3, comienza a migrar tus ingress al nuevo formato.
La configuración dinámica en v3 tiene algunos cambios. Por ejemplo, los Router Rule Matchers tienen una sintaxis actualizada, se ha modificado Kubernetes Ingress API Group y se ha eliminado la opción TCP LoadBalancer terminationDelay
. La lista completa se puede encontrar en la sección configuración dinámica de la documentación de migración.
Progresivamente, cambia cada router a la sintaxis v3, prueba y actualiza cada IngressResource y comprueba que el tráfico de entrada no se ve afectado. Una vez validada la migración de un IngressResource v3, puedes eliminar el IngressResource v2 y desplegar la versión v3. Repita por cada IngressResource.
Al final del proceso, puedes eliminar con seguridad el snippet añadido en el paso 1:
core:
defaultRuleSyntax: v2
...y listo, ya estás totalmente migrado a Traefik v3 🎉! Y lo has hecho de forma progresiva, manteniendo el control durante todo el proceso, con la opción de revertir cualquier cambio en cualquier momento.
Este ejemplo con Kubernetes se puede hacer en cualquier orquestador o entorno, el proceso sigue siendo el mismo.
Pronto publicaremos más artículos sobre el soporte a WASM (y el plugin Web Application Firewall), OpenTelemetry, SPIFFE/Tailscale/HTTP/3, y Kubernetes Gateway API.
Enlaces útiles
- Traefik 3.0 en GitHub & en DockerHub
- Traefik Docs, Página web, & GitHub
- Foro de la comunidad
Fuente:
- Register with Email
- Login with LinkedIn
- Login with GitHub