Docker: Træfik como proxy inverso

Docker: Træfik como proxy inverso

Træfik es una herramienta muy interesante para utilizar como proxy inverso. Es muy sencillo el desplegarlo y la configuración de este es casi automática. Es capaz de interactuar con diferentes backends como; Kubernetes, docker, mesos, swarm… además de esto, puede generar certificados válidos con let’s encrypt al vuelo. Y es capaz de crear balanceos de carga de una manera autónoma. Incluye opciones interesantes como; HTTP/2, HA en modo cluster, actualización de la configuración en caliente…

En definitiva, es una herramienta muy útil si se quiere tener varios servicios docker que requieran del mismo puerto. La arquitectura de træfik, sería la siguiente:

Las peticiones mediante SNI entran en træfik y este se encarga de redirigirlas al servicio que toque.

Aquí va el proceso de como desplegar træfik con docker y configurarlo para poder usarlo.

Despliegue

Crear el directorio de træfik

Descargar el archivo de configuración
Nota: revisar el archivo de configuración para adecuarlo a las necesidades. Este archivo está preparado únicamente para realizar conexiones por el puerto 80. Más adelante se explicará como hacer para conexiones cifradas.

Crear la red específica para træfik. Este paso es importante hacerlo, para que luego todos los contenedores que quieran hacer uso de træfik poder agregarlos a esta red

Una vez hecho esto, hay 2 formas de desplegar træfik, con docker run o con docker-compose

Docker run

Docker-compose

Lanzar el docker

Una vez hecho esto, ya tenemos træfik levantado. Para acceder a el para revisar el status de los servicios, se hace mediante la web

Ahora solo queda el desplegar servicios. Para la prueba, vamos a desplegar un wordpress.

Para empezar crear la carpeta

Descargar el docker-compose de wordpress (editar lo que se necesite)

La parte importante de este docker-compose, es la parte de labels que es donde se declaran las acciones de træfik

Para los servicios que no se quieran publicar:

Para los servicios que se quieran publicar:

Træfik tiene muchas mas opciones para definir. Mas info aquí

Ahora levantamos el wordpress

Y automágicamente, una vez desplegado el wordpress, aparecerá en træfik

Ahora para acceder a el, necesitamos una entrada DNS que sea de la siguiente forma:

Ya sea un CNAME o un registro A o incluso se puede poner en el /etc/hosts de nuestra máquina.

Una vez hecho esto, podemos acceder a nuestra página de la siguiente manera

Con la configuración actual de træfik, solo se puede acceder por el puerto 80. Si se quisiese acceder por el puerto 443 habría que hacer lo siguiente

HTTPS con Let’s Encrypt

Træfik tiene una opción muy interesante, que es crear certificados al vuelo con let’s encrypt. Para quien no conozca let’s encrypt, es una entidad certificadora gratuita y  conocida por todos los navegadores. Con esta opción, una vez levantado el docker con el servicio, træfik crea automáticamente un certificado y puede llegar a forzar las conexiones por el puerto 443 para garantizar la seguridad de estas.

Para hacer esto, lo único que hay que hacer es editar el traefik.toml y añadir lo siguiente:

Y añadir al docker-compose.yml

Para que træfik coja la configuración, hay que reiniciarlo

Escalado y balanceo

Además de todo lo comentado anteriormente, træfik es capaz de realizar balanceos round-robin automáticamente. Simplemente, escalando el servicio de docker que estemos usando con el mismo backend, træfik lo identifica y balancea las peticiones. Para hacer una prueba, vamos a escalar el wordpress

Si vemos los contenedores activos de docker

Como se puede apreciar hay ahora 2 instancias de wordpress que esto visto en træfik sería de la siguiente manera:

Y si se cayese o saturase uno de los wordpress, las conexiones se seguirían realizando por el otro contenedor.

Y esto es todo amigos 😉

2 Comments
  • Horacio Herrera
    Posted at 08:26h, 05 septiembre Responder

    Buen Post!, gracias por compartirlo!

    lo he intentado hacer pero no me queda claro como `dockerserver` termina siendo la direccion a tu servidor. es algo automatico o es una configuracion que ya tenias?

    • Ismael Chasco
      Posted at 12:32h, 07 septiembre Responder

      Buenas,

      correcto, dockerserver sería un registro DNS previamente creado que apunta al Host donde está instalado docker con Traefik. Traefik al funcionar con SNI tienes que tener un registro DNS ya sea en tu archivo hosts o en un servidor DNS, apuntando a la IP del host donde esté instalado.

      Si tienes alguna duda mas coméntame.

      Un saludo,

Post A Comment

CAPTCHA