Guía Docker: Instalación de Traefik – un moderno proxy inverso para microservicios

Traefik es un moderno proxy inverso HTTP y equilibrador de carga para microservicios. Traefik facilita el despliegue de todos los microservicios, integrándose con los componentes de infraestructura existentes, como Docker, Swarm Mode, Kubernetes, Amazon ECS, Rancher, Etcd, Consul, etc.

Traefik sirve de enrutador para todas tus aplicaciones de microservicios, dirigiendo todas las peticiones de los clientes al destino correcto de los microservicios.

En este tutorial, te mostraré paso a paso cómo instalar y configurar el proxy inverso moderno Traefik como un contenedor Docker en Ubuntu 18.04 LTS (Bionic Beaver).

Requisitos previos

  • Ubuntu 18.04
  • Privilegios de root

¿Qué vamos a hacer?

  1. Instalar Docker en Ubuntu 18.04
  2. Instalar Docker Compose
  3. Crear una red Docker personalizada
  4. Instalar y configurar Traefik
  5. Probar

Paso 1 – Instalar Docker en Ubuntu 18.04

Para esta guía, utilizaremos la última versión de Docker que se puede instalar desde el repositorio oficial de Docker.

Añade la clave y el repositorio de Docker utilizando el siguiente comando.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

El comando ‘add-apt-repository’ actualizará automáticamente todos los repositorios.

Instalar Docker en Ubuntu

Ahora instala la última versión de docker-ce.

sudo apt install docker-ce

Una vez completada la instalación, inicia el servicio docker y habilítalo para que se inicie siempre al arrancar el sistema.

systemctl start docker
systemctl enable docker

La edición comunitaria de docker se ha instalado en el sistema Ubuntu 18.04, comprueba la versión de docker instalada.

docker version

Comprueba la versión de Docker

Además: Ejecutar Docker para un usuario no root

El contenedor Docker se puede ejecutar con un usuario no root. Sólo tenemos que añadir el usuario al grupo docker.

Añade el usuario ‘mohammad’.

useradd -m -s /bin/bash mohammad

Ahora añade el usuario ‘mohammad’ al grupo docker, y luego reinicia el servicio docker.

usermod -a -G docker mohammad
systemctl restart docker

Prueba ejecutando el docker hello-world.

docker run -it hello-world

Y el resultado es el siguiente.

Ejecutar Docker para un usuario no root

Paso 2 – Instalar Docker Compose

Docker-Compose es una herramienta de línea de comandos para definir y gestionar aplicaciones docker multicontenedor.

Docker Compose es un script de python, se puede instalar con el comando pip de python o con el comando apt desde el repositorio de Ubuntu fácilmente. Con compose, podemos ejecutar varios contenedores Docker con un solo comando.

Instala docker compose desde el repositorio utilizando el comando apt que aparece a continuación.

sudo apt install docker-compose

Una vez completada la instalación, comprueba la versión de docker compose.

docker-compose version

En Ubuntu 18.04 se ha instalado la versión 1.17 de docker compose.

Instalar Docker Compose

Paso 3 – Crear una red Docker personalizada

En este tutorial, el contenedor traefik se ejecutará en la red docker personalizada. Así que tenemos que crear una nueva red docker personalizada en el servidor.

Comprueba la red docker disponible en el sistema.

docker network ls

Ahora crea una nueva red personalizada llamada ‘proxy’ para el contenedor traefik.

docker network create proxy

Y obtendrás una cadena aleatoria del nombre del contenedor de red. Comprueba de nuevo la red disponible.

docker network ls

A continuación se muestra el resultado.

Crear una red Docker personalizada

La red docker personalizada llamada ‘proxy’ para traefik ha sido creada.

Paso 4 – Instalar y configurar el proxy inverso de Traefik

En este paso, crearemos el contenedor traefik con letsencrypt HTTPS activado (utilizando un nombre de dominio ‘traefik.hakase-labs.io), y redirigiremos automáticamente HTTP a HTTPS en traefik.

Preinstalación de Traefik

Antes de crear toda la configuración de traefik, necesitamos instalar ‘apache2-utils’ para generar la contraseña htpasswd cifrada y crear el nuevo directorio de traefik.

Instala ‘apache2-utils’ utilizando el comando apt que aparece a continuación.

sudo apt install apache2-utils -y

Ahora ejecuta el comando htpasswd que aparece a continuación para generar una nueva contraseña para la autenticación del panel de control de traefik.

htpasswd -nb mohammad password

Guarda el resultado en tu nota.

mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi.

Instalar y configurar Traefik Reverse Proxy

A continuación, inicia sesión con el usuario ‘mohammad’.

su - mohammad

Crea un nuevo directorio llamado ‘traefik’ para toda la configuración de traefik.

mkdir -p traefik/
cd traefik/

Crear la configuración de Traefik

Ve al directorio ‘traefik’ y crea un nuevo archivo de configuración ‘traefik.toml’ utilizando el editorvim.

cd traefik/
vim traefik.toml

Pega la configuración de abajo.

#Traefik Global Configuration
debug = false
checkNewVersion = true
logLevel = "ERROR"

#Define the EntryPoint for HTTP and HTTPS
defaultEntryPoints = ["https","http"]

#Enable Traefik Dashboard on port 8080
#with basic authentication method
#mohammad and password
[web]
address = ":8080"
[web.auth.basic]
users = ["mohammad:$apr1$hEgpZUN2$OYG3KwpzI3T1FqIg9LIbi."]

#Define the HTTP port 80 and
#HTTPS port 443 EntryPoint
#Enable automatically redirect HTTP to HTTPS
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.http.redirect]
entryPoint = "https"
[entryPoints.https]
address = ":443"
[entryPoints.https.tls]

#Enable retry sending a request if the network error
[retry]

#Define Docker Backend Configuration
[docker]
endpoint = "unix:///var/run/docker.sock"
domain = "traefik.hakase-labs.io"
watch = true
exposedbydefault = false

#Letsencrypt Registration
#Define the Letsencrypt ACME HTTP challenge
[acme]
email = "[email protected]"
storage = "acme.json"
entryPoint = "https"
OnHostRule = true
  [acme.httpChallenge]
  entryPoint = "http"

Guarda y sal.

Nota:

Toda la información sobre la configuración está en la sección de comentarios‘#… ‘.

Crea el script Traefik Docker Compose

Ahora crea el script docker-compose yml.

vim docker-compose.yml

Pega la configuración de abajo.

version: '3'

services:

  traefik:
    image: traefik:latest
    command: --docker --docker.domain=hakase-labs.io
    ports:
      - 80:80
      - 443:443
    networks:
      - proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - ./acme.json:/acme.json
    labels:
      - "traefik.frontend.rule=Host:traefik.hakase-labs.io"
      - "traefik.port=8080"
    container_name: traefik
    restart: always

networks:
  proxy:
    external: true

Guarda y sal.

Nota:

  1. Estamos creando un nuevo contenedor llamado ‘traefik’ basado en la imagen docker ‘traefik:latest’.
  2. El contenedor ‘traefik’ se ejecutará en la red docker personalizada denominada ‘proxy’ y expondrá los puertos externos HTTP 80 y HTTPS 443.
  3. El contenedor montará la configuración de traefik ‘traefik.toml’ y ‘acme.json’, incluyendo el archivo docker sock.
  4. Etiqueta la configuración de traefik, el nombre de dominio del frontend y el puerto de traefik.

Configuración ACME de Letsencrypt

La configuración acme en ‘traefik.toml’ se utiliza para generar automáticamente el SSL letsencrypt. Y es necesaria para el archivo de almacenamiento ‘acme.json’.

Crea un nuevo archivo JSON ‘acme.json’ y cambia el permiso a ‘600’.

touch acme.json
chmod 600 acme.json

Todos los registros sobre la información de SSL letsencrypt se guardarán en el archivo.

Construir el contenedor Traefik

Ahora estamos listos para construir nuestro propio contenedor traefik utilizando los archivos de configuración anteriores.

cd traefik/
ls -lah

Todos los archivos de configuración ‘traefik.toml’, ‘docker-compose.yml’ y ‘acme.json’.

Construir un contenedor Traefik

Construye el contenedor utilizando el comando docker compose de abajo.

docker-compose up -d

Construye el contenedor con docker compose

Cuando se haya completado, comprueba el contenedor en ejecución.

docker-compose ps

Y tendrás el contenedor Traefik en funcionamiento, exponiendo los puertos externos HTTP y HTTPS.

Contenedor Traefik en funcionamiento

Paso 5 – Prueba

Abre tu navegador web y escribe el nombre del dominio de Traefik en la barra de direcciones. El mío es

http://traefik.hakase-labs.io/

Serás redirigido a la conexión HTTPS y se te pedirá el nombre de usuario y la contraseña de autentificación.

Autenticación con contraseña

Entra con el usuario ‘mohammad’ y la contraseña es ‘password’.

Y obtendrás el panel de control de Traefik como se indica a continuación.

Panel de control de Traefik

Página de estado de salud de Traefik.

Página del estado de salud de Traefik

Traefik modern HTTP reverse-proxy ha sido instalado como un contenedor Docker en Ubuntu 18.04.

Referencia

También te podría gustar...