Cómo monitorear Traefik con Traefik Pilot

Pilot es una nueva plataforma SaaS que lanzó Containous para simplificar el manejo de Traefik en producción y en este artículo, te muestro como configurarlo.

Monitorear nuestros sistemas es clave, no solo para saber si están funcionando, sino que también para verificar su salud y performance. En el caso de Pilot, no solo se queda en el monitoreo, sino que es capaz de darles más funcionalidades a Traefik con Plugins.

Como les comenté en la bajada, Pilot es un Software como Servicio y para usarlo debemos conectar nuestro Traefik a este servicio.

Para eso, lo primero que vamos a hacer es ir a pilot.traefik.io:

My Traefik Instances

Y haremos un clic donde dice Connect with Traefik Pilot

Lo siguiente que haremos es autenticarnos, si es la primera vez que entramos, hacemos un clic en "SIGN UP" pero si ya estamos registrados, con que nos autentiquemos con nuestro usuario y contraseña o usando Google o Github, estamos bien.

Una vez autenticado, veremos una pantalla como esta, en la que haremos clic en el botón "Register New Instance"

Lo siguiente que veremos será esta pantalla, donde debemos definir el nombre de nuestro token, también hay que elegir como vamos a configurarlo, en mi caso, voy a elegir "CLI" para pasarle este token a través de los parámetros en un docker-compose.yml.

Otra cosa que hay que entender es que necesitamos desplegar la versión de Traefik 2.3 RC. En mi caso, el docker-compose.yml queda así:

version: "3.3"

services:
  traefik:
    container_name: traefik
    image: "traefik:v2.3.0-rc3"
    command:
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --providers.docker
      - --experimental.pilot.token=04196125-bfa5-4413-bf1c-8cebed72b11b
      - --api
      - --api.dashboard=true
      - --log.level=DEBUG
      - --certificatesresolvers.leresolver.acme.httpchallenge=true
      - --certificatesresolvers.leresolver.acme.email=tu@email.com
      - --certificatesresolvers.leresolver.acme.storage=./traefik-data/acme.json
      - --certificatesresolvers.leresolver.acme.httpchallenge.entrypoint=web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./traefik-data/acme.json:/acme.json"
    labels:
      # global redirect to https
      - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)"
      - "traefik.http.routers.http-catchall.entrypoints=web"
      - "traefik.http.routers.http-catchall.middlewares=redirect-to-https"

      # triying to make work dashboard
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.rule=Host(`url-dashboard`)"
      - "traefik.http.routers.traefik.service=api@internal"
      - "traefik.http.routers.traefik.tls.certresolver=leresolver"
      - "traefik.http.routers.traefik.entrypoints=web"
      - "traefik.http.routers.traefik.middlewares=authtraefik"
      - "traefik.http.middlewares.authtraefik.basicauth.users=<user:password>"

      # middleware redirect
      - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"

Lo ejecutamos con lo siguiente:

docker-compose up -d

La terminal nos debería devolver algo como esto:

Creating network "traefik_default" with the default driver
Pulling traefik (traefik:v2.3.0-rc3)...
v2.3.0-rc3: Pulling from library/traefik
cbdbe7a5bc2a: Already exists
f16506d32a25: Already exists
66ff3ca89287: Pull complete
e7e137e3eecd: Pull complete
Digest: sha256:778681d67906a68b30b996bed899d3dd06bc703f9e526abcbc53a6325562eb33
Status: Downloaded newer image for traefik:v2.3.0-rc3
Creating traefik ... done

Una vez que esta listo. Veremos en Pilot nuestra instancia.

Como ven, esta hace 11 minutos corriendo, esta UP y esto corriendo la versión
2.3.0-rc3 de Traefik.

Por último, podemos configurar una notificación para que nos mande un email cada vez que encuentre un problema de seguridad en nuestra instancia o bien, detecte que la misma esta caida.

Para eso, vamos a nuestro perfil, el cual se verá de esta manera:

En mi caso, tengo configurado para que me avise cada vez que cualquiera de las dos cosas suceda.

Las notificaciones, se deberían ver más o menos así:

Este es el caso de una vulnerabilidad encontrada

Para hacer una prueba, tiré Traefik y al cabo de unos minutos en Pilot, veremos lo siguiente:

Ese signo amarillo en el "status" significa que está instancia de Traefik no esta siendo alcanzada en los últimos 5 minutos.

Para ir cerrando

¿Cómo ven Pilot? ¿Lo ven útil? Particularmente creo que si es útil, sobre todo porque podemos darle funcionalidades extras a Traefik con Plugins (De los que ya hablaremos más adelante) y nos da avisos de vulnerabilidades de seguridad que pueda a llegar a tener el contenedor.

Te invito a que le pegues una probada y me cuentes qué te pareció.