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.

Traefik V3 Migration Documentation | Traefik | v3.0
Migrate from Traefik Proxy v2 to v3 and update all the necessary configurations to take advantage of all the improvements. Read the technical documentation.

Ejemplo: Cómo migrar Traefik de v2.11 a v3.0 en Kubernetes

💡
Asegurate de realizar este ejemplo en un entorno de pruebas. Personalmente recomiendo utilizar Lima (Linux Machines) y k3s, compatible con macOS y Linux de muy fácil y rápido uso.

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.

Traefik V3 Migration Documentation - Traefik
Migrate from Traefik Proxy v2 to v3 and update all the necessary configurations to take advantage of all the improvements. Read the technical documentation.

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.

⚠️ Antes de activar cualquier cambio en producción, asegurate de tener monitoreo sobre el tráfico de entrada para detectar instantáneamente cualquier problema. Traefik es compatible con distintos métodos de observabilidad, como OpenTelemetry, Prometheus y otros.

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.

📍 Ten en cuenta que este paso se puede hacer más tarde, ya que Traefik v3 es compatible con el formato v2 de configuración dinámica. Pero, por supuesto, puede empezar a utilizar las nuevas características de inmediato en los nuevos ingresses, y migrar los ingresses más antiguos después.
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

Fuente:

Traefik 3.0 GA Has Landed: Here’s How to Migrate
After 5 years of development, the wait is finally over: Traefik 3.0 is generally available! This article will focus on the beginning, the elephant in the room: the migration.
Nicolás Georger

Nicolás Georger

Self-taught IT professional driving innovation & social impact with cybernetics, open source (Linux, Kubernetes), AI & ML. Building a thriving SRE/DevOps community at SREDevOps.org. I specialize in simplifying solutions through cloud native technologies and DevOps practices.