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?
- Instalar Docker en Ubuntu 18.04
- Instalar Docker Compose
- Crear una red Docker personalizada
- Instalar y configurar Traefik
- 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.
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
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.
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.
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.
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.
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:
- Estamos creando un nuevo contenedor llamado ‘traefik’ basado en la imagen docker ‘traefik:latest’.
- El contenedor ‘traefik’ se ejecutará en la red docker personalizada denominada ‘proxy’ y expondrá los puertos externos HTTP 80 y HTTPS 443.
- El contenedor montará la configuración de traefik ‘traefik.toml’ y ‘acme.json’, incluyendo el archivo docker sock.
- 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’.
Construye el contenedor utilizando el comando docker compose de abajo.
docker-compose up -d
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.
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.
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.
Página de estado de salud de Traefik.
Traefik modern HTTP reverse-proxy ha sido instalado como un contenedor Docker en Ubuntu 18.04.