Traefik es un proxy inverso y equilibrador de carga líder para operaciones nativas en la nube y cargas de trabajo en contenedores. Funciona como un enrutador de borde que publica sus servicios en Internet.
Traefik enruta las solicitudes a sus contenedores haciendo coincidir los atributos de la solicitud, como el dominio, la URL y el puerto. El proxy incorpora detección automática de servicios para que pueda agregar nuevos contenedores en tiempo real, sin reiniciar el servicio Traefik.
En esta guía, armaremos una distribución simple de Traefik v2 que publicará múltiples contenedores Docker. Esto le permite utilizar una instalación de Docker para proporcionar varios servicios en el mismo puerto, como una aplicación web, una API y un panel de administración.
Para comenzar
Es más fácil implementar Traefik usando su propia imagen de Docker. Supongamos que está ejecutando Traefik con Docker durante el resto de esta guía. Los binarios de un solo archivo están disponibles como una opción alternativa si prefiere que Traefik esté fuera de la instalación de Docker.
Debe crear un archivo de configuración antes de poder comenzar a usar Traefik. Agregue el siguiente contenido aa traefik.toml
archivo - explicaremos lo que hace a continuación:
[entryPoints] [entryPoints.http] address = ":80" [entryPoints.http.http.redirections.entryPoint] to = "https" scheme = "https" [entryPoints.https] address = ":443" [providers] [providers.docker] network = "traefik"
Este archivo de configuración configura Traefik con dos "puntos de entrada". Los puntos de entrada describen cómo llegan las solicitudes al servicio Traefik. Los puntos de entrada HTTP y HTTPS se crean para escuchar en los puertos 80 y 443 respectivamente. En el caso de una solicitud HTTP, se usa una regla de redirección para reenviarla al https
punto de entrada en su lugar. Elimine la sección de redirección si desea poder servir contenido a través de HTTP simple.
La sección "proveedor" configura las fuentes que definen sus rutas de red. Los proveedores son simplemente componentes de infraestructura que pueden enviar instrucciones de enrutamiento a Traefik. Si lo desea, puede escribir un punto final de API HTTP personalizado para definir sus rutas.
En este ejemplo, lo estamos simplificando y usando el docker
proveedor. Esto supervisa los contenedores de Docker que se ejecutan en su host. Cuando aparece un nuevo contenedor con etiquetas específicas de Traefik, esos valores se utilizarán para establecer una ruta al contenedor. Los contenedores deberán estar conectados a la traefik
Docker network para que esto funcione, ya que esa es la red especificada en el archivo de configuración. Crea la red ahora:
docker network create traefik
A partir de Traefik
¡Ya está listo para iniciar Traefik! Implemente un nuevo contenedor con la imagen de Traefik. Vincule los puertos 80 y 443 a su host, lo que permite que Traefik escuche las solicitudes entrantes. También debe unir el contenedor al traefik
red previamente creada.
Monte el socket Docker de su host en el contenedor Traefik con el -v
bandera. Esto le da a Traefik la capacidad de acceder a otros contenedores que se ejecutan en su host, lo que permite la detección automática de rutas a través del docker
proveedor establecido en el archivo de configuración. El archivo de configuración en sí está montado en /traefik.toml
dentro del contenedor Traefik.
docker run -d -p 80:80 -p 443:443 -v $PWD/traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock --name traefik --network traefik traefik:2.6
Luego inicie un par de contenedores para verificar que Traefik funciona:
docker run -d --label traefik.http.routers.apache.rule=Host(`apache.example.com`) --name apache --network traefik httpd:latest docker run -d --label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) --name nginx --network traefik nginx:latest
Asegúrese de haber agregado los registros DNS para apache.example.com
Y nginx.example.com
ese mapa a su host Traefik. Debería poder visitar esos dominios en su navegador para ver las páginas de inicio predeterminadas de Apache y NGINX, respectivamente. Los dos contenedores están conectados a la red Traefik; su traefik.http.routers
las etiquetas establecen rutas base que coinciden con las solicitudes entrantes en función del valor de las suyas Host
título.
tráfico de ruta
Traefik admite varios "emparejadores" para enrutar su tráfico. Usamos el comparador de host anterior, pero también puede enrutar a través del método HTTP, encabezados, URI, dirección IP y parámetros de cadena de consulta. Agregue más comparadores a sus contenedores para crear reglas de enrutamiento más complejas.
Traefik también admite middleware que le permite modificar la solicitud antes de que llegue a sus servicios. Es posible que desee agregar un prefijo, ajustar encabezados o aplicar autenticación básica a nivel de proxy. Aquí hay un ejemplo de uso Headers
middleware para agregar extra X-Proxied-By
encabezado de solicitud:
docker run -d --label traefik.http.routers.nginx.rule=Host(`nginx.example.com`) --label traefik.http.middlewares.demo.headers.customrequestheaders.X-Proxied-By=traefik --name nginx --network traefik nginx:latest
Traefik dirige el tráfico a los puertos expuestos de sus contenedores. Puede especificar un puerto diferente configurando el traefik.http.services.<demo-service>.loadbalancer.server.port=8080
etiqueta.
Agregar SSL
A continuación, debe agregar SSL para asegurarse de que su tráfico sea completamente seguro. Traefik incluye la integración de Let's Encrypt, por lo que la usaremos ahora para automatizar la generación de certificados.
Añade la siguiente sección a la tuya traefik.toml
Archivo:
[certificatesResolvers.lets-encrypt.acme] email = "[email protected]" storage = "/acme.json" [certificatesResolvers.lets-encrypt.acme.tlsChallenge]
Esto configura Traefik para usar el proveedor Let's Encrypt ACME al resolver solicitudes de certificados. Asegúrese de reemplazar la dirección de correo electrónico con la suya para recibir los recordatorios de caducidad del certificado enviados por Let's Encrypt. El tlsChallenge
la sección define cómo se lleva a cabo la verificación de la certificación; si lo deja en blanco, utilizará el flujo predeterminado para servir un archivo único que Let's Encrypt solicitará y validará al emitir el certificado.
Reinicie o reemplace su contenedor Traefik para aplicar la nueva configuración. También debe montar un nuevo archivo en /acme.json
dentro del contenedor: Traefik lo usará para almacenar certificados.
docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock --name traefik --network traefik traefik:2.6
Usando el tablero
Traefik incluye una interfaz de usuario web que ofrece una vista gráfica de los puntos finales, proveedores y servicios (contenedores) activos en la implementación. Puede exponer la interfaz de usuario estableciendo una ruta para ella en el archivo de configuración.
Primero edite su existente traefik.toml
con la siguiente sección:
[api] dashboard = true [providers.file] filename = "/traefik_dashboard.toml"
Siguiente crear traefik_dashboard.toml
con el siguiente contenido:
[http.middleware.dashboard_auth.basicAuth] users = [ "admin:$123..." ] [http.routers.api] rule = "Host(`traefik.example.com`)" entrypoints = ["https"] middlewares = ["dashboard_auth"] service = "[email protected]" [http.routers.api.tls] certResolver = "lets-encrypt"
El nuevo archivo es necesario como Traefik ya que no admite configuración "dinámica" (servicios y enrutadores) junto con valores "estáticos" en su traefik.toml
. El archivo de configuración del tablero define manualmente una ruta asignada traefik.example.com
al servicio de la interfaz de usuario web interna. El providers.file
línea añadida a traefik.toml
registrar la nueva definición de ruta con el file
proveedor.
Usar htpasswd
para generar un conjunto de credenciales de autenticación básica HTTP. Agregue la cadena generada a users
matriz en dashboard_auth
software intermedio. Deberá usar este nombre de usuario y contraseña para iniciar sesión en el tablero.
sudo apt install apache2-utils htpasswd -nb admin your_password # Outputs admin:$123...
Ahora reinicie Traefik con su configuración actualizada, recordando montar la nueva traefik_dashboard.toml
también archivo:
docker run -d -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v $PWD/traefik_dashboard.toml:/traefik_dashboard.toml -v /var/run/docker.sock:/var/run/docker.sock --name traefik --network traefik traefik:2.6
Debería poder acceder al tablero yendo a traefik.example.com
en tu navegador. Si no desea exponer la interfaz de usuario web como una ruta y siempre iniciará sesión desde su computadora local, puede publicar el puerto 8080
en su lugar en su contenedor Traefik. Edita tu traefik.toml
archivo con la siguiente sección:
[api] dashboard = true insecure = true
docker run -d -p 8080:8080 -p 80:80 -p 443:443 -v $PWD/acme.json:/acme.json -v $PWD/traefik.toml:/traefik.toml -v /var/run/docker.sock:/var/run/docker.sock --name traefik --network traefik traefik:2.6
Esto le permitirá acceder al tablero a través de http://localhost:8080
. Este enfoque no debe usarse en entornos de producción seguros, pero le permite configurar experimentos locales más rápido.
Conclusión
Traefik es una solución de proxy inverso versátil para sus contenedores. En este artículo, hemos cubierto solo las características más básicas. Además del uso básico con Docker, Traefik también funciona con las principales soluciones de orquestación de contenedores, incluidos Kubernetes, Docker Swarm y Mesos.
Traefik proporciona una API REST y métricas en formatos que incluyen Prometheus, InfluxDB, Datadog y Statsd. Estas capacidades le permiten automatizar e instrumentar implementaciones de Traefik junto con otros componentes de infraestructura en su pila. Es una forma ideal de publicar cargas de trabajo en contenedores en todo el mundo sin usar una solución de orquestación completa.
Descubre más contenido