Herramientas de usuario

Herramientas del sitio


guias:traefikv2

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
guias:traefikv2 [2021/10/29 10:11] Sergio Alvariñoguias:traefikv2 [2021/10/29 10:35] (actual) – [Nuestro primer servicio: Portainer] Sergio Alvariño
Línea 35: Línea 35:
 ===== Ejemplo01: Uno facilito ===== ===== Ejemplo01: Uno facilito =====
  
-El siguiente fichero //docker-compose// contiene una configuración lo más sencilla posible con el %%__%%docker provider_.+El siguiente fichero //docker-compose// contiene una configuración lo más sencilla posible con el **//docker provider//**.
  
 Preparamos los ficheros y directorios de trabajo: Preparamos los ficheros y directorios de trabajo:
Línea 46: Línea 46:
 El contenido del fichero ''%%~/work/docker/ejemplo01/traefik/docker-compose.yml%%'' sería: El contenido del fichero ''%%~/work/docker/ejemplo01/traefik/docker-compose.yml%%'' sería:
  
-<code yml>+<code yaml>
 version: '3' version: '3'
  
Línea 99: Línea 99:
 Con este //Traefik// básico que hemos lanzado, ya prodríamos lanzar servicios que conectaran con el mismo. Vamos a añadir unas lineas a nuestro fichero //docker-compose//, que quedaría así: Con este //Traefik// básico que hemos lanzado, ya prodríamos lanzar servicios que conectaran con el mismo. Vamos a añadir unas lineas a nuestro fichero //docker-compose//, que quedaría así:
  
-<code yml>+<code yaml>
 version: '3' version: '3'
  
Línea 219: Línea 219:
 ==== Services ==== ==== Services ====
  
-Serían los componentes del //“backend”"//, en nuestro caso serán servicios implementados en contenedores Docker.+Serían los componentes del //“backend”//, en nuestro caso serán servicios implementados en contenedores Docker.
  
 **Los //services// son parte de la configuración dinámica.** **Los //services// son parte de la configuración dinámica.**
Línea 239: Línea 239:
 Vamos con un ejemplo un pelín más complejo. Vamos a definir un contenedor de //Traefik// que simplemente expone su //Dashboard//, de momento no vamos a definir más contenedores, pero podremos añadirlos a este escenario en el futuro. Vamos con un ejemplo un pelín más complejo. Vamos a definir un contenedor de //Traefik// que simplemente expone su //Dashboard//, de momento no vamos a definir más contenedores, pero podremos añadirlos a este escenario en el futuro.
  
-La gracia del ejemplo es que //Traefik// obtendrá los certificados SSL del dominio (p.ej. miDominio.com) automáticamente desde [[https://letsencrypt.org/|//Let’s Encrypt//]]. Y expondrá el //dashboard// en un subdominio, digamos en https://dashtraefik.miDominio.com.+La gracia del ejemplo es que //Traefik// obtendrá los certificados SSL del dominio (p.ej. miDominio.com) automáticamente desde //[[https://letsencrypt.org/|Let’s Encrypt]]//. Y expondrá el //dashboard// en un subdominio, digamos en https://dashtraefik.miDominio.com.
  
 Preparamos los directorios y los ficheros de trabajo. Preparamos los directorios y los ficheros de trabajo.
Línea 467: Línea 467:
 </code> </code>
  
-Una vez definido nuestro //middleware// de tipo //basicAuth// solo nos falta definir el [[https://doc.traefik.io/traefik/routing/routers/|//router//]] para nuestro //dashboard//. Lo llamaremos ''%%mydash%%'':+Una vez definido nuestro //middleware// de tipo //basicAuth// solo nos falta definir el //[[https://doc.traefik.io/traefik/routing/routers/|router]]// para nuestro //dashboard//. Lo llamaremos ''%%mydash%%'':
  
 <code yaml> <code yaml>
Línea 570: Línea 570:
 Definimos los //middlewares//: Definimos los //middlewares//:
  
-  * ****//secureHeaders//**** Que define una serie de cabeceras que vamos a aplicar a todas las conexiones HTTP de nuestro //Traefik//. * **//frameDeny: true//** Para evitar ataques [[https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#click-jacking|//click-jacking//]] * **//sslRedirect: true//** Para permitir solo peticiones //https// * **//browserXssFilter//** Para paliar ataques de [[https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#cross-site_scripting_xss|//cross site scripting//]] * **//contentTypeNosniff: true//** Ver [[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options|referencia]] * **//forceSTSHeader: true//**: fuerza cabeceras STS para todas las conexiones, con el flag //preload// y la directiva //includeSubdomains// y un //max-age// de un año. +  * **//secureHeaders//**\\ Que define una serie de cabeceras que vamos a aplicar a todas las conexiones HTTP de nuestro //Traefik//. 
-  * ****//local-whitelist//**** Los servicios a los que apliquemos este //middleware// sólo se podrán acceder desde IP en la //whitelist//. Este //middleware// es interesante si accedes a los servicios desde la intranet. +  * **//frameDeny: true//**\\ Para evitar ataques //[[https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#click-jacking|click-jacking]]// 
-  * ****//user-auth//**** Para definir credenciales de acceso a nuestros servicios con //basicAuth//. //Traefik// nos pedirá usuario y contraseña para los servicios a los que apliquemos este //middleware//+  * **//sslRedirect: true//**\\ Para permitir solo peticiones //https// 
-  * ****//localsec//**** Este es un ejemplo de “cadena de //middlewares//”, aplicar este //middleware// equivale a aplicar //secureHeaders// y //local-whitelist//. **//chain//** es muy interesante para organizar nuestros //middlewares// y aplicar la misma configuración a varios contenedores.+  * **//browserXssFilter//**\\ Para paliar ataques de //[[https://developer.mozilla.org/en-US/docs/Web/Security/Types_of_attacks#cross-site_scripting_xss|cross site scripting]]// 
 +  * **//contentTypeNosniff: true//**\\ Ver [[https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options|referencia]] 
 +  * **//forceSTSHeader: true//**:\\ fuerza cabeceras STS para todas las conexiones, con el flag //preload// y la directiva //includeSubdomains// y un //max-age// de un año. 
 +  * **//local-whitelist//**\\ Los servicios a los que apliquemos este //middleware// sólo se podrán acceder desde IP en la //whitelist//. Este //middleware// es interesante si accedes a los servicios desde la intranet. 
 +  * **//user-auth//**\\ Para definir credenciales de acceso a nuestros servicios con //basicAuth//. //Traefik// nos pedirá usuario y contraseña para los servicios a los que apliquemos este //middleware//
 +  * **//localsec//**\\ Este es un ejemplo de “cadena de //middlewares//”, aplicar este //middleware// equivale a aplicar //secureHeaders// y //local-whitelist//. **//chain//** es muy interesante para organizar nuestros //middlewares// y aplicar la misma configuración a varios contenedores.
  
 Contenido del fichero ''%%middlewares.yml%%'': Contenido del fichero ''%%middlewares.yml%%'':
Línea 672: Línea 677:
   * Mapeamos el fichero de configuración estática ''%%traefik,yml%%'', el directorio de configuraciones dinámicas ''%%/configurations%%'' y el fichero ''%%acme.json%%'' para el //certresolver//   * Mapeamos el fichero de configuración estática ''%%traefik,yml%%'', el directorio de configuraciones dinámicas ''%%/configurations%%'' y el fichero ''%%acme.json%%'' para el //certresolver//
   * Añadimos etiquetas (//labels//) para la configuración dinámica del contenedor //Traefik// (concretamente del //dashboard//):   * Añadimos etiquetas (//labels//) para la configuración dinámica del contenedor //Traefik// (concretamente del //dashboard//):
-    * El servicio (se refiere al //dashboard//)se proveerá a través de //Traefik//+    * El servicio (se refiere al //dashboard//) se proveerá a través de //Traefik//
     * El contenedor se conecta a la red //frontend//     * El contenedor se conecta a la red //frontend//
     * Se configura el router ''%%traefik-secure%%''     * Se configura el router ''%%traefik-secure%%''
-    * Para el servicio //Traefik dashboard//(''%%api@internal%%''+      * Para el servicio //Traefik dashboard// (''%%api@internal%%''
-    * Con //middleware// ''%%user-auth%%'' +      * Con //middleware// ''%%user-auth%%'' 
-    * Con la regla ''%%Host(`dashtraefik.yourdomain.com`)%%''+      * Con la regla ''%%Host(`dashtraefik.yourdomain.com`)%%''
   * Por último declaramos la red (//network//) //frontend// como ''%%external%%'' ya que la hemos creado previamente.   * Por último declaramos la red (//network//) //frontend// como ''%%external%%'' ya que la hemos creado previamente.
  
Línea 783: Línea 788:
 Añadimos un nuevo servicio ''%%portainer%%'', con las opciones de rearranque y de seguridad iguales a las de //Traefik//. Mapeamos también el fichero ''%%/etc/localtime%%'' para que el contenedor se ponga en hora con el //host//; y el //socket// ''%%docker.sock%%'' que //Portainer// necesita (//Portainer// es un //frontend// para //Docker//) Añadimos un nuevo servicio ''%%portainer%%'', con las opciones de rearranque y de seguridad iguales a las de //Traefik//. Mapeamos también el fichero ''%%/etc/localtime%%'' para que el contenedor se ponga en hora con el //host//; y el //socket// ''%%docker.sock%%'' que //Portainer// necesita (//Portainer// es un //frontend// para //Docker//)
  
-Añadimos también las etiquetas para informar a //Traefik// del nuevo servicio* El servicio se llama //portainer// * Acepta peticiones en el puerto 9000 * //Portainer// usará el //entry point// ''%%https%%'' de //Traefik// * Y la regla de enrutado será ''%%Host(`portainer.yourdomain.com`)%%''+Añadimos también las etiquetas para informar a //Traefik// del nuevo servicio
 +  * El servicio se llama //portainer// 
 +  * Acepta peticiones en el puerto 9000 
 +  * //Portainer// usará el //entry point// ''%%https%%'' de //Traefik// 
 +  * Y la regla de enrutado será ''%%Host(`portainer.yourdomain.com`)%%''
  
 Una vez completada la configuración del DNS, podemos levantar nuestro nuevo servicio con: Una vez completada la configuración del DNS, podemos levantar nuestro nuevo servicio con:
guias/traefikv2.1635502274.txt.gz · Última modificación: 2021/10/29 10:11 por Sergio Alvariño