• 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Traefik en Docker
#1
Hola

Este es uno de los contenedores mas útiles y complejos de usar. Aunque según ellos es fácil.
Podéis echar una ojeada en su web.

La función de Traefik es hacer la resolución de la web que nos pidan, enviar la petición a la máquina adecuada de nuestra red y proporcionarle un certificado ssl (aunque no nos hayan hecho la petición segura). Esto último es importante ya que podemos cifrar tráfico a web o servicios que no lo tienen.

Planteo un escenario de una web en la misma NAS de QNAP sin tener Traefik.

Por ejemplo tenemos:

  1.  como dominio "pruebas.org". Definimos en nuestro proveedor las DNS "www.pruebas.org" y "abejas.pruebas.org" en las que las 2 apuntan a nuestra ip pública. 

  2. tenemos una web sobre apicultura alojada en nuestra nas en la carpeta "/Web/abejas" 

  3. nuestra nas tiene instalado el certificado ssl "www.pruebas.org" 

  4. en nuestra nas tenemos definidos los puertos 80 y 8000 como servidores web (que no son para la gestión de la nas, esos los tenemos en el 8080 y 443 )

  5. en nuestro enrutador tenemos redirigidos los puertos 80 y 8000 hacia la ip privada de la nas

  6. el archivo index.php ubicado en la carpeta /Web lo cambio por uno que hace una redirección a la web "http://www.pruebas.org/abejas"
Es decir con lo anterior, si desde el exterior escribo:
  • "http://www.pruebas.org/abejas", llego sin problemas a la web de apicultura.
  • "http://abejas.pruebas.org", la petición llega a nuestro router, como ve solicitud al puerto 80 se lo envía a la nas, y ésta como tiene modificado el archivo index,php nos presenta la web de apicultura.
  • si escribo "http://www.pruebas.org", la petición llega a nuestro router, como ve solicitud al puerto 80 se lo envía a la nas, y ésta como tiene modificado el archivo index,php nos presenta la web de apicultura.
Es decir vamos a la misma web aunque escribamos direcciones distintas ya que ambas hacen la petición a la misma ip pública.


Ahora planteo un escenario mas complicado de dos web en la misma NAS de QNAP sin tener Traefik.

Por ejemplo tenemos:

  1.  como dominio "pruebas.org". Definimos en nuestro proveedor las DNS "www.pruebas.org", "abejas.pruebas.org" y "termitas.pruebas.org" que las 3 apuntan a nuestra ip pública. 
  2. tenemos una web sobre apicultura alojada en nuestra nas en la carpeta "/Web/abejas" 
  3. tenemos una web sobre madera alojada en nuestra nas en la carpeta "/Web/termitas"
  4. nuestra nas tiene instalado el certificado ssl "www.pruebas.org" 
  5. en nuestra nas tenemos definidos los puertos 80 y 8000 como servidores web (que no son para la gestión de la nas, esos los tenemos en el 8080 y 443 )
  6. en nuestro enrutador tenemos redirigidos los puertos 80 y 8000 hacia la ip privada de la nas
  7. el archivo index.php ubicado en la carpeta /Web lo dejo sin tocar.
Con todo el escenario anterior, si quiero ver desde el exterior: Y no es cuento como tengáis varias web o máquinas diferentes, el lío de configuración puede ser importante  Sad

Aquí es donde traefik nos va a ayudar. Ya que traefik SI es capaz de distinguir como nos han hecho la petición y nos lleva a la web o máquina adecuada  Smile

La configuración de Traefik es un poco liosa, pero no es algo que vayamos a estar manipulando habitualmente.
Además en el caso de vayamos a publicar algún servicio de otro contenedor Docker, podemos indicar los parámetros en la definición de ese Docker y se agregan automáticamente las reglas en Traefik.

Vamos con la creación del Docker de Traefik.

Código:
docker run -d -p 40080:80 -p 40443:443 -p 48082:8082 --network=miscontenedores \
--restart always \
--name="traefik-server" \
-v /share/DockerData/traefik/traefik.toml:/etc/traefik/traefik.toml \
-v /share/DockerData/traefik/conf/:/share/DockerData/traefik/conf/ \
-v /share/DockerData/certs:/certs \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik:v2.0

o si lo queréis en una sola línea
Código:
docker run -d -p 40080:80 -p 40443:443 -p 48082:8082 --network=miscontenedores --restart always --name="traefik-server" -v /share/DockerData/traefik/traefik.toml:/etc/traefik/traefik.toml -v /share/DockerData/traefik/conf/:/share/DockerData/traefik/conf/ -v /share/DockerData/certs:/certs \
-v /var/run/docker.sock:/var/run/docker.sock traefik:v2.0

Una vez arrancado para que traefik sea accesible desde el exterior hemos de hacer la siguiente regla en nuestro router:
-puerto 80 exterior redirigido a 40080 en la ip privada de la nas
-puerto 443 exterior redirigido a 40443 en la ip privada de la nas

El puerto 48082 de nuestra nas será el de gestión web de traefik.
Pero antes vamos hacerle cambios, vamos a poner unos archivos de configuración base donde definimos la redirección de de puerto 80 a 443 de forma automática (es decir, escribo dirección http y me presenta la https).
Detenemos traefik y editamos el archivo "/share/DockerData/traefik/traefik.toml". El contenido será el siguiente
Código:
#Configuración estática de Traefik -> traefik.toml
[Global]
   checkNewVersion = true
[api]
   #Habilitamos la interfaz web de Traefik
   dashboard = true
   insecure = true
  
[entryPoints.web]
   address = ":80"
 
[entryPoints.web-secure]
   address = ":443"
  
[entryPoints.traefik]
   address = ":8082"
  
[providers]
   [providers.docker]
      watch = true
      network = "miscontenedores"
      exposedbydefault = false
   [providers.file]
      filename = "/share/DockerData/traefik/conf/dynamic-conf.toml"
      watch = true
En el anterior archivo, básicamente definimos los puertos que va a escuchar Traefik y la ubicación del archivo de configuración dinámica.

Ahora editamos el archivo "/share/DockerData/traefik/conf/dynamic-conf.toml" que es donde definimos las rutas a las webs http y https

Código:
[http.routers]

#Router para http termitas.pruebas.org
[http.routers.r-nas4]
   entrypoints = ["web"]
   rule = "Host(`termitas.pruebas.org`)"
   middlewares = ["redirect-https"]
   service = "termitas"
  
#Router para https termitas.pruebas.org
[http.routers.rssl-nas4]
   entrypoints = ["web-secure"]
   rule = "Host(`termitas.pruebas.org`)"
    service = "termitas"
[http.routers.rssl-nas4.tls]


#Router para http pruebas.org
[http.routers.r-nas]
   entrypoints = ["web"]
   rule = "Host(`www.pruebas.org`)"
   middlewares = ["redirect-https"]
   service = "admin-nas"
  
#Router para https pruebas.org
[http.routers.rssl-nas]
   entrypoints = ["web-secure"]
   rule = "Host(`www.pruebas.org`)"
   service = "admin-nas"
   [http.routers.rssl-nas.tls]

#Router para http abejas.pruebas.org
[http.routers.r-nas3]
   entrypoints = ["web"]
   rule = "Host(`abejas.pruebas.org`)"
   middlewares = ["redirect-https"]
   service = "abeja"
  
#Router para https abejas.pruebas.org
[http.routers.rssl-nas3]
   entrypoints = ["web-secure"]
   rule = "Host(`abejas.pruebas.org`)"
   service = "abejas"
   [http.routers.rssl-nas3.tls]

            
[http.middlewares]

#Middleware para la redirección https de pruebas.org

[http.middlewares.redirect-https.redirectScheme]
    scheme = "https"
    permanent = true

[http.services]
#Servicio que apunta a la web apicultura de la nas
[[http.services.abejas.loadBalancer.servers]]
   url = "http://192.168.10.50/abejas"
               
#Servicio que apunta al servidor nas
[[http.services.admin-nas.loadBalancer.servers]]
   url = "http://192.168.10.50"

#Servicio que apunta a la web termitas de la nas
[[http.services.termitas.loadBalancer.servers]]
   url = "http://192.168.10.50/termitas"
      
[[tls.certificates]]   
# ruta de los certificados para todas las webs
certFile = "/certs/SSLcertificate.crt"
keyFile = "/certs/SSLprivate.key"

En la última parte vemos la ruta donde dejaremos los certificados SSL. Estos certificados los usarán todas las web.
Es decir, hemos de crear certificados que sirvan para www.pruebas.org , abejaspruebas.org y termitas.pruebas.org o bien uno comodín *.pruebas.org.

Ademas para llegar sin problemas a las web de esa misma nas hay que ir al apartado de host virtual y crear los siguientes>

host termitas.pruebas.org,  carpeta /Web/termitas en el puerto 80
host abejas.pruebas.org,  carpeta /Web/abejas en el puerto 80

Si queremos ver la web que publica Traefik hemos de ir a la web http://192.168.10.50:48082/ (o al puerto que definimos en la creación del Docker).
Si todo ha ido bien veremos algo similar a la siguiente captura
   

En es caso de la imagen hay mas subdominios (4 http y 4 https que hacen un total de 8).

Ahora si escribo http://termitas.pruebas.org veré la web sobre madera, pero con https

Si escribo http://abejas.pruebas.org se presentará la de apicultura en https.

Si escribo http://www.pruebas.org se presentará la web del archivo index bajo https.

Espero no haber hecho ninguna errata, si veis alguna avisarme por privado y lo corrijo.

Mas adelante pondré en el foro como definir un docker que se integra en Traefik sin tener que modificar los archivos de configuración de Traefik.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder


Mensajes en este tema
Traefik en Docker - por Ganekogorta - 08-08-2020, 01:45 PM
RE: Traefik en Docker - por cristianpanama - 15-05-2021, 02:42 AM
RE: Traefik en Docker - por Ganekogorta - 15-05-2021, 03:39 PM
RE: Traefik en Docker - por cristianpanama - 15-05-2021, 03:44 PM
RE: Traefik en Docker - por Ganekogorta - 15-05-2021, 09:21 PM
RE: Traefik en Docker - por cristianpanama - 15-05-2021, 09:24 PM
RE: Traefik en Docker - por Ganekogorta - 15-05-2021, 10:09 PM
RE: Traefik en Docker - por cristianpanama - 15-05-2021, 10:17 PM
RE: Traefik en Docker - por Ganekogorta - 15-05-2021, 10:56 PM
RE: Traefik en Docker - por cristianpanama - 16-05-2021, 12:07 AM
Traefik en Docker - por Ganekogorta - 16-05-2021, 12:23 AM
RE: Traefik en Docker - por cristianpanama - 16-05-2021, 12:33 AM
Traefik en Docker - por Ganekogorta - 16-05-2021, 11:40 AM
RE: Traefik en Docker - por cristianpanama - 16-05-2021, 11:56 AM
Traefik en Docker - por Ganekogorta - 16-05-2021, 12:43 PM
RE: Traefik en Docker - por cristianpanama - 16-05-2021, 01:51 PM
Traefik en Docker - por Ganekogorta - 16-05-2021, 02:16 PM
RE: Traefik en Docker - por cristianpanama - 16-05-2021, 11:40 PM
Traefik en Docker - por Ganekogorta - 17-05-2021, 07:38 AM
RE: Traefik en Docker - por cristianpanama - 17-05-2021, 05:46 PM



Usuarios navegando en este tema: 2 invitado(s)