En esta ocasión les mostraremos como usar traefik, un proxy inverso muy flexible para nuestros contenedores docker, dándonos una facilidad de despliegue mucho mas eficiente y rápida.
Para la version de traefik 2.x en adelante tenemos una configuracion para su deploy aca https://github.com/tomasmetal23/traefikv2-with-letsencrypt
Dependencias usadas:
- Servicio DNS Cloudflare
- docker
- Imagen traefik:1.7.18-alpine
Extra:
- docker-compose
- Imagen portainer
¿Que es Cloudflare?
Cloudflare es una empresa que presta servicios de seguridad. Entre ellos uno free como servidor DNS y proxy, por otro lado también nos proporcionara certificados SSL mediante un proxy, en consecuencia nuestra ip publica no sera expuesta dándonos algo mas de seguridad.
Otras funcionalidades:
- Protección DDoS (JavaScript challenge)
- Analytics (métricas)
- Firewall
- Servidor cache
- URL Forwading (solo 3 en modo free)
- Speed (test y optimización web)
Estos son solo alguno de los servicios o funcionalidades que nos proporciona cloudflare mencionando aquí básicamente los servicios gratuitos aparte de todo esto hay muchas mas características free y aun mas si usamos el servicio premiun.
Si hemos llegado hasta aquí asumo que sabemos como usar o agregar un nuevo servidor DNS agregando los NS de cloudflare a la tabla DNS de nuestro servidor.
Preparación previa de Cloudflare
Ya que imagino que muchos no conocen este servicio intentare hacer una breve guía de registro no muy especifica y con los pasos necesarios para obtener la api-key de acceso global.
- Registro en cloudflare.com
- verificamos nuestro correo y seguimos el proceso
- Agregamos nuestro sitio, seleccionamos el plan Free y confirmamos.
- Cloudflare hará un scan automático de nuestros registros dns, cuando termine presionamos el botón Continue.
- Nos pedirá cambiar nuestro NS por los de cloudflare.
Generalmente toma algunas horas o incluso días que culmine la propagación dns todo esto depende de nuestro proveedor de dominios.
Una vez que se active nuestro dominio, ajustamos nuestra tabla dns como corresponde según nuestra necesidad.
- Extraeremos la api global de cloudflare. Para esto estando en el menú Overview, bajamos hasta que nos topemos en la barra lateral derecha con el sub-menú de la api.
SSL/TLS
Traefik como proxy de nuestros contenedores
Lo primero sera crear y definir un archivo con el nombre traefik.toml lo pueden hacer en cualquier directorio que deseen, yo lo haré en /opt/traefik para mantener un orden de todos mis stacks en una carpeta en dicho directorio.
Definimos un usuario y contraseña para el monitor del traefik, pueden general la key instalando apache2-utils, reemplazamos USUARIO y CONTRASEÑA con las credenciales que queramos.
$ echo $(htpasswd -nbB USUARIO "CONTRASEÑA") | sed -e s/\\$/\\$\\$/g
Reemplazamos ‘aquituhtpasswd’ en la linea 8 por el usuario y contraseña cifrado que generamos; Sustituimos ‘tudominio.com’ por su dominio.
$ sudo nano /opt/traefik/traefik.toml
traefik.toml
acme.json
$ sudo touch /opt/traefik/acme.json
$ sudo chmod 600 /opt/traefik/acme.json
El archivo acme.json es donde traefik depositara y gestionara los certificados SSL, es obligatorio que sus permisos sean 600.
Traefik como proxy – Docker run
Ejecutamos en nuestra terminal:
$ docker network create web
Sirve para crear una red en modo bridge con la interfaz principal del host y por ultimo:
Reemplazamos ‘logincloudflare’ y ‘apiglobal’ con nuestro login de cloudflare y nuestra api global que guardamos anteriormente. También reemplazamos con nuestro dominio ‘monitor.tudominio.com’, recuerde siempre agregar las nuevas entradas «A» de subdominios nuevos que vamos creando en cloudflare.
Ejecutamos en la terminal:
Resultado
Vamos a nuestro navegador a la web del monitor, monitor.tudominio.com.
Traefik como proxy – Portainer
Instalaremos portainer, una herramienta web para gestion de nuestras imágenes, red y contenedores de docker bastante interactivo, para esto necesitaremos tener instalado docker-compose y creamos una carpeta para llevar el control y orden.
$ sudo mkdir -p /opt/traefik/stacks/portainer
$ sudo nano /opt/traefik/stacks/portainer/docker-compose.yml
Agregamos a nuestro docker-compose.yml:
Recuerden cambiar tudominio.com por el de ustedes:
En nuestro terminal ejecutamos:
$ cd /opt/traefik/stacks/portainer && docker-compose up -d
Visitamos en nuestro navegador web el subdominio que le definimos, la primera vez que iniciamos debemos registrar un usuario.
Cualquier duda pueden comentar aquí sus inquietudes o problemas para entre todos asistirnos en lo que podamos.
Administrador de sistemas, un curioso amante de las tecnologías.