Nota: Las redes superpuestas conectan varios demonios de Docker y permiten que los servicios de Swarm (enjambre) se comuniquen entre sí.
Docker-Overlay-Networks (Redes Superpuestas)
-. El overlay controlador de red crea una red distribuida entre varios hosts de demonio de Docker. Esta red se ubica sobre (superposiciones) las redes específicas del host, lo que permite que los contenedores conectados a ella (incluidos los contenedores de servicio de enjambre (Swarm)) se comuniquen de forma segura cuando el cifrado está habilitado. Docker maneja de forma transparente el enrutamiento de cada paquete hacia y desde el host correcto del demonio de Docker y el contenedor de destino correcto.
-. Cuando inicializa un enjambre o une un host de Docker a un enjambre existente, se crean dos nuevas redes en ese host de Docker:
- . una red superpuesta llamada ingress, que maneja el control y el tráfico de datos relacionados con los servicios de enjambre. Cuando crea un servicio de enjambre y no lo conecta a una red superpuesta definida por el usuario, se conecta a la ingress red de forma predeterminada.
- . una red puente llamada docker_gwbridge, que conecta el demonio de Docker individual con los otros demonios que participan en el enjambre.
-. Puede crear overlay redes definidas por el usuario utilizando docker network create, de la misma manera que puede crear bridge redes definidas por el usuario . Los servicios o contenedores se pueden conectar a más de una red a la vez. Los servicios o contenedores solo pueden comunicarse a través de las redes a las que están conectados.
-. Aunque puede conectar tanto servicios de enjambre como contenedores independientes a una red superpuesta, los comportamientos predeterminados y las preocupaciones de configuración son diferentes. Por esa razón, el resto de este tema se divide en operaciones que se aplican a todas las redes superpuestas, las que se aplican a las redes de servicios de enjambre y las que se aplican a las redes superpuestas utilizadas por contenedores independientes.
Overlay: conecta múltiples demonios de Docker entre sí y habilita los servicios de Swarm para comunicarse unos entre otros. Es el mejor cuando necesitamos conectar Contenedores ubicados en distintos Docker Hosts, o cuando múltiples aplicaciones trabajan juntas usando servicios Swarm.
Operaciones para todas las redes superpuestas (Overlay)
Crea una red superpuesta (Overlay)
Requisitos previos :
-. Reglas de firewall para demonios de Docker que usan redes superpuestas. Necesita que los siguientes puertos estén abiertos al tráfico hacia y desde cada host de Docker que participa en una red superpuesta:
- Puerto TCP 2377 para comunicaciones de gestión de clústeres
- Puerto TCP y UDP 7946 para comunicación entre nodos
- Puerto UDP 4789 para tráfico de red superpuesto
-. Antes de poder crear una red superpuesta, debe inicializar su demonio Docker como administrador de enjambre usando docker swarm init o unirlo a un enjambre existente usando docker swarm join. Cualquiera de estos crea la ingress red superpuesta predeterminada que utilizan los servicios
de enjambre de forma predeterminada. Debe hacer esto incluso si nunca planea utilizar los servicios de enjambre. Posteriormente, puede crear redes de superposición adicionales definidas por el usuario.
- In: root@juan-Aspire-ES1-512:/# docker swarm init
- Out: Swarm initialized: current node (6qyzlsqsnqro4uqq4a6xjx283) is now a manager.
Para agregar un trabajador a este enjambre, ejecute el siguiente comando:
- docker swarm join –token SWMTKN-1-3ln29vzuwghctmnnsrtihsuigy9fwx8hfxg1zoxgn24z9vx60k-eey9d7tg09xrlaen592g00g4r 192.168.1.36:2377
Para agregar un administrador a este enjambre, ejecute ‘docker swarm join-token manager’ y siga las instrucciones.
Para crear una red superpuesta para usar con servicios de enjambre, use un comando como el siguiente:
- In: root@juan-Aspire-ES1-512:/# docker network create -d overlay my-overlay
- Out: vpbd7p1c73hk08w6g77aewd08
Para crear una red superpuesta que pueda ser utilizada por servicios de enjambre o contenedores independientes para comunicarse con otros contenedores independientes que se ejecutan en otros demonios de Docker, agregue la –attachable marca:
- In: root@juan-Aspire-ES1-512:/# docker network create -d overlay –attachable my-attachable-overlay
- Out: 5rs44n9z3gcf0em0c91jydo6t
Puede especificar el rango de direcciones IP, la subred, la puerta de enlace y otras opciones. Consulte docker network create –help para obtener más detalles.
Cifrado del tráfico en una red superpuesta (Overlay)
- . Todo el tráfico de gestión de servicios de enjambre está encriptado de forma predeterminada, utilizando el algoritmo AES en modo GCM. Los nodos de administrador en el enjambre rotan la clave utilizada para cifrar los datos de Gossip-Chimes cada 12 horas.
- . Para cifrar también los datos de la aplicación, agregue –opt encryptedal crear la red superpuesta Overlay. Esto habilita el cifrado IPSEC a nivel de vxlan. Este cifrado impone una penalización de rendimiento no despreciable, por lo que debe probar esta opción antes de usarla en producción.
- . Cuando habilita el cifrado de superposición, Docker crea túneles IPSEC entre todos los nodos donde se programan las tareas para los servicios adjuntos a la red de Overlay. Estos túneles también utilizan el algoritmo AES en modo GCM y los nodos administradores rotan automáticamente las claves cada 12 horas
Nota:El cifrado de red superpuesto no es compatible con Windows.
Redes superpuestas(Overlay) en modo enjambre y contenedores independientes
Puede usar la función de red superpuesta con ambos –opt encrypted –attachable y adjuntar contenedores no administrados a esa red:
- In: root@juan-Aspire-ES1-512:/# docker network create –opt encrypted –driver overlay –attachable my-attachable-multi-host-network
- Out: p5dozt665lur9yhkx8tbh4jv3
Personaliza la red de entrada predeterminada
-. La mayoría de los usuarios nunca necesitan configurar la ingress red, pero Docker le permite hacerlo. Esto puede resultar útil si la subred elegida automáticamente entra en conflicto con una que ya existe en su red, o si necesita personalizar otras configuraciones de red de bajo nivel, como la MTU.
-. Personalizar la ingress red implica eliminarla y volver a crearla. Por lo general, esto se hace antes de crear cualquier servicio en el enjambre. Si tiene servicios existentes que publican puertos, esos servicios deben eliminarse antes de poder eliminar la ingress red.
-. Durante el tiempo que no ingress existe una red, los servicios existentes que no publican puertos continúan funcionando pero no tienen balance de carga. Esto afecta a los servicios que publican puertos, como un servicio de WordPress que publica el puerto 80.
-. Inspeccione el ingress uso de la red docker network inspect ingress y elimine los servicios cuyos contenedores estén conectados. Estos son servicios que publican puertos, como un servicio de WordPress que publica el puerto 80. Si no se detienen todos estos servicios, el siguiente paso falla.
-. Eliminar la ingress red existente :
- In: root@juan-Aspire-ES1-512:/# docker network inspect ingress
- In: root@juan-Aspire-ES1-512:/# docker network rm ingress
- Out: WARNING! Before removing the routing-mesh network, make sure all the nodes in your swarm run the same docker engine version. Otherwise, removal may not be effective and functionality of newly create ingress networks will be impaired. Are you sure you want to continue? [y/N] y ingress
-. Cree una nueva red superpuesta utilizando la –ingress bandera, junto con las opciones personalizadas que desee configurar. Este ejemplo establece la MTU en 1200, establece la subred en 10.11.0.0/16y establece la puerta de enlace en 10.11.0.2.
- In: root@juan-Aspire-ES1-512:/# docker network create –driver overlay –ingress –subnet=10.11.0.0/16 –gateway=10.11.0.2 –opt com.docker.network.driver.mtu=1200 my-ingress
- Out: 2rbmcci1tvbcg7nl9odp1jt2w
Puede nombrar su ingress red con otro nombre ingress, pero solo puede tener uno. Un intento de crear una segunda falla.
-. Reinicie los servicios que detuvo en el primer paso.
- In: root@juan-Aspire-ES1-512:/# docker network inspect my-ingress
Personaliza la interfaz
El docker_gwbridgees un puente virtual que conecta las redes superpuestas (incluida la ingress red) para una red física del individuo acoplable demonio. Docker lo crea automáticamente cuando inicializa un enjambre o une un host de Docker a un enjambre, pero no es un dispositivo Docker. Existe en el kernel del host de Docker. Si necesita personalizar su configuración, debe hacerlo antes de unir el host de Docker al enjambre o después de eliminar temporalmente el host del enjambre.
1-. Detenga Docker.
2-. Elimina la docker_gwbridgeinterfaz existente .
- In: root@juan-Aspire-ES1-512:/# ip link set docker_gwbridge down
- In: root@juan-Aspire-ES1-512:/# ip link del dev docker_gwbridge
3-. Inicie Docker. No te unas al enjambre ni lo inicialices.
4-. Cree o vuelva a crear el docker_gwbridge puente manualmente con su configuración personalizada, usando el docker network create comando. Este ejemplo usa la subred 10.11.0.0/16. Para obtener una lista completa de opciones personalizables, .
- In: root@juan-Aspire-ES1-512:/# docker network create \
- –subnet 10.11.0.0/16 \
- –opt com.docker.network.bridge.name=docker_gwbridge \
- –opt com.docker.network.bridge.enable_icc=false \
- –opt com.docker.network.bridge.enable_ip_masquerade=true \
- docker_gwbridge
5-. Inicialice o únase al enjambre. Dado que el puente ya existe, Docker no lo crea con configuraciones automáticas.
Operaciones para servicios de enjambre
Publica puertos en una red superpuesta
-. Los servicios de enjambre conectados a la misma red superpuesta exponen efectivamente todos los puertos entre sí. Para que un puerto sea accesible fuera del servicio, que el puerto debe ser publicada con el -p o la –publish bandera en docker service create o docker service update. Se admiten tanto la sintaxis heredada separada por dos puntos como la sintaxis más reciente de valores separados por comas. Se prefiere la sintaxis más larga porque es algo autodocumentada.
- Asigne el puerto TCP 80 en el servicio al puerto 8080 en la malla de enrutamiento.
-p 8080: 80 o -p publicado = 8080, destino = 80
- Asigne el puerto UDP 80 en el servicio al puerto 8080 en la malla de enrutamiento.
-p 8080: 80 / udp o -p publicado = 8080, objetivo = 80, protocolo = udp
- Asigne el puerto TCP 80 en el servicio al puerto TCP 8080 en la malla de enrutamiento y asigne el puerto UDP 80 en el servicio al puerto UDP 8080 en la malla de enrutamiento.
-p 8080: 80 / tcp -p 8080: 80 / udp o
-p publicado = 8080, objetivo = 80, protocolo = tcp -p publicado = 8080, objetivo = 80, protocolo = udp
Omita la malla de enrutamiento para un servicio de enjambre
-. De forma predeterminada, los servicios de enjambre que publican puertos lo hacen utilizando la malla de enrutamiento. Cuando se conecta a un puerto publicado en cualquier nodo de enjambre (ya sea que esté ejecutando un servicio determinado o no), se le redirige a un trabajador que está ejecutando ese servicio, de forma transparente. Efectivamente, Docker actúa como un equilibrador de carga para sus servicios de enjambre. Los servicios que utilizan la malla de enrutamiento se ejecutan en modo de IP virtual (VIP) . Incluso un servicio que se ejecuta en cada nodo (por medio de la –mode global bandera) utiliza la malla de enrutamiento. Cuando se utiliza la malla de enrutamiento, no hay garantía sobre qué servicios de nodo Docker solicita el cliente.
-. Para evitar la malla de enrutamiento, puede iniciar un servicio usando el modo DNS Round Robin (DNSRR) , configurando la –endpoint-mode bandera en dnsrr. Debe ejecutar su propio equilibrador de carga frente al servicio. Una consulta de DNS para el nombre del servicio en el host de Docker devuelve una lista de direcciones IP para los nodos que ejecutan el servicio. Configure su balanceador de carga para consumir esta lista y balancear el tráfico entre los nodos.
Control y tráfico de datos separados
De forma predeterminada, el tráfico de control relacionado con la gestión de enjambres y el tráfico hacia y desde sus aplicaciones se ejecuta en la misma red, aunque el tráfico de control de enjambres está encriptado. Puede configurar Docker para usar interfaces de red independientes para manejar los dos tipos diferentes de tráfico. Cuando inicialice o se una al enjambre, especifique –advertise-addry por –datapath-addr separado. Debes hacer esto para cada nodo que se una al enjambre.
Operaciones para contenedores independientes en redes superpuestas
Adjunte un contenedor independiente a una red superpuesta
La ingress red se crea sin la –attachable bandera, lo que significa que solo los servicios de enjambre pueden usarla y no los contenedores independientes. Puede conectar contenedores independientes a redes superpuestas definidas por el usuario que se crean con la –attachable bandera. Esto brinda a los contenedores independientes que se ejecutan en diferentes demonios de Docker la capacidad de comunicarse sin la necesidad de configurar el enrutamiento en los hosts de demonios de Docker individuales.
Publicar puertos
- Asigne el puerto TCP 80 en el contenedor al puerto 8080 en la red superpuesta.
-p 8080:80
- Asigne el puerto UDP 80 en el contenedor al puerto 8080 en la red superpuesta.
-p 8080:80/udp
- Asigne el puerto SCTP 80 en el contenedor al puerto 8080 en la red superpuesta.
-p 8080:80/sctp
- Asigne el puerto TCP 80 en el contenedor al puerto TCP 8080 en la red superpuesta y asigne el puerto UDP 80 en el contenedor al puerto UDP 8080 en la red superpuesta.
-p 8080:80/tcp -p 8080:80/udp
Descubrimiento de contenedores
Para la mayoría de las situaciones, debe conectarse al nombre del servicio, que tiene un equilibrio de carga y es manejado por todos los contenedores («tareas») que respaldan el servicio. Para obtener una lista de todas las tareas que respaldan el servicio, realice una búsqueda de DNS paratasks.<service-name>.
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.