No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Swarm

Curso de Swarm

Guido Vilariño

Guido Vilariño

Reverse proxy: muchas aplicaciones, un sólo dominio

20/24
Recursos

Reverse proxy es una técnica, es un servicio que está escuchando y que toma una decisión con la petición que esta entrando y hace un proxy hacia uno de los servicios que tiene que atender esa petición.

Existe una herramienta llamada traefik, el cual es un intermediario entre las peticiones que vienen del internet a nuestra infraestructura.

Aportes 20

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Que tal, tuve un pequeño problema. Cuando intente correr el comando, se quedan como en un ciclo, entonces cancele y revise los logs con

docker service logs proxy 

Y me mandaba este mensaje.

2019/10/21 00:26:42 command traefik error: failed to decode configuration from flags: field not found, node: docker

Y para arreglarlo, solo tuve que definir la versión de traefik y cambiar esta parte

  --docker.swarmMode

Por

--docker.swarmmode

El comando final quedo así:

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik:1.5 --docker --docker.swarmmode --docker.domain=domain.ca --docker.watch --api

Me funciono en mi entrono de pruebas

docker network create --driver overlay proxy-net
docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik:1.7 --docker --docker.swarmmode --docker.domain=dbz.com --docker.watch --api
docker service create  --name app1 --network proxy-net --label traefik.port=3000 baezdavidsan/swarm-hostname
curl -H "Host: app1.dbz.com" http://localhost
docker service create  --name app2 --network proxy-net --label traefik.port=3000 baezdavidsan/swarm-hostname
curl -H "Host: app2.dbz.com" http://localhost
docker service update --image baezdavidsan/networking app2
curl -H "Host: app1.dbz.com" http://localhost
curl -H "Host: app2.dbz.com" http://localhost
http://192.168.5.152:9090/dashboard/

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik --docker --docker.swarmMode --docker.domain=domain.loc --docker.watch --api

Lo que hace Traefik es que va a detectar que servicios hay en el swarm y los va a incorporar a su lista de reverse proxy en fucnión de algunas etiquetas que pondremos en los servicios, para que eso pase, Traefik va a tener que escuhar los eventos del Swarm, y para que Traefik pueda escuchar los eventos del Swarm va a tener que tener accesso al sokcet del Docker Deamon del Manager, por lo que debe correr en un nodo Manager.

Les dejo el comando largo para crear el servicio de Traefik. En 2021 sigue sin funcionar si no le pones un tag a la imagen de traefik, le puse la version 1.7 y me funcionó sin problema.

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik:1.7 --docker --docker.swarmmode --docker.domain=dbz.com --docker.watch --api

Excelente !!
Grande Docker Swarm

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 \ --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net \ --label "traefik.http.routers.proxy.rule=Host \ (\guido.com`\ )" traefik
–providers.docker --providers.docker.watch --providers.docker.swarmMode=true --api.insecure=true`

Me ha salido un error al ejecutar el comando para crear el servicio proxy

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik --docker --docker.swarmMode --docker.domain=domain.loc --docker.watch --api
verify: Detected task failure 

Trraefik lo que es, es un Similar a Nginx proxies inversos y balanceadores de carga,
Como aparte les comparto lo que dice la documentacion acerca del riesgo de acceder a socket a traves del mismo sistema como lo hacemos en la clase. En la documentacion nos comparte algunas soluciones a este riesgo de seguridad. <https://doc.traefik.io/traefik/providers/docker/#docker-api-access>

un genio Guido, millones de gracias.

Crack!

Sale un error si colocal la imagen sin un tag . Al parecer la última versión no funciona. Traten con la version 1.7
… --network proxy-net traefik:1.7 --docker --docker.swarmMode --docker.domain=g u i do .com --docker.watch --api

Porque no me funciona el traefik cuando al servicio le agrego la etiqueta port

sudo docker service create --name app2 --network proxy-net --label traefik.port=3000 -p 3000:3000 gvilarino/swarm-hostname

Alguien me puede decir como hago para poder conectar mi servicio al traefik y a su vez conectarme por la ip al puerto 3000

Esto se puede probar de manera local , estoy con windows ?

docker service create --name proxy --constraint=node.role==manager -p 81:80 -p 9091:8080 --net
work proxy-net traefik --docker --docker.swarmMode --docker.domain=maccevedor.com --docker.watch --api
n5n9nhgigf8ybc9zeujkea4oo
overall progress: 0 out of 1 tasks
1/1: starting
verify: Detected task failure
Operation continuing in background.
Use docker service ps to check progress.

Si quiero usar mis certificados SSL/TLS adquiridos en aws o cualquier otro proveedor con treafik, se puede y de que manera ?, hasta al momento se que funciona muy facil con letsencrypt pero en he podido encontrar algo donde explique dicha configuracion con mis certificado.

It returns

verify: Detected task failure

Podría usar traefik con muchos nombres de dominio?

Si quisiera crear un servicio que corra en el domain.com y no en sub.domain.com como seria.

Creación del servicio de Traefik funcional:

docker service create --name proxy --constraint=node.role==manager -p 80:80 -p 9090:8080 --mount type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock --network proxy-net traefik:1.7 --docker --docker.swarmMode --docker.domain=guido.com --docker.watch --api