Tienda Wifi

Tienda Wifi
CiudadWireless es la tienda Wifi recomendada por elhacker.NET

Entradas Mensuales

Síguenos en:

Canal Oficial Telegram de elhacker.NET Grupo Facebook elhacker.NET Twitter elhacker.NET Canal Youtube elhacker.NET Comunidad Steam: Grupo elhacker.NET

Suscripción

¿Quieres recibir las últimas novedades del blog en tu correo?

¡Suscríbete al feed!

Entradas populares

PostHeaderIcon Traefik: un proxy inverso para contenedores Docker


Traefik es un enrutador. Una herramienta que se encarga de conectar servicios con rutas. Y se encarga de hacerlo, de forma sencilla y cómoda. Traefik se encargará de dirigir el tráfico al contenedor correcto y de forma precisa. Pero además, todo esto lo puedes hacer sobre la marcha, sin necesidad de detener Traefik cada vez que pongas en marcha un nuevo servicio.




Si no conoces Docker, te recomiendo que realices el tutorial de Docker antes de adentrarte con Traefik, o al menos que le des un primer vistazo, porque de lo contrario, es posible que te pierdas.

Para utilizar Traefik, necesitarás por una parte unos mínimos conocimientos de contenedores, por lo menos para el enfoque que le voy a dar, que es dirigido básicamente a Docker. Esto no quiere decir que descarte adentrarme en otros proveedores.

Si no conoces Traefik, y por simplificar al máximo, indicarte que se trata de un enrutador. Una herramienta que te permite conectar distintas url con el servicio que tu quieras. Básicamente un proxy inverso dinámico.

Imagina que tienes varios servicios funcionando en tu VPS o en tu servidor, y quieres que asignar a cada uno de esos servicios una url, por ejemplo servicio1.dominio.com a tu servicio1, servicio2.dominio.com a tu servicio2 y así sucesivamente. Traefik se encarga de hacer esto de forma auto mágica. En cuanto a ¿que servicios pueden ser?, simplemente, los que tu quieras.

Traefik, entre otras muchas cosas, se encarga de realizar un descubrimiento automático, tanto de servicios, como de la configuración de esos servicios, a base de inspeccionar la infraestructura en la que reside Traefik.

Traefik: ¿qué es y para qué sirve?

Traefik es un router que permite publicar servicios en internet de una manera rápida y sencilla. Recibe peticiones y determina qué servicios deben responderlas. Existen otras herramientas parecidas que también actúan cómo proxy inverso tales cómo haproxy.

Traefik es el mejor proxy inverso o «reverse proxy» que podemos utilizar para llegar a todos los servicios que tenemos en el servidor NAS, tan solo será necesario abrir dos puertos (el 80 y el 443), y automáticamente traefik nos redireccionará internamente a los diferentes servicios y servidores que tengamos corriendo en el servidor NAS. Según la documentación oficial, Traefik es un «Edge Router» que permite acceder a todos los servicios del interior. Este software recibe solicitudes de nombre en su sistema, y descubre qué componentes de dentro deben responder a estas solicitudes. Este software es capaz de descubrir automáticamente los contenedores Docker que tengamos, siempre y cuando le pasemos unas «labels», de esta forma, podremos automatizar el reconocimiento de los diferentes contenedores por parte de Traefik, es compatible con Docker, Docker Swarm, Kubernetes, AWS y otros. Si queremos añadir o retirar servicios lo podremos hacer en tiempo real sin necesidad de reiniciar el servicio, esto es ideal para no interrumpir el servicio.



Traefik «entiende» ficheros de configuración toml y yml, en RedesZone hemos configurado todo con yml ya que es más limpio (en nuestra opinión). Básicamente traefik dispone de dos ficheros de configuración, el traefik.yml que es el archivo de configuración global, y otro archivo que es el dynamic-conf.yml (pero lo podemos llamar como queramos) que se encarga de interconectar los diferentes servicios internamente.

Para reconocer los diferentes servicios de los Docker podremos hacerlo vía «labels» a la hora de crear el contenedor Docker, o poniéndolo en el archivo dinámico dynamic-conf.yml, en nuestra opinión, creemos que es mejor hacerlo directamente en el archivo «file» para no depender de los labels que hayamos configurado en cada uno de los contenedores, e ir uno por uno. Es mucho más sencillo hacerlo en este archivo y realizar todas las configuraciones desde aquí de forma masiva, sin necesidad de reconfigurar el docker-compose o ir contenedor por contenedor configurándolo todo.


Conceptos Trafik

A continuación, un par de conceptos importantes. Incluyo el nombre original en inglés, y mi traducción, para que no haya lugar a dudas de a que me refiero.

  • Edge Router (enrutador de borde). Traefik es un Edge Router; esto significa que es la puerta a tu plataforma. Se encarga de interceptar cada petición que se realiza y enrutarla al servicio correcto. Traefik, sabe la lógica y las reglas que determinan que servicio es el encargado de gestionar cada petición.
  • Auto Service Discovery (servicio de auto descubrimiento). Mientras que los proxies tradicionales necesitan una configuración concreta que contiene las rutas a cada uno de los servicios, en el caso de Traefik, estas rutas son extraídas directamente de los propios servicios. De esta manera, cuando tu levantas, despliegas, un nuevo servicio, en él, indicas la información que Traefik necesita para gestionar el enrutamiento hacia el mismo.

Por ejemplo, pongamos que tienes dos páginas en WordPress en sus correspondientes contenedores. A la hora de desplegarlas, tu añadirás la información necesaria, para que Traefik sepa como llevar las peticiones a esos servicios. Una vez levantado el contendor, Traefik, se encarga de extraer esa información, y sin necesidad de detenerse, empezar a dirigir el tráfico a un WordPress o al otro.

Traefik, monitoriza la infraestructura sobre la que está asentado, de forma que sabe cuando se despliega un nuevo servicio, por ejemplo en un contenedor, en este caso. Una vez sabe que se ha desplegado el contenedor, extrae la información que necesita para dirigir el tráfico a ese nuevo servicio.

Pero ¿que pasa cuando detienes un servicio? Como te digo, dado que Traefik, está monitorizando la infraestructura, cuando detengas un servicio, se dará cuenta de esto, y dejará e enrutar tráfico al mismo.

  • Rules (reglas). Para determinar que ruta está asociada que servicio, Traefik utiliza reglas. Estas reglas, como verás en siguientes capítulos de este tutorial, pueden ser desde palabras o expresiones regulares en el encabezado de la petición, o en la propia ruta. Pero no solo esto, sino que ademas podrás combinar diferentes reglas.
  • Middleware (lo de enmedio). Traefik es capaz de modificar o incluso enriquecer una determinada petición antes de que llegue al servicio destino. Por ejemplo, puede añadir un mecanismo de autenticación previo, limitar el número de peticiones, reintentar la petición en caso de que se produzca un error.

¿Y como realiza Traefik el auto descubrimiento? Esto lo hace en base a la infraestructura sobre la que reside. Para ello, es necesario que indiques a Traefiek, el provider (proveedor) que sustenta la infraestructura.

Existen diferentes proveedores, como puede ser Docker, Kubernetes, Rancher, Consul, Redis, etc.

EntryPoints en Traefik o puntos de entrada

Como deciamos en la introducción, el viaje desde que llamas a un servicio detrás de Traefik, hasta que esa llamada llega a su destino, pasa por cuatro puntos,

  • Los entrypoints o puntos de entrada. Básicamente se refiere a los elementos que están escuchando por el tráfico entrante. En general a los puertos de llegada, pero no siempre. Digamos que son las orejas de Traefik. Por ejemplo, los puntos de entrada en mi configuración están definidos de la siguiente forma en el archivo traefik.yml

entryPoints indica los puntos de entrada. En este caso, están indicado los dos puertos por defecto, el 80 y el 443 para conexiones seguras. En el caso de que necesites mas puertos este es el lugar correcto para hacerlo.

¿Qué es lo que sucede cuando se llama a un servicio de los que hayas levantado detrás de Traefik?. Cualquier llamada que llegue, el primer paso es conectarse a un punto de entrada, que en la mayor parte de las veces se corresponderá con un puerto, aunque no siempre. A partir, de aquí en función de la ruta que hayas pasado, y siguiendo las reglas que hayas establecido se dirigirá a uno u a otro servicio. Incluso, si has establecido algún tipo de mecanismo intermedio, middleware, es probable que se apliquen determinadas transformaciones, antes de que lleguen al servicio al que querías llegar. Aquí nos vamos a quedar en los entrypoints en Traefik. Al principio de todo.

Manos a la obra

Además de actuar cómo proxy inverso, también dispone de utilidades que nos harán la vida más sencilla con respecto a la gestión, adquisición y renovación de certificados SSL, ya que lo hace de manera automática. En este ejemplo utilizaremos LetsEncrypt como proveedor de certificados, aunque se pueden utilizar otros.

Una vez instalado el manejo es relativamente sencillo una vez se llega a comprender cómo funciona. Se gestiona mediante etiquetas (labels) en los servicios o contenedores en los que queremos que actúe.

Instalar Traefik

Para instalar Traefik en nuestro sistema, crearemos un contenedor Docker utilizando la herramienta Docker Compose. Para ello lo primero que haremos será crear una estructura de directorios y ficheros de configuración para el servicio, además de un fichero docker-compose.yml con la definición del contenedor, y después lo pondremos en ejecución en el sistema.

mkdir -p docker/traefik/traefik-data
touch docker/traefik/traefik-data/acme.json
chmod 600 docker/traefik/traefik-data/acme.json
nano docker/traefik/traefik-data/traefik.yml

Dentro del fichero traefik.yml incluimos el siguiente contenido. Cambiar la dirección de correo para que LetsEncrypt nos avise acerca de la caducidad de los certificados:

api: dashboard: true entryPoints: http: address: ":80" https: address: ":443" providers: docker: endpoint: "unix:///var/run/docker.sock" exposedByDefault: false certificatesResolvers: http: acme: email: email@ejemplo.com storage: acme.json httpChallenge: entryPoint: http

Traefik escuchará así en los puertos 80 y 443 correspondientes a los servicios http y https respectivamente. El dashboard de monitorización de Traefik no dispone de método de autentificación, así que crearemos unas credenciales en formato htpasswd para después asignárselas al servicio del dashboard de Traefik. Cambiar el usuario y contraseña por los que deseemos:

sudo apt-get install apache2-utils echo $(htpasswd -nb ) | sed -e s/\\$/\\$\\$/g

Ahora procedemos a crear la red virtual dónde estará enganchado Traefik y el contenedor:

docker network create traefik-proxy cd docker/traefik nano docker-compose.yml

Dentro del fichero docker-compose.yml incluimos el siguiente contenido. Cambiar el usuario/contraseña por los generados anteriormente, y el host de acceso por el que corresponda:

version: '3' services: traefik: image: traefik:v2.4.2 container_name: traefik restart: unless-stopped security_opt: - no-new-privileges:true networks: - traefik-proxy ports: - 80:80 - 443:443 volumes: - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock:ro - ./traefik-data/traefik.yml:/traefik.yml:ro - ./traefik-data/acme.json:/acme.json labels: - "traefik.enable=true" - "traefik.http.routers.traefik.entrypoints=http" - "traefik.http.routers.traefik.rule=Host(`traefik.ejemplo.com`)" - "traefik.http.middlewares.traefik-auth.basicauth.users=USUARIO:CONTRASEÑA" - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https" - "traefik.http.routers.traefik.middlewares=traefik-https-redirect" - "traefik.http.routers.traefik-secure.entrypoints=https" - "traefik.http.routers.traefik-secure.rule=Host(`traefik.ejemplo.com`)" - "traefik.http.routers.traefik-secure.middlewares=traefik-auth" - "traefik.http.routers.traefik-secure.tls=true" - "traefik.http.routers.traefik-secure.tls.certresolver=http" - "traefik.http.routers.traefik-secure.service=api@internal" networks: traefik-proxy: external: true

Guardamos la información pulsando Ctrl+X, y, ENTER.

Ponemos en marcha el contenedor usando Docker Compose:

docker-compose up -d

Abrimos un navegador web, y accedemos al dashboard de Traefik que tenemos en ejecución en Docker:

https://traefik.ejemplo.com/

Fuentes:

https://atareao.es/tutorial/traefik/

https://www.redeszone.net/marcas/qnap/configurar-docker-portainer-traefik-servicios-nas-qnap/

https://jacar.es/como-instalar-traefik-con-docker-compose/


0 comentarios :

Publicar un comentario

Los comentarios pueden ser revisados en cualquier momento por los moderadores.

Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.

Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.