Network-Drivers-Bridge

Networking

Nota: El controlador de red predeterminado. Si no especifica un controlador, este es el tipo de red que está creando es el Bridge

Bridge-Networks

-. Bridge-Networks (puente) es un dispositivo de capa de enlace que reenvía el tráfico entre los segmentos de la red. Una Bridge-Networks ser un dispositivo de hardware o un dispositivo de software que se ejecuta dentro del kernel de una máquina host .

-. En términos de Docker, una Bridge-Networks utiliza un puente de software que permite que los contenedores conectados a la misma Bridge-Networks se comuniquen, al tiempo que proporciona aislamiento de los contenedores que no están conectados a esa Bridge-Networks. El controlador de  Bridge de Docker instala automáticamente reglas en la máquina host para que los contenedores de diferentes Bridge-Networks no puedan comunicarse directamente entre sí.

-. Las Bridge-Networks se aplican a los contenedores que se ejecutan en el mismo host de demonio de Docker. Para la comunicación entre contenedores que se ejecutan en diferentes hosts de demonio de Docker, puede administrar el enrutamiento a nivel del sistema operativo o puede usar una red superpuesta.

-. Cuando inicia Docker, se crea automáticamente una red puente predeterminada (también llamada bridge) y los contenedores recién iniciados se conectan a ella a menos que se especifique lo contrario. También puede crear Bridge-Networks personalizadas definidas por el usuario. Las Bridge-Networks definidas por el usuario son superiores a la bridge red predeterminada .

 

Diferencias entre los puentes definidos por el usuario y el puente predeterminado

Los bridge definidos por el usuario proporcionan resolución DNS automática entre contenedores .

-. Los contenedores de la Bridge-Networks predeterminada solo pueden acceder entre sí mediante direcciones IP, a menos que use la –linkopción , que se considera heredada. En una red puente definida por el usuario, los contenedores pueden resolverse entre sí por nombre o alias.

-. Imagine una aplicación con un front-end web y un back-end de base de datos. Si llama a sus contenedores weby db, el contenedor web puede conectarse al contenedor db en db, sin importar en qué host de Docker se esté ejecutando la pila de aplicaciones.

-. Si ejecuta la misma pila de aplicaciones en la red puente predeterminada, debe crear enlaces manualmente entre los contenedores (utilizando la marca heredada –link ). Estos enlaces deben crearse en ambas direcciones, por lo que puede ver que esto se vuelve complejo con más de dos contenedores que deben comunicarse. Alternativamente, puede manipular los /etc/hostsarchivos dentro de los contenedores, pero esto crea problemas que son difíciles de depurar.

Los puentes definidos por el usuario proporcionan un mejor aislamiento .

  1. -. Todos los contenedores sin un –network especificado, se adjuntan a la Bridge-Networks predeterminada. Esto puede ser un riesgo, ya que las pilas / servicios / contenedores no relacionados pueden comunicarse.
  2. -. El uso de una red definida por el usuario proporciona una red de ámbito en la que solo los contenedores conectados a esa red pueden comunicarse .

Los contenedores se pueden conectar y desconectar de las redes definidas por el usuario sobre la marcha

  1. -. Durante la vida útil de un contenedor, puede conectarlo o desconectarlo de las redes definidas por el usuario sobre la marcha. Para eliminar un contenedor de la red puente predeterminada, debe detener el contenedor y volver a crearlo con diferentes opciones de red.

Cada red definida por el usuario crea un puente configurable

-. Si el contenedores usan la Bridge-Networks predeterminada, puede configurarla, pero todos los contenedores usan la misma configuración, como MTU y iptables reglas. Además, la configuración de la Bridge-Networks predeterminada ocurre fuera de Docker y requiere reiniciar Docker.

-. Las Bridge-Networks definidas por el usuario se crean y configuran utilizando docker network create. Si diferentes grupos de aplicaciones tienen diferentes requisitos de red, puede configurar cada puente definido por el usuario por separado, a medida que lo crea.

Los contenedores vinculados en la red puente predeterminada comparten las variables de entorno

-. Originalmente, la única forma de compartir variables de entorno entre dos contenedores era vincularlos usando la –link bandera . Este tipo de intercambio de variables no es posible con redes definidas por el usuario. Sin embargo, existen formas superiores de compartir variables de entorno. Algunas ideas:

  • -. Varios contenedores pueden montar un archivo o directorio que contiene la información compartida, utilizando un volumen de Docker.
  • -. Se pueden iniciar varios contenedores juntos usando docker-compose y el archivo de composición puede definir las variables compartidas.
  • -. Puede utilizar servicios de enjambre en lugar de contenedores independientes y aprovechar las configuraciones y los secretos compartidos .

-. Los contenedores conectados a la misma Bridge-Networks definida por el usuario exponen efectivamente todos los puertos entre sí. Para que un puerto sea accesible para contenedores o hosts que no sean Docker en diferentes redes, ese puerto debe publicarse con la marca -p o –publish.

Gestionar un puente (Bridge) definido por el usuario

Utilice el docker network create comando para crear una red puente definida por el usuario.

  1. In: root@juan-Aspire-ES1-512:/# docker network create my-network
  2. Out: 1712711f2e63b6ee296a4bea53d54b97649373780fad8b802aad8f59042574e9

Puede especificar la subred, el rango de direcciones IP , la puerta de enlace y otras opciones. Consulte resultado de docker network create –help para obtener más detalles.

  1. In: root@juan-Aspire-ES1-512:/# docker network create —help

-. Utilice el docker network rm comando para eliminar una red puente definida por el usuario. Si los contenedores están actualmente conectados a la red, desconéctelos primero.

  1. In: root@juan-Aspire-ES1-512:/# docker network rm my-network
  2. Out: my-network
  3. In: root@juan-Aspire-ES1-512:/#

-. Cuando crea o elimina un puente definido por el usuario o conecta o desconecta un contenedor de un puente definido por el usuario, Docker usa herramientas específicas del sistema operativo para administrar la infraestructura de red subyacente (como agregar o eliminar dispositivos puente o configurar iptables reglas en Linux). ). Estos detalles deben considerarse detalles de implementación. Deje que Docker administre sus redes definidas por el usuario por usted.

Conecte un contenedor a un puente (Bridge) definido por el usuario

-. Cuando crea un nuevo contenedor, puede especificar uno o más –network indicadores. Este ejemplo conecta un contenedor Nginx a la my-network . También publica el puerto 80 en el contenedor al puerto 8080 en el host de Docker, por lo que los clientes externos pueden acceder a ese puerto. Cualquier otro contenedor conectado a la my-network tiene acceso a todos los puertos del my-nginx contenedor y viceversa.

  1. In: root@juan-Aspire-ES1-512:/# docker create –name my-nginx –network my-network –publish 8080:80 nginx:latest
  2. Out: 953f7eb30d23fa1e2300ae9fec4d7c426fb4fdc1d122fee64e6c28046d0fe514

Para conectar un contenedor en ejecución a un puente(Bridge) existente definido por el usuario, use el docker network connect comando. El siguiente comando conecta un my-nginx contenedor que ya se está ejecutando a una my-network ya existente

  1. In: root@juan-Aspire-ES1-512:/# docker network connect my-network my-nginx

Desconecte un contenedor de un puente(Bridge) definido por el usuario

Para desconectar un contenedor en ejecución de un puente-(Bridge) definido por el usuario, use el docker network disconnect comando. El siguiente comando desconecta el my-nginx contenedor de la my-network .

  1. In: root@juan-Aspire-ES1-512:/# docker network disconnect my-network my-nginx

Habilite el reenvío desde contenedores de Docker al mundo exterior

De forma predeterminada, el tráfico de los contenedores conectados a la red puente-(Bridge) predeterminada no se reenvía al mundo exterior. Para habilitar el reenvío, debe cambiar dos configuraciones. Estos no son comandos de Docker y afectan al kernel del host de Docker.

-. Configure el kernel de Linux para permitir el reenvío de IP .

  1. In: root@juan-Aspire-ES1-512:/# sysctl net.ipv4.conf.all.forwarding=1
  2. Out: net.ipv4.conf.all.forwarding = 1

-. Cambie la política de la iptables FORWARDpolítica de DROPa ACCEPT.

  1. In: root@juan-Aspire-ES1-512:/# iptables -P FORWARD ACCEPT

Nota:Estas configuraciones no persisten durante el reinicio, por lo que es posible que deba agregarlas a una secuencia de comandos de inicio.

Utilice la red de puente(Bridge) predeterminada

La bridge red predeterminada se considera un detalle heredado de Docker y no se recomienda para uso en producción. Configurarlo es una operación manual y tiene deficiencias técnicas .

Conecte un contenedor a la red puente predeterminada

-. Si no especifica una red usando la –network bandera, y especifica un controlador de red, su contenedor está conectado a la bridge red predeterminada de forma predeterminada. Los contenedores conectados a la bridge red predeterminada pueden comunicarse, pero solo por dirección IP, a menos que estén vinculados mediante la bandera heredada –link .

Configure la red de puente predeterminada

-. Para configurar la bridge red predeterminada , especifique las opciones en daemon.json. A continuación se muestra un ejemplo daemon.jsoncon varias opciones especificadas. Especifique únicamente la configuración que necesita personalizar.

{

  «bip»: «192.168.1.5/24«,

  «fixed-cidr»: «192.168.1.5/25«,

  «fixed-cidr-v6»: «2001:db8::/64»,

  «mtu»: 1500,

  «default-gateway»: «10.20.1.1»,

  «default-gateway-v6»: «2001:db8:abcd::89»,

  «dns»: [«10.20.1.2″,»10.20.1.3»]

}

Nota: Reinicie Docker para que los cambios surtan efecto.

Recopilando :

Estos apuntes de Networking en Dockers nos dan visión del conjunto de las Redes del ecosistema de Docker las cuales analizare una a una.

Referencias: (Docker)