Entiende las redes de docker

Las redes de Docker son una herramienta poderosa para gestionar la comunicación entre contenedores. En lugar de depender de una única red predeterminada, Docker permite a los usuarios crear redes personalizadas para sus aplicaciones, lo que puede mejorar la seguridad y la eficiencia.

Fecha: 27th Feb 2023 Autor: Aleix Soler

Introducción

Las redes de Docker son una herramienta poderosa para gestionar la comunicación entre contenedores. En lugar de depender de una única red predeterminada, Docker permite a los usuarios crear redes personalizadas para sus aplicaciones, lo que puede mejorar la seguridad y la eficiencia.

¿Por qué usar redes de Docker?

Docker proporciona una serie de ventajas al usar redes personalizadas. Algunos de los beneficios son

Los 7 tipos de red

1. Bridge

La red Bridge(puente) es el tipo de red predeterminado en Docker, y se utiliza para conectar los contenedores de Docker a una red física existente.
Cuando se utiliza la red Bridge, Docker crea un puente virtual en el host que permite a los contenedores conectarse entre sí y con la red física. Cada contenedor se conecta al puente virtual y recibe una dirección IP virtual en la misma subred.
La red Bridge proporciona una capa de abstracción entre los contenedores y la red física. Esto significa que los contenedores no necesitan conocer la topología de la red física subyacente, lo que hace que sea más fácil mover y administrar los contenedores en diferentes entornos.
Sin embargo, existe una limitación en la red Bridge: todos los contenedores conectados a la misma red Bridge se comunican entre sí de forma predeterminada. Esto significa que cualquier contenedor conectado a la red Bridge puede acceder a los puertos abiertos en otros contenedores en la misma red, lo que puede ser un problema de seguridad en algunos casos.
Para evitar este problema de seguridad, se pueden usar otras redes de Docker, como la red de host, la red de superposición o la red personalizada. Estas redes permiten a los usuarios aislar mejor los contenedores y controlar el acceso a ellos.
En general, la red Bridge es útil cuando se desea conectar contenedores a una red física existente, y se acepta el nivel de acceso que se brinda a los contenedores en la misma red Bridge. Si se necesita un mayor control sobre la red y el acceso a los contenedores, se pueden utilizar otros tipos de redes de Docke

2. User-defined bridge

La red User-defined bridge (puente definido por el usuario) es una red personalizada que los usuarios de Docker pueden crear para conectar contenedores entre sí. A diferencia de la red Bridge predeterminada de Docker, la red User-defined bridge permite a los usuarios tener un mayor control sobre la configuración de red.
Al crear una red User-defined bridge, los usuarios pueden especificar la dirección IP y el rango de puertos de la red, así como controlar el acceso a la red para los contenedores conectados. Esto hace que sea más fácil para los usuarios configurar una red a medida para sus aplicaciones y controlar el acceso a los recursos de la red.
Los contenedores conectados a la misma red User-defined bridge se comunicarán entre sí de forma predeterminada. Si se necesita aislar los contenedores, se pueden crear varias redes User-defined bridge y conectar los contenedores a la red apropiada. Por este motivo este tipo de red es el recomendado para docker.
Ademas esta red user-defined bridge incorpora un DNS, puede resolver una petición usando el nombre del contenedor, cosa bastante interessante ya que las ips pueden variar al hacer deploy de los contenedores.
En general, la red User-defined bridge es útil para los usuarios que necesitan un mayor control sobre la configuración de red para sus aplicaciones de Docker. Al permitir a los usuarios especificar la dirección IP, el rango de puertos y el acceso a la red, los usuarios pueden crear redes a medida que se ajusten a sus necesidades específicas.

3. Host

La red tipo host (anfitrión) es un tipo de red en Docker que conecta los contenedores directamente a la red del host en el que se están ejecutando. Cuando se usa la red tipo host, el contenedor no tiene una dirección IP propia y no está aislado de la red del host. Si te suena familiar es porque era la red por defecto anteriormente.
Al conectar un contenedor a la red del host, el contenedor puede acceder directamente a los recursos de la red del host, como los puertos abiertos en el host y los dispositivos de red. Además, los recursos de red del host también pueden acceder directamente al contenedor, lo que puede ser útil en algunos casos.
La red tipo host es útil en situaciones en las que se necesita una comunicación de alta velocidad y baja latencia entre el contenedor y el host. También puede ser útil en situaciones en las que se necesita que el contenedor tenga acceso directo a los recursos de la red del host.
Sin embargo, hay algunas limitaciones en el uso de la red tipo host. Como el contenedor no tiene una dirección IP propia, no se puede acceder directamente al contenedor desde otros dispositivos en la red. Además, como el contenedor no está aislado de la red del host, el acceso al contenedor puede ser menos seguro que con otros tipos de redes de Docker.
En general, la red tipo host es útil en situaciones específicas en las que se requiere una alta velocidad de red y se confía en la seguridad de la red del host.

4. MAC VLAN tipo bridge

La red MAC VLAN es un tipo de red en Docker que permite a los contenedores tener direcciones MAC virtuales y conectarse directamente a una red física existente. A diferencia de otros tipos de redes de Docker, que usan direcciones IP para identificar y comunicarse con los contenedores, la red MAC VLAN utiliza direcciones MAC virtuales para enrutar el tráfico de red.
Cuando se usa una red MAC VLAN, cada contenedor se conecta directamente a una red física existente y se le asigna una dirección MAC virtual única. Esto permite que los contenedores se comuniquen directamente con otros dispositivos en la red física, y que la comunicación entre los contenedores sea más rápida y eficiente.
En general, la red MAC VLAN es útil en situaciones en las que se necesita una alta velocidad de red y una comunicación directa con otros dispositivos en la red física. También puede ser útil en situaciones en las que se necesite una mayor seguridad de red y aislamiento de los contenedores, ya que los contenedores en una red MAC VLAN están completamente aislados de otros contenedores en la misma red.
Como downside debemos tener en cuenta que cada contenedor con este tipo de red tiene su propia dirección MAC y esta dirección MAC esta conectada al mismo puerto, el problema biene si tu red física no permite tener multiples direcciones MAC en un mismo puerto.(Se puede habilitar el modo Promiscuo en la interficie de red para solventar este problema, comando en el terminal `sudo ip link set promisc on`). Ademas este tipo de red no tiene DHCP, y si no especificas la IP al momento de crear la red docker la asignara para ti, dando la posibilidad de crear conflictos ya que tendras 2 servidor DHCP en la misma red(el de docker, y la de tu red), asi que especifica siempre la IP o el rango de ips permitidas con el comando `--ip-range` de esta red para evitar este problem
En resumen, este tipo de red tiene todos los beneficios de una red tipo bridge, con la diferencia que esta contectado directamente a tu red física.

5. MAC VLAN tipo 802.1q

A diferencia de el tipo de red MAC VLAN tipo bridge, la red MAC VLAN 802.1q utiliza etiquetas VLAN para enrutar el tráfico de red.
Cuando se utiliza una red MAC VLAN 802.1q, cada contenedor se conecta directamente a una red física existente y se le asigna una dirección MAC virtual única. Además, se etiqueta el tráfico de red de los contenedores con una etiqueta VLAN para permitir el enrutamiento del tráfico a través de la red física.
En general, la red MAC VLAN tipo 802.1q es útil en situaciones en las que se necesita una alta velocidad de red y una comunicación directa con otros dispositivos en la red física, pero se requiere la separación de los contenedores en diferentes VLANs. Además, puede ser útil en situaciones en las que se necesite una mayor seguridad de red y aislamiento de los contenedores, ya que los contenedores en una red MAC VLAN tipo 802.1q están completamente aislados de otros contenedores en la misma red.

6. IP VLAN (L2)

Este tipo de red consta practicamente de lo mismo que el tipo de red MAC VLAN, con una diferencia muy interesante, permite al host compartir su propia dirección MAC con los contrenedores, asi que todos los contenedores con este tipo de red tendras la misma dirección MAC que el host(con esto se soluciona el problema de las MAC VLANs, en relación a la habilitación del modo promiscuo), aun asi cada contenedor tiene su propia dirección IP en nuestra red
La red IP VLAN (L2) es un tipo de red en Docker que permite que los contenedores se comuniquen a través de VLANs virtuales utilizando direcciones IP. A diferencia de la red MAC VLAN, que utiliza etiquetas VLAN para enrutar el tráfico de red, la red IP VLAN se basa en direcciones IP para identificar y comunicarse con los contenedores.
Una ventaja de la red IP VLAN es que permite a los contenedores comunicarse directamente con otros dispositivos en la red física, lo que puede ser útil en situaciones en las que se necesita una alta velocidad de red y una comunicación directa. Además, como los contenedores en una red IP VLAN están completamente aislados de otros contenedores en la misma red, también puede proporcionar una mayor seguridad y aislamiento de los contenedores.
Sin embargo, hay algunas limitaciones a considerar al usar una red IP VLAN en Docker. Por ejemplo, los contenedores que se conectan a la red IP VLAN deben estar en la misma subred IP, lo que puede limitar la flexibilidad de la red. Además, debido a que la red IP VLAN utiliza direcciones IP para identificar y enrutar el tráfico, se pueden producir conflictos de direcciones IP si los contenedores utilizan las mismas direcciones IP que otros dispositivos en la red.

6. IP VLAN (L3)

La red IP VLAN (L3) es un tipo de red en Docker que permite que los contenedores se comuniquen a través de VLANs virtuales utilizando direcciones IP y enrutamiento basado en capa 3. A diferencia de la red IP VLAN (L2), que utiliza enrutamiento basado en capa 2 y está limitada a una subred IP, la red IP VLAN (L3) permite que los contenedores en diferentes subredes IP se comuniquen a través de VLANs virtuales.
Este tipo de red no contectara los contenedores en nuestra red, como si fuera un switch, lo conectara al host, como si el host fuera un router.
Una ventaja de la red IP VLAN (L3) es que permite una mayor flexibilidad y escalabilidad que la red IP VLAN (L2), ya que los contenedores en diferentes subredes IP pueden comunicarse a través de VLANs virtuales. Esto puede ser útil en situaciones en las que se necesitan redes complejas con múltiples subredes IP y VLANs virtuales. Además, como los contenedores en una red IP VLAN (L3) están completamente aislados de otros contenedores en la misma red, también puede proporcionar una mayor seguridad y aislamiento de los contenedores.
Sin embargo, al igual que con la red IP VLAN (L2), se deben considerar algunas limitaciones al utilizar la red IP VLAN (L3). Por ejemplo, se deben configurar rutas en la red física(tu router) para enrutar el tráfico hacia la puerta de enlace predeterminada de la red, lo que puede requerir una configuración adicional. Además, se pueden producir conflictos de direcciones IP si los contenedores utilizan las mismas direcciones IP que otros dispositivos en la red.

7. Overlay network

La red de superposición (Overlay network) es un tipo de red en Docker que permite la comunicación entre contenedores que se ejecutan en diferentes hosts de una manera transparente. Esto significa que los contenedores pueden comunicarse entre sí sin necesidad de conocer la ubicación física de los otros contenedores o las direcciones IP que se están utilizando.
Una de las principales ventajas de las redes de superposición es que permiten la creación de aplicaciones distribuidas en varios hosts sin tener que preocuparse por la complejidad de la red subyacente. Además, la red de superposición también proporciona características avanzadas, como el enrutamiento de subredes, la tolerancia a fallos y la escalabilidad, que permiten una mejor gestión y control de los contenedores en una aplicación distribuida.
En resumen, la red de superposición es una herramienta esencial para crear aplicaciones distribuidas en Docker. Proporciona una forma fácil y transparente para que los contenedores se comuniquen entre sí en diferentes hosts, lo que permite la creación de aplicaciones altamente escalables y tolerantes a fallos.

8. None

La red tipo "none" (ninguna) es una de las opciones de red disponibles en Docker. Cuando un contenedor se inicia con esta opción, el contenedor no tendrá acceso a ningún tipo de red. Esto significa que el contenedor se ejecutará completamente aislado del mundo exterior y no podrá comunicarse con otros contenedores o con el host de Docker.
La opción de red tipo "none" es útil en situaciones donde se requiere una mayor seguridad o aislamiento del contenedor. Por ejemplo, si se está ejecutando una aplicación que maneja datos altamente confidenciales, se puede utilizar esta opción para garantizar que el contenedor no tenga acceso a ninguna red y, por lo tanto, no pueda comunicarse con el mundo exterior. Sin embargo, es importante tener en cuenta que si se utiliza esta opción, el contenedor no podrá recibir actualizaciones o paquetes desde Internet, lo que podría limitar la funcionalidad del contenedor.

Conclusión

En resumen, las redes de Docker son una herramienta útil para mejorar la seguridad, el rendimiento y la flexibilidad de las aplicaciones en contenedores. Al crear redes personalizadas, los usuarios pueden adaptar la configuración de red a sus necesidades específicas, lo que puede mejorar la eficiencia y la seguridad en general. Con los pasos simples que se han descrito, los usuarios pueden crear y administrar sus redes de Docker de manera efectiva.