En la anterior entrada vimos cómo crear un contenedor de Traefik y tenerlo preparado para enrutar todos los servicios que levantemos y queramos tener accesibles desde el mismo puerto.

Para ello, partiremos del fichero docker-compose.yml que usamos en el anterior post y haremos que el propio Traefik se auto registre a sí mismo, con el fin de tener un endpoint accesible en nuestra LAN.

Para ello, en dicho fichero añadiremos el tag labels para nuestro servicio y lo informaremos con lo siguiente:

labels:
      - "traefik.http.routers.api.service=api@internal"
      - "traefik.http.routers.api.middlewares=auth"
      - "traefik.http.middlewares.auth.basicauth.users=admin:admin"
      - "traefik.enable=true"
      - "traefik.port=8080"
      - "traefik.backend=traefik"
      - "traefik.frontend.rule=Host:traefik.lan"
      - "traefik.docker.network=traefik_net"
      - "traefik.http.routers.api.entrypoints=lan"
      - "traefik.http.routers.api.rule=Host(`traefik.lan`)"
Labels para conectar el propio Traefik a sí mismo

De nuevo, desgranemos el contenido de lo que estamos añadiendo:

  • traefik.http.routers.api.service=api@internal: Creamos una ruta llamada api y le indicamos que apunte al servicio api@internal de Traefik, para poder acceder al dashboard.
  • traefik.http.routers.api.middlewares=auth: Añadimos un middleware que será el encargado de añadir cierta autenticación al dashboard, con el fin de no tenerlo expuesto sin ningún tipo de seguridad.
  • traefik.http.middlewares.auth.basicauth.users=admin:admin: Creamos una entrada de autenticación básica, en este ejemplo será el usuario admin y contraseña igual... Obviamente en nuestro sistema lo pondremos más "currado".
  • traefik.enable=true: La etiqueta más importante de todas. Con ella hacemos que el componente sea visible para Traefik. Si no la ponemos es lo mismo que si la pusiéramos a false, por lo que no veríamos dicho componente en Traefik.
  • traefik.port=8080: Indicamos el puerto al que Traefik deberá enrutar las peticiones, puesto que queremos mostrar el dashboard y éste se expone en el puerto 8080, lo redirigimos a él.
  • traefik.backend=traefik: Le damos un nombre en Traefik.
  • traefik.frontend.rule=Host:traefik.lan: Indicamos el host que escuchará el componente. En nuestro caso, vamos a exponerlo en la intranet, bajo el host traefik.lan.
  • traefik.docker.network=traefiknet: La red que creamos para Traefik y que deberán tener todos los componentes que queramos conectar con él. Puesto que nuestro componente puede estar conectado a varias redes, aquí le indicamos cuál es la que usa Traefik.
  • traefik.http.routers.api.entrypoints=lan: Indicamos en qué entryPoint de los que Traefik tiene desplegados queremos que el componente se conecte. Recordad que declaramos 2 entryPoints, uno para las peticiones HTTPS y otro para la LAN, cuyo puerto no estará accesible desde el exterior.
  • traefik.http.routers.api.rule=Host(`traefik.lan`): Aquí indicamos qué regla asociamos con el componente. Podemos especificar un host o varios, un path (por ejemplo, todas las peticiones que vayan a /dashboard redirigirlas aquí), combinarlas, añadir más reglas... etc. Para este caso iremos a lo simple.
Las rutas que estamos declarando para este ejemplo reciben el nombre de api, cada servicio tendrá que tener su nombre o entrarán en conflicto.

Una vez tenemos las etiquetas configuradas, iniciamos el componente con la orden docker-compose up -d y accedemos en el navegador a http://traefik.lan:8080 y veremos algo como lo siguiente:

Dashboard de Traefik
Dashboard de Traefik

Como podéis ver en la imagen, tengo 2 entryPoints creados, cada uno escuchando en un puerto, y con los servicios y rutas creados. Si accedemos a dichas rutas, veremos algo como:

Donde vemos la regla que hemos creado y a través de la cual hemos accedido a dicho dashboard.

En la siguiente entrada, veremos cómo levantar otro servicio, como por ejemplo una página web.