07. Modo de comunicación de la red Docker

Tabla de contenido

1. Introducción

2. Principios básicos

3. Configuración de red Docker

3.1 Ver configuración de red

3.2, 4 modos de red

3.3, modo puente

3.3.1, utilizando la red puente

3.3.2, red puente personalizada

3.4, modo anfitrión

3.5, modo contenedor

3.6, ningún modo

4. Resumen


1. Introducción

Anteriormente presentamos el contenido relevante del contenedor Docker, y el contenedor Docker se ejecuta en la máquina virtual de la máquina host. Estas máquinas virtuales son independientes entre sí sin ninguna interfaz entre sí, es decir, los contenedores están lógicamente aislados entre sí. Entonces, ¿cómo lograr la comunicación mutua entre contenedores? De esto es de lo que vamos a hablar hoy.

2. Principios básicos

Las interfaces de red en los contenedores de Docker son interfaces virtuales de forma predeterminada. La mayor ventaja de la interfaz virtual es que la eficiencia de reenvío es extremadamente alta. Esto se debe a que Linux implementa el reenvío de datos entre interfaces virtuales mediante la duplicación de datos en el kernel, es decir, los paquetes de datos en el búfer de la interfaz de envío se copiarán directamente en el búfer de la interfaz de recepción sin pasar por un dispositivo de red físico externo. .

La red de Docker hace un buen uso de la tecnología de red virtual de Linux. Cree una interfaz virtual (veth) en la tarjeta de red física y el contenedor del host, y permita que se conecten a través del puente docker0 del host. Ponemos un par de veth que se llama par veth .

3. Configuración de red Docker

3.1 Ver configuración de red

Podemos ver la información de configuración de red de Docker con el siguiente comando.

docker network

Se pueden ver varios modos de comunicación de red de Docker a través de los siguientes comandos.

docker network ls

0

Puede ver que hay 3 modos: puente, host, ninguno. Y el valor predeterminado es puente.

Comencemos un contenedor docker al azar, el nombre del contenedor es myapp y no se especifica ningún modo de red:

docker run -d -p 18080:8899  myapp

0

Después de que el inicio sea exitoso, verificamos los detalles del puente de red:

docker network inspect bridge

Puede ver que el contenedor contiene nuestro contenedor myapp, lo que significa que el contenedor myapp que acabamos de iniciar usa el modo de red puente de forma predeterminada.

0

Y la dirección de subred predeterminada es "172.17.0.0/16". La IP del contenedor es 172.17.0.2, que es una subred que pertenece a la red puente.

3.2, 4 modos de red

Docker proporciona un total de 4 modos de comunicación de red: puente, contenedor, host y ninguno. Además del puente, el host y ninguno visto a través de la red docker anterior, también hay un modo de contenedor.

modelo

Ya sea para admitir múltiples hosts

mecanismo de comunicación vertical

mecanismo de comunicación horizontal

puente

No

Vincular puerto de host

Comunicarse a través del puente Linux

envase

No

Vincular puerto de host

Comunicarse a través de una conexión Linux

anfitrión

Comunicarse a través de la red host

Comunicarse a través de la red host

ninguno

No

incapaz de comunicarse

Solo se puede comunicar a través de una conexión Linux

Dado que los contenedores de Docker están lógicamente aislados entre sí, se crea un entorno de red aislado en el contenedor cuando se instala Docker. En un entorno de modo de red aislado, cada contenedor que se ejecuta en el host tiene una pila de red completamente independiente y el entorno de red del contenedor Docker está aislado del host. Mediante el uso de diferentes modos de red de Docker, los contenedores de Docker pueden compartir el espacio de nombres de la red de la máquina host, y también se puede realizar el acceso mutuo entre los contenedores de Docker.

3.3, modo puente

Como se mencionó anteriormente, el modo puente es el modo de comunicación de red predeterminado de Docker y también es el modo más utilizado por los desarrolladores. En modo puente, el motor de Docker crea un espacio de nombres de red independiente. Esto garantiza que los contenedores que se ejecutan en cada espacio de nombres tengan recursos de red independientes, como tarjetas de red.

Usando el modo puente, es muy conveniente realizar el aislamiento de la red entre contenedores y entre contenedores y hosts. Al usar el puente docker0 en el host, se puede realizar la comunicación de red entre el contenedor Docker y el host (o incluso la red externa).

Simplemente experimente:

3.3.1, utilizando la red puente

Cree un contenedor para la imagen de busybox.

BusyBox es un software que integra más de 300 comandos y herramientas de Linux más utilizados. BusyBox incluye herramientas simples como ls, cat, echo, etc., y herramientas más grandes y complejas como grep, find, mount y telnet.

docker run -it busybox /bin/sh

Use ifconfig para ver la información de la red:

Puede ver que la IP de la red interna del contenedor es 172.17.0.3.

3.3.2, red puente personalizada

De forma predeterminada, el motor acoplable creará automáticamente una red puente. Pero, por lo general, en el entorno de producción, personalizaremos una red puente. Por supuesto, Docker también es compatible con nuestra personalización.

1) Cree una red de puente personalizada.

Cree un modo de red llamado mybridge, la IP de la puerta de enlace es 172.19.0.1 y el rango de IP de la subred es 172.19.0.0/24.

docker network create -d bridge  --ip-range=172.19.0.0/24 --gateway=172.19.0.1 --subnet=172.19.0.0/24 mybridge
  • -d: especifique el modo de comunicación de la red, el valor predeterminado es puente.
  • --ip-range: rango de direcciones IP de subred.
  • --gateway: La dirección IP de la puerta de enlace.
  • --subnet: La dirección IP de la subred.
  • mybridge: nombre de red de puente personalizado

2) Ver la red Docker.

docker network ls

Puede ver que hay un modo de comunicación de red adicional de mybridge.

3) Cree un contenedor usando mybridge.

docker run -it --network=mybridge --ip=172.19.0.33 busybox

  • --ip: especifica la dirección IP del contenedor.
  • --network: el modo de comunicación de red utilizado, donde se especifica el mybridge recién creado.

4) Verifique la IP del contenedor.

5) Eliminar la red personalizada.

docker network rm mybridge

3.4, modo anfitrión

En el modo de host, el contenedor y el host comparten el mismo espacio de nombres de red y la dirección IP del contenedor es la misma que la del host. Si la máquina host tiene una dirección IP pública, el contenedor también tiene esta dirección IP pública. Es decir, en este momento, el contenedor puede usar directamente la dirección IP del host para comunicarse con el mundo exterior, y el puerto del servicio en el contenedor también puede usar directamente el puerto del host sin ninguna conversión.

Dado que ya no se requiere el reenvío de la máquina host en el modo host, su rendimiento ha mejorado considerablemente.

1) Cree un contenedor usando el modo host.

docker run -it --net=host busybox /bin/sh

2) Use ifconfig para ver la información de la red.

Dentro del contenedor:

Anfitrión:

Podemos ver que la configuración de red del contenedor y el host son exactamente iguales, lo que significa que el contenedor y el host comparten el mismo espacio de nombres de red.

Si usa el modo host, no necesitamos -p para asignar el puerto al crear el contenedor. Si hay un puerto asignado, aparecerá un mensaje de advertencia al crearlo. Porque la IP y el puerto en este momento se comparten con el host.

Hay dos problemas al usar el modo host:

  1. Debido a que el contenedor utiliza el entorno de red de la máquina host, la función de aislamiento del entorno de red se debilita, lo que hace que la máquina host y el contenedor compitan por los recursos de la red. El contenedor en sí ya no posee todos los recursos de la red, pero comparte los recursos de la red con el host.
  2. El host y el contenedor usan la misma dirección IP, lo que no favorece la configuración y administración de la red.

3.5, modo contenedor

En el modo contenedor, el entorno de red se comparte entre contenedores. Es decir, un contenedor usará el espacio de nombres de red de otro contenedor. Por lo tanto, en este modo, los contenedores pueden acceder entre sí a través de localhost o 127.0.0.1, lo que mejora la eficiencia de la transmisión.

El modo de contenedor ahorra recursos de red, pero no hay aislamiento de red para los contenedores que se ejecutan en este modo. El aislamiento de la red de contenedores se encuentra entre la red puente y la red host.

El modo contenedor es muy útil en algunos escenarios especiales. Por ejemplo: al crear un Pod en Kubernetes, el contenedor base del Pod se creará primero, mientras que otros contenedores en el Pod usan el modo de contenedor para comunicarse con el contenedor base. Cada contenedor en el Pod usa localhost o 127.0.0 para comunicarse, de modo que todos los contenedores en el Pod formen un todo lógico.

1) Cree un contenedor A, utilizando el modo de red predeterminado.

docker run -it busybox /bin/sh

Ver información de la red:

2) Cree un contenedor B, use el modo contenedor y apunte al contenedor A recién creado.

Vea el containerId del contenedor A: 0783212a7f4c.

Abra el recipiente B.

docker run -it --net=container:0783212a7f4c busybox /bin/sh

Ver ifconfig:

Se puede ver que la información de IP de los contenedores A y B es la misma, lo que indica que el contenedor A y el contenedor B usan el mismo espacio de nombres de red.

Porque cuando se crea el contenedor B, se usa el modo de contenedor, por lo que el contenedor B no necesita crear su propio espacio de nombres de red, sino que usa directamente el contenedor A.

3.6, ningún modo

En modo ninguno, el contenedor tiene un espacio de nombres de red independiente, pero no contiene ninguna configuración de red, y solo se puede acceder al contenedor a través de localhost o 127.0.0.1.

docker run -it --net=none busybox /bin/sh

En términos generales, el modo ninguno se usa en algunas situaciones que requieren alta seguridad pero no requieren redes. Mantenga su propia red en un espacio cerrado para excluir la interferencia de otras redes externas.

4. Resumen

En términos generales, el modo puente es el más utilizado en producción. Los modos contenedor y host también tienen sus propios escenarios de uso correspondientes, que se pueden seleccionar de acuerdo con la situación real. Comprender varios modos de comunicación de red diferentes puede ayudarnos a aprender más sobre la comunicación entre diferentes contenedores o entre contenedores y hosts. Estudiemos juntos~

Supongo que te gusta

Origin blog.csdn.net/p793049488/article/details/132051774
Recomendado
Clasificación