/ HOWTO

Cómo y por qué configurar Traefik como reverse proxy en una aplicación Rails (Parte1)


Escenario: tienes diferentes microservicios o aplicaciones funcionando en una red interna, y necesitas exponerlos a una red pública. Necesitas un proxy reverso.

Nginx o Apache pueden cumplir perfectamente esta función, aunque hoy en día hay una nueva categoria de proxys reversos pensados para microservicios y también diseñados para “dialogar” con plataformas de contenedores como Docker, Kubernetes, etc.

Este es el caso de Traefik.

Resumen:

  1. ¿Cómo y por qué instalar Traefik como proxy reverso?
  2. Instalación básica de test.
  3. Integración con Docker Compose.

¿Por qué Traefik?

Como comentamos anteriormente, Traefik cumple una función de proxy reverso rápido y facil de instalar.

También incluye otras caracteristicas interesantes:

  • Implementa encriptación HTTPS con LetsEncrypt (soporta certificados con “wildcards”)
  • Configuración con Autoreload (sin necesidad de re-iniciar el servicio)
  • Soporta distintos algoritmos de balanceo de carga.
  • Modo de Alta Disponibilidad (en beta)
  • Dashboard visual para moniterear status.
  • Exporta sus métricas (Rest, Prometheus, Graphana, etc).
  • Unifica los logs.
  • Super rápido (escrito en Go).

De todas las características, cuatro de ellas me interesaron para una aplicación Rails:

  • Super rápido y sencillo de instalar como reverse proxy.
  • Implementación de HTTPS con LetsEncrypt mas simple que con NGINX o Apache.
  • Integración con Docker.
  • Dashboard para monitorear.

ejemplo de traefik dashboard funcionandoEn sintesis, y sin querer ser muy redundante, estas son algunas de las razones por las que te interesaria utilizar Traefik:

  • SSL sencillo. Necesitas mantener una conexión segura (SSL o TLS) en tu servidor NGINX o Apache, y Traefik como proxy reverso simplificará esta funcionalidad (gestionando la conexion SSL y renovando los certificados con LetsEncrypt automaticamente). De este modo también quitas complejidad de tus webservers.
  • Integración con Docker. Tienes aplicaciones montadas sobre Docker, Docker Swarm o Kubernetes, y quieres exponerlas, sin escribir complejos archivos de setup. Traefik trae un modo “autodiscovery” para de detectar todos los contenedores habilitados y exponerlos en la red pública.
  • Integración Continua con Blue Green Deployment pattern: necesitas desplegar a un entorno de producción una version nueva automaticamente, y para ellos, una vez desplegada, deseas desactivar la version anterior y activar la nueva version, minimizando downtime. (este es el escenario que mas me interesa). Mas información sobre Blue Green Deployments pattern.

¿Traefik 2.0 RC1 o 1.7.x Stable?

Hay un varios tutoriales de como usar Traefik, pero cuidado. La documentación no está actualizada y la version 2.0 (al momento es RC1) no es compatible con la 1.7, por lo que muchos de los ejemplos que veas en Internet, hay que confirmar bien si son para 1.7.x o para 2.0 RC, ya que perderás mucho tiempo probando ejemplos que no funcionan correctamente. Puntualmente, la version 2.0 RC no interpretaba correctamente el archivo de configuración TOML, y algunas instrucciones no eran tenidas en cuenta y no generan warnings. Esto me trajo bastantes dolores de cabeza :)

En este post, vamos a explicar como :

  • Cómo instalar y testear traefik 1.7.
  • Crear una receta de Docker-Compose para gestionarlo.

Instalar Traefik con Docker Compose.

  1. Crear un archivo docker-compose.yml con la siguiente configuración:

    version: '3'
       
    services:
      reverse-proxy:
        image: traefik:alpine 
        command: --api --docker 
        ports:
          - "80:80"     
          - "8080:8080" 
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock
    
  2. Luego docker-compose up -d
  3. Al finalizar, es posible acceder a http://localhost:8080 y ver Traefik dashboard funcionando correctamente.

Hasta aquí hemos configurado Traefik de modo que:

  • Se crea un contenedor a partir de una imagen tipo alpine (reducida en espacio)
  • Activando el puerto 8080 con el Dashboard (Ojo, sin ningun tipo de seguridad)
  • Escuchando contenedores Docker.

Cualquier nuevo contenedor que instancies, automaticamente será mapeado por Traefik y expuesto.

En la parte 2 de este post, crearemos un contenedor y lo conectaremos con Traefik, configuraremos diferentes redes en Docker para diferenciar el backend y el frontend y por último crearemos los certificados SSL para testear en un entorno de desarrollo.

Subscríbete y recibirás los últimos artículos semanalmente en tu email.