Cómo configurar Traefik para contenedores Docker en Ubuntu 20.04

Traefik es uno de los métodos modernos que se utiliza para configurar un proxy inverso para contenedores docker. Cuando desee ejecutar varias aplicaciones en contenedores acoplables que expongan los puertos 80 y 443, traefik puede ser la mejor opción para el proxy inverso. Traefik proporciona su propio panel de monitoreo. También puede usar Traefik para el balanceador de carga HTTP. En este artículo, vamos a configurar Traefik v2.4 en Ubuntu 20.04 con un ejemplo simple.

requisitos previos

  • Ubuntu 20.04 LTS
  • Docker CE (edición comunitaria)
  • Conexión a Internet para descargar paquetes
  • Cuenta de usuario con privilegios de Sudo
  • Un dominio para el panel traefik [Should be maintained A record]
  • Un dominio para el sitio de wordpress [Should be maintained A record]

En este artículo, usamos ‘linuxtechi.local’ como dominio y ‘traefik.linuxtechi.local’ como FQDN para el tablero de Traefik.

Pasos para configurar Traefik en Ubuntu 20.04

En este artículo, primero configuraremos Traefik y luego registraremos WodressPress Container en traefik para proxy inverso y equilibrio de carga. Configuraremos Traefik para servir todo a través de HTTPS utilizando el certificado Let’s encrypt SSL.

Siga los pasos a continuación para configurar el proxy inverso Traefik.

1 ) Configurar Traefik

Cree archivos de configuración y configure una contraseña cifrada para acceder al panel de control de traefik. Puede utilizar la utilidad htpasswd para crear la contraseña cifrada. Para usar la utilidad htpasswd, instale la utilidad con el siguiente comando.

$ sudo apt-get install -y apache2-utils

Una vez completada la instalación, ejecute el siguiente comando para generar una contraseña cifrada. En este ejemplo he usado “[email protected]#” para cifrar. Puedes tener tus propias suposiciones. El usuario se toma como «administrador», puede reemplazarlo con su propio nombre de usuario.

$ htpasswd -nb admin [email protected]#

Obtendrá una contraseña cifrada como:

[email protected]:~$ htpasswd -nb admin [email protected]#
admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/
[email protected]:~$

Copie este resultado y guárdelo en algún lugar, ya que necesitamos usar esta contraseña cifrada en el archivo de configuración de Traefik para configurar la autenticación básica para el tablero de Traefik.

Ahora cree un archivo de configuración llamado traefik.toml usando el formato TOML. Usaremos tres proveedores de Traefik, a saber, api, docker y acme. Acme proporciona certificados TLS de vamos a cifrar.

Cree un archivo traefik.toml con los siguientes contenidos

$ vi traefik.toml
[entryPoints]
  [entryPoints.web]
    address = ":80"
    [entryPoints.web.http.redirections.entryPoint]
      to = "websecure"
      scheme = "https"
  [entryPoints.websecure]
    address = ":443"

[api]
  dashboard = true
[certificatesResolvers.lets-encrypt.acme]
  email = "[email protected]"
  storage = "acme.json"
  [certificatesResolvers.lets-encrypt.acme.tlsChallenge]

[providers.docker]
  watch = true
  network = "web"

[providers.file]
  filename = "traefik_secure.toml"

Guarde y cierre el archivo

En el archivo anterior, el punto de entrada web maneja el puerto 80 mientras que el punto de entrada websecure maneja el puerto 443 para la conexión SSL/TLS.

Todo el tráfico en el puerto 80 se redirige a la fuerza al punto de entrada seguro de la web para asegurar las conexiones. No olvide cambiar el correo electrónico y el dominio en el archivo anterior ‘traefik.toml’ que se adapte a su configuración.

Vamos a crear el otro archivo ‘traefik_secure.toml’ con los siguientes contenidos.

$ vi traefik_secure.toml
[http.middlewares.simpleAuth.basicAuth]
  users = [
    "admin:$apr1$V.9MT9VH$MtLgwiAa4jq1ngDVvTdJu/"
  ]

[http.routers.api]
  rule = "Host(`traefik.linuxtechi.local`)"
  entrypoints = ["websecure"]
  middlewares = ["simpleAuth"]
  service = "[email protected]"
  [http.routers.api.tls]
    certResolver = "lets-encrypt"

Guardar y salir del archivo.

El contenido de arriba habilitará la autenticación de nombre de usuario y contraseña para el tablero de Traefik y también habilitará el cifrado de certificados TLS para enrutadores http.

No olvide cambiar la cadena de contraseña para el usuario administrador y la entrada del host en el archivo anterior que se adapte a su configuración.

2) Ejecución del contenedor traefik

Cree una nueva red acoplable para que el proxy la comparta entre contenedores. Use el siguiente comando para crear una red acoplable.

$ docker network create web

Cuando inicie el contenedor traefik, agregue el contenedor a esta red. Puede agregar contenedores adicionales a esta red para que Traefik funcione como un proxy inverso.

Cree un archivo vacío que contenga información de Vamos a cifrar y modifique el permiso en consecuencia.

$ touch acme.json
$ chmod 600 acme.json

Una vez que este archivo json se mueva al contenedor docker, la propiedad se cambiará a raíz automáticamente.

Crea un contenedor traefik usando el siguiente comando:

$ docker run -d 
   -v /var/run/docker.sock:/var/run/docker.sock 
   -v $PWD/traefik.toml:/traefik.toml 
   -v $PWD/traefik_secure.toml:/traefik_secure.toml 
   -v $PWD/acme.json:/acme.json 
   -p 80:80 
   -p 443:443 
   --network web 
   --name traefik 
    traefik:v2.4

Como el comando es demasiado largo, se ha dividido en varias líneas.

Ahora puede acceder al tablero de traefik para monitorear la salud de los contenedores. Vaya a https://su_dominio.com/dashboard/ [Replace your_domain with your own domain] y proporcionar credenciales de administrador [username is admin and password is encrypted password created in above step]. En mi caso, la URL sería:

https://traefik.linuxtechi.local/dashboard/

Traefik-login-window-Ubuntu

Una vez que haya iniciado sesión en el tablero, tendrá la siguiente interfaz.

Traefik-Dashboard-Ubuntu

3) Registrar Contenedores en Traefik

Ha configurado Traefik que se ejecuta en su servidor. En este paso, agregaré un contenedor de WordPress para Traefik al proxy. El contenedor de WordPress se administrará con Docker Compose.

Vamos a crear un archivo docker-compose.yml con los siguientes contenidos.

$ vi docker-compose.yml

Para especificar la versión y la red que usaremos, agregue las siguientes líneas al archivo.

version: "3"
networks:
  web:
    external: true
  internal:
    external: false

He usado la versión 3 porque es la última versión de Docker Compose. Traefik reconocerá nuestras aplicaciones solo si forman parte de la misma red. En los pasos anteriores, creé la red docker manualmente con el nombre de red web, por lo que incluí esta red en el archivo docker-compose.yml y la expuse a un proxy externo para traefik. He definido otra red para conectar nuestra aplicación con el contenedor de la base de datos que no es necesario exponer a través de traefik.

Ahora defina cada uno de los servicios. En primer lugar, cree un servicio para la aplicación de WordPress. Agregue las siguientes líneas en el archivo docker-compose.yml.

services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: [email protected]#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - traefik.http.routers.blog.tls=true
      - traefik.http.routers.blog.tls.certresolver=lets-encrypt
      - traefik.port=80
    networks:
      - internal
      - web
    depends_on:
      - mysql

He usado traefik.port=80, traefik usará este puerto para enrutar el tráfico al contenedor de WordPress.

Reemplace Host: blog.linuxtechi.com con su propio dominio de sitio de WordPress

Ahora, debe configurar el servicio MySQL para la base de datos. Agregue las siguientes líneas al final del archivo docker-compose.yml

mysql:
  image: mysql:latest
  environment:
    MYSQL_ROOT_PASSWORD: [email protected]#
    MYSQL_DATABASE: wordpress_db
    MYSQL_USER: dbuser
    MYSQL_PASSWORD: [email protected]#
  networks:
    - internal
  labels:
    - traefik.enable=false

En este ejemplo, he usado la última imagen de MySQL para un contenedor de base de datos. Las variables de entorno para el servicio wordress y mysql se han definido en el propio archivo. El servicio MySQL no es necesario para el proxy usando traefik, por lo que solo he usado redes internas.

Su archivo docker-compose.yml completo se verá así:

version: "3"
networks:
  web:
    external: true
  internal:
    external: false
services:
  wordpress:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: dbuser
      WORDPRESS_DB_PASSWORD: [email protected]#
      WORDPRESS_DB_NAME: wordpress_db
    labels:
      - traefik.http.routers.blog.rule=Host(`blog.linuxtechi.local`)
      - traefik.http.routers.blog.tls=true
      - traefik.http.routers.blog.tls.certresolver=lets-encrypt
      - traefik.port=80
    networks:
      - internal
      - web
    depends_on:
      - mysql

  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: [email protected]#
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: dbuser
      MYSQL_PASSWORD: [email protected]#
    networks:
      - internal
    labels:
      - traefik.enable=false

Guarde el archivo y salga del archivo.

Ahora ejecute el siguiente comando para crear un contenedor de MySQL y wordpress.

$ docker-compose up -d

Ahora navegue al tablero de Traefik y haga clic en enrutadores HTTP, encontrará nuevos contenedores agregados al tablero.

WordPress-Frontend-Traefik-Ubuntu

Ahora usa la url blog.linuxtechi.local [Replace with your domain]. Será redirigido al asistente de instalación de WordPress con conexión TLS.

WordPress-Instalación-Traefik-Ubuntu

Complete el asistente de instalación. Ahora está todo bien para usar su sitio de WordPress.

Conclusión:

En este artículo, ha aprendido a configurar traefik en Ubuntu 20.04. Tiene una idea de cómo registrar contenedores automáticamente en traefik para el equilibrio de carga y el proxy inverso. Además, aprendiste a configurar sitios de WordPress con el proxy traefik.

Leer también : Cómo configurar el registro privado de Docker en Ubuntu 20.04

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *