Modos de red dcoker-four

Uno, el principio de realización

  • Docker utiliza puentes de Linux para virtualizar un puente de contenedor de Docker (docker0) en el host. Cuando Docker inicia un contenedor, asignará una dirección IP al contenedor de acuerdo con el segmento de red del puente de Docker, que se llama Container-IP. En Al mismo tiempo, el puente Docker es la puerta de enlace predeterminada de cada contenedor. Debido a que los contenedores en el mismo host están todos conectados al mismo puente, los contenedores pueden comunicarse directamente a través del Container-IP del contenedor.
  • El puente Docker está virtualizado por el host y no es un dispositivo de red real. La red externa no se puede direccionar. Esto también significa que la red externa no puede acceder al contenedor a través del Container-IP directo. Si el contenedor desea que el acceso externo sea accesible, puede asignar el puerto del contenedor al host del host (asignación de puerto), es decir, cuando la ejecución de la ventana acoplable crea el contenedor, puede usar el parámetro -p o -P para habilitarlo. al acceder al contenedor, puede utilizar la [IP del host]: [Puerto del contenedor] Acceda al contenedor.

En segundo lugar, los detalles de la red

1. Análisis

docker  网络模式 (k8s CNI网络插件)
NAT 模式 (默认)
NAT宿主网络

None模式

有的网络不需要与网络进行通讯,没有协议栈的要求

k8s最适合编排没有状态的服务(交付到k8s里面的服务是没有状态的,最多只需要横向扩容)

Host模式

docker和宿主机在同一个网段(不隔离)

容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)
mount    文件系统,挂载点
user     操作
pid      进程编号
uts      主机名和主机域
ipc      信号量、消息队列、共享内存
net      网络设备、网络协议栈、端口等

2. Cuatro modos de red

docker network ls      //查看网络列表
  • Cuando se instala la ventana acoplable, creará automáticamente tres redes, puente (el contenedor creado está conectado a la red de forma predeterminada), ninguna y host
Modo de red Docker Configuración Descripción
modo anfitrión -net = host El contenedor y el host comparten el espacio de nombres de la red.
modo contenedor -net = contenedor: NAME_or_ID El contenedor y otro contenedor comparten el espacio de nombres de la red. El pod en kubernetes es que varios contenedores comparten un espacio de nombres de red.
modo ninguno -net = ninguno El contenedor tiene un espacio de nombres de red independiente, pero no realiza ninguna configuración de red en él, como asignar un par de pares y una conexión de puente de red, configurar IP, etc.
Modo Puente -net = puente (El predeterminado es este modo)

1.modo host

  • El contenedor no obtendrá un espacio de nombres de red independiente, pero compartirá un espacio de nombres de red con el host. El contenedor no virtualizará su propia tarjeta de red, configurará su propia IP, etc., sino que utilizará la IP y el puerto del host, (es decir, si el contenedor es una web, accederá directamente al puerto del host sin traducción NAT. El host funciona igual que la Web. A excepción de la red, todo lo demás en el contenedor sigue estando aislado).
  • Los contenedores que usan el modo de host pueden usar directamente la dirección IP del host para comunicarse con el mundo exterior, y el puerto de servicio dentro del contenedor también puede usar el puerto del host sin NAT. La mayor ventaja del host es que el rendimiento de la red es mejor, pero en el host de la ventana acoplable Los puertos que se han utilizado ya no se pueden utilizar y el aislamiento de la red no es bueno.
    Inserte la descripción de la imagen aquí

2.modo contenedor

  • Este modo especifica que el contenedor recién creado y un contenedor existente comparten un espacio de nombres de red en lugar de compartirlo con el host. El contenedor recién creado no creará su propia tarjeta de red, configurará su propia IP, sino que compartirá la IP, el rango de puertos, etc. con un contenedor específico. De manera similar, además de los aspectos de red de los dos contenedores, otras cosas como los sistemas de archivos y las listas de procesos aún están aisladas. Los procesos de los dos contenedores pueden comunicarse a través del dispositivo de tarjeta de red lo
    Inserte la descripción de la imagen aquí

Modo 3.ninguno

  • En el modo ninguno, el contenedor Docker tiene su propio espacio de nombres de red, pero no realiza ninguna configuración de red para el contenedor Docker. En otras palabras, este contenedor Docker no tiene información como tarjeta de red, IP, enrutamiento, etc. Necesitamos agregar tarjetas de red y configurar la IP para el contenedor Docker nosotros mismos. Este modo desactiva la función de red del contenedor.
  • En este modo de red, el contenedor solo tiene una red de bucle invertido bajo y ninguna otra tarjeta de red. El modo none se puede especificar mediante --network = none cuando se crea el contenedor. No hay forma de conectarse a este tipo de red y una red cerrada puede garantizar la seguridad del contenedor.
    Inserte la descripción de la imagen aquí

4.modo puente

  • Este modo asignará y establecerá la IP para cada contenedor, conectará el contenedor a un puente virtual docker0 y se comunicará con el host a través del puente docker0 y la configuración de la tabla nat de iptables.
  • Inserte la descripción de la imagen aquí
  • Cuando se inicia el proceso de Docker, se creará un puente virtual llamado docker0 en el host y el contenedor de Docker iniciado en este host se conectará a este puente virtual. El puente virtual funciona como un conmutador físico, de modo que todos los contenedores del host están conectados a una red de capa 2 a través del conmutador.
  • Asigne una IP al contenedor desde la subred de docker0 y configure la dirección IP de docker0 como la puerta de enlace predeterminada del contenedor. Cree un par de dispositivos de cinco pares de tarjetas de red virtual en el host. Docker coloca un extremo del dispositivo de cinco pares en el contenedor recién creado y lo llama eth0 (la tarjeta de red del contenedor), y el otro extremo se coloca en el host con un nombre similar como vethxxx Name y agregue este dispositivo de red al puente docker0. Se puede ver a través del comando brctl show.
  • El modo puente es el modo de red predeterminado de la ventana acoplable. Sin el parámetro -net, es el modo puente. Cuando se usa docker run -p, docker en realidad crea reglas DNAT en iptables para realizar la función de reenvío de puertos. Puede usar iptables -t nat -vnL para ver.

Tres, explicación del modo de red veth

Inserte la descripción de la imagen aquí

Cuatro configuraciones de red personalizadas

  • El modo puente se utiliza de forma predeterminada al crear un contenedor, pero el uso del puente no admite la especificación de una IP para el contenedor.
[root@localhost ~]# docker run -itd --name test1 --network bridge --ip 172.17.0.10 centos:7 /bin/bash

20dc45293929f81013a60391bef2626f581a8d3d4f29b8a87ac8b1f9b585ab2a

docker: Error response from daemon: user specified IP address is supported on user defined networks only.    #提示想要为容器指定IP只能在用户自定义的网络中才行
  • Configurar IP fija personalizada
[root@localhost ~]# docker network create --subnet=172.31.0.0/24 test   

#创建自定义网络test

[root@localhost ~]# docker run -itd --name web1 --net test --ip 172.31.0.10 centos:7 /bin/bash      
  • Cree un contenedor, especifique la red como prueba y especifique la dirección IP 172.31.0.10

Supongo que te gusta

Origin blog.csdn.net/weixin_45647891/article/details/114876189
Recomendado
Clasificación