08-08-2020, 01:45 PM
(This post was last modified: 11-08-2020, 07:42 AM by Ganekogorta.)
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:
Ahora planteo un escenario mas complicado de dos web en la misma NAS de QNAP sin tener Traefik.
Por ejemplo tenemos:
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
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.
o si lo queréis en una sola línea
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
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
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.
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:
- 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.
- tenemos una web sobre apicultura alojada en nuestra nas en la carpeta "/Web/abejas"
- nuestra nas tiene instalado el certificado ssl "www.pruebas.org"
- 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 )
- en nuestro enrutador tenemos redirigidos los puertos 80 y 8000 hacia la ip privada de la nas
- 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"
- "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.
Ahora planteo un escenario mas complicado de dos web en la misma NAS de QNAP sin tener Traefik.
Por ejemplo tenemos:
- 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.
- tenemos una web sobre apicultura alojada en nuestra nas en la carpeta "/Web/abejas"
- tenemos una web sobre madera alojada en nuestra nas en la carpeta "/Web/termitas"
- nuestra nas tiene instalado el certificado ssl "www.pruebas.org"
- 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 )
- en nuestro enrutador tenemos redirigidos los puertos 80 y 8000 hacia la ip privada de la nas
- el archivo index.php ubicado en la carpeta /Web lo dejo sin tocar.
- la web de las termitas tengo que escribir http://www.pruebas.org/termitas pero llego a la misma web si escribo http://termitas.pruebas.org/termitas o http://abejas.pruebas.org/termitas
- la web de las abejas tengo que escribir http://www.pruebas.org/abejas, nuevamente llego a la misma web si escribo o http://abejas.pruebas.org/abejas o http://termitas.pruebas.org/abejas
- y si escribo http://www.pruebas.org llegaré a una única web definida en el archivo index.php

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

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.
Code:
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
Code:
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
Code:
#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
Ahora editamos el archivo "/share/DockerData/traefik/conf/dynamic-conf.toml" que es donde definimos las rutas a las webs http y https
Code:
[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η
Agur eta ondo ibili
Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η