4.3 · Redes avanzadas y reverse proxy

Nivel 4 · Registros, fiabilidad y CI

4.3Redes avanzadas y reverse proxy

Objetivo: Exponer varios servicios detrás de un punto de entrada único limpio.
Tiempo estimado: 13 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • Se segmenta por función : una red frontal (proxy hacia aplicaciones) y una red backend (aplicaciones hacia bases) — la base, limitada al backend, queda inalcanzable directamente aunque el proxy sea comprometido.
  • Un solo puerto publicado, todo lo demás enrutado : el reverse proxy (frontal) es el único publicado y enruta por nombre de host — las aplicaciones solo exponen en interno y se alcanzan por sus nombres.
  • Reflejo de Idir : añadir un servicio = una entrada de enrutado, cero puerto adicional — config del proxy montada en solo lectura.

Mini-caso hilado — Idir ordena los puertos en desorden detrás de un frontal

Idir, devops junior en Argel, gestiona dos aplicaciones que publican cada una su puerto : las URL son ilegibles y la base es alcanzable desde la red frontal. Crea dos redes (frontal y backend), solo publica el puerto del proxy, enruta por nombres de host y limita la base al backend. Tercer hito del hilo : un punto de entrada único, servicios segmentados, cero puerto en desorden.

Continuación de los casos 4.1-4.2 — los servicios fiabilizados de Idir ahora se exponen limpiamente.

1. Segmentar : una red por función

Más allá de una red única, se segmenta : frontal (proxy hacia aplicaciones) y backend (aplicaciones hacia bases). Un servicio pertenece a varias redes si hace falta ; una base solo está en backend : incluso comprometido el proxy, queda inalcanzable directamente.

La segmentación es aislamiento concreto : cada red solo ve lo que debe ver. Idir coloca ahí cada servicio según lo que debe alcanzar — y nada más.

2. El reverse proxy : un puerto para todos

Traefik o Nginx en frontal : solo su puerto 80/443 está publicado, enruta por nombre de host (cada host hacia su servicio). Las aplicaciones ya no publican nada : exponen en interno y el proxy las alcanza por nombres. Un punto de entrada, N servicios — añadir una aplicación es una entrada de enrutado.

Nginx (config explícita, perfecto para aprender) y Traefik (descubrimiento automático, ideal cuando los servicios se mueven) aplican el mismo esquema : Idir empieza simple con una config explícita.

3. En local : nombres propios, futuros certificados

En desarrollo, se declaran los hosts en el archivo hosts (cada nombre hacia la máquina local) ; en producción, el DNS + TLS cifran el tráfico. Retenga el esquema : uno solo publicado, todo lo demás enrutado.

Y la config del proxy se monta en solo lectura : el contenedor la lee sin poder reescribirla.

Error frecuente de interpretación: « Cada aplicación debe publicar su puerto, y la base puede quedarse en la red frontal para simplificar ». No. Publicar cada aplicación son puertos en desorden y otras tantas superficies expuestas ; una base en el frontal es alcanzable directamente desde la entrada. Uno solo publicado (el proxy), enrutado por hosts, base limitada al backend : ese trío es lo que hace un frontal limpio.
Exponer detrás de un frontal único Uno publicado, el resto enrutado y segmentado Redes segmentadas Frontal ybackend separadosProxy único publicado Puertoúnico en entradaEnrutado por host Cadanombre hacia su servicioBase limitada Solo backend,config en solo lectura
Uno publicado, el resto enrutado y segmentado
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Idir crea dos redes : frontal (proxy hacia aplicaciones) y backend (aplicaciones hacia bases). 2) Lanza sus aplicaciones no publicadas en el frontal y limita la base al backend. 3) Publica únicamente el puerto del proxy, que enruta por nombres de host con una config montada en solo lectura. 4) Prueba cada host, luego verifica que una base queda inalcanzable desde el frontal. Lección : segmentar, publicar un solo punto, enrutar por nombres.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Dos apps detrás de Nginx

El frontal de Idir : solo el proxy publica el puerto 80.

services:
  proxy:
    image: nginx:1.27
    ports: ["80:80"]
    volumes: [./proxy.conf:/etc/nginx/conf.d/default.conf:ro]
    networks: [frontal]
  app1:
    image: nginx:1.27
    networks: [frontal]
  app2:
    image: nginx:1.27
    networks: [frontal]
networks:
  frontal:
  backend:

Lectura : solo el proxy publica el puerto 80 ; las aplicaciones solo son visibles por él.

Lección : añadir una tercera aplicación = una entrada de enrutado, cero puerto adicional.

Vocabulario de la sección

Reverse proxy
Frontal que recibe las peticiones y las ENRUTA hacia los buenos servicios según los nombres de host.

Ejemplo sencillo: El proxy de Idir envía cada host hacia su aplicación.

Lo que no es: una publicación de cada puerto de aplicación hacia el exterior.

Reflejo: varios servicios, un solo puerto : poner un frontal.

Segmentación
Cortar en REDES POR FUNCIÓN (frontal, backend) para aislar los flujos.

Ejemplo sencillo: Idir limita su base al backend, inalcanzable desde la entrada.

Lo que no es: una red única donde todo ve todo.

Reflejo: base de datos : nunca en la red frontal.

Enrutado por host
Cada NOMBRE DE HOST se dirige hacia su servicio (un host = una aplicación).

Ejemplo sencillo: Cada aplicación de Idir tiene su nombre, enrutado por el proxy.

Lo que no es: un puerto distinto improvisado por aplicación.

Reflejo: nuevo servicio : una entrada de enrutado, no un puerto.

EXPOSE
Declaración INTERNA de un puerto, sin publicación hacia el exterior.

Ejemplo sencillo: Las aplicaciones de Idir exponen en interno ; solo el proxy publica.

Lo que no es: una publicación de puerto accesible desde la máquina.

Reflejo: detrás de un proxy : exponer, no publicar.

En la práctica — En práctica — Poner un frontal

  1. Cree las redes frontal y backend.
  2. Lance dos aplicaciones no publicadas en frontal.
  3. Lance el proxy publicado con enrutado por host.
  4. Pruebe los dos hosts, luego corte un backend : el otro sobrevive.
Varios servicios comparten un punto de entrada único y segmentado.

Guion listo para decir — justificar el frontal al equipo (30 s)

« Soy Idir : en lugar de un puerto por aplicación, solo exponemos el proxy y enruta por nombres. Las aplicaciones ya no son alcanzables directamente, la base queda limitada a su red, y la próxima aplicación solo costará una línea de enrutado. »

Para decir cuando aún proponen « un puerto más » : muestre la lista de puertos actuales.

Modelo copiar-pegar — frontal Nginx + redes (Compose)

services:
  proxy:
    image: nginx:1.27
    ports: ["80:80"]
    volumes: [./proxy.conf:/etc/nginx/conf.d/default.conf:ro]
    networks: [frontal]
  app1:
    image: nginx:1.27
    networks: [frontal]
  app2:
    image: nginx:1.27
    networks: [frontal]
networks:
  frontal:
  backend:

Segunda aplicación

Como Idir : una entrada de enrutado más, ningún puerto publicado adicional.

Servicios que se mueven a menudo

Pasar a Traefik : descubrimiento automático de los servicios, mismo esquema frontal único.

Base por proteger

Base limitada al backend, alcanzada por nombre desde las aplicaciones : inalcanzable desde la entrada.

Desarrollo local

Nombres declarados en el archivo hosts : el mismo archivo de frontal sirve en local y luego en producción.

✓ Buenas prácticas

  • Uno solo publicado : el proxy.
  • Rutas por nombres de host explícitos.
  • Config proxy en montaje solo lectura.

✗ Errores frecuentes

  • Publicar cada aplicación (puertos en desorden).
  • Base en la red frontal.
  • Config proxy escribible desde el contenedor.

Puntos clave

  • Segmentar : frontal vs backend.
  • Un proxy publicado lo enruta todo.
  • Apps no publicadas, alcanzadas por nombres.
  • TLS en prod, hosts en dev.

Reto 48h — aplique mañana

Detrás de un proxy único publicado : exponga 2 aplicaciones no publicadas enrutadas por hosts, base limitada al backend, config en solo lectura.

Lista de salida de la sección
  • Sé segmentar en redes frontal y backend.
  • Sé publicar solo el proxy y enrutar por hosts.
  • Sé limitar la base y montar la config en solo lectura.
Autoevaluación 1-5 : ¿cuántos puertos publican aún mis aplicaciones?¿mi base es alcanzable desde la red frontal?

Preguntas frecuentes

¿Traefik o Nginx?

Nginx : config explícita, perfecto para aprender. Traefik : descubrimiento auto por etiquetas, ideal cuando los servicios se mueven. Ambos aplican el mismo esquema : uno solo publicado, enrutado por hosts.

¿Hace falta un proxy en dev?

Desde dos aplicaciones : sí, aunque simple. Es el mismo archivo que servirá en producción, sin los puertos en desorden.

Comprueba tu comprensión

Tres apps web en una máquina, un solo puerto 80. ¿Qué hace?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 4Preguntas inéditas y más difíciles para validar tus conocimientos