Parte 6 – Docker Networking

En este nuevo post vamos a ver un poco por encima las distintas redes disponible en Docker, las redes siempre son un dolor de cabeza como no este correctamente configuradas y entendamos por donde pasa nuestro tráfico.

Network Driver

Bridge

El tipo Bridge, es el que se utiliza por defecto cuando no se especifica, nuestro Host establece un puento de software a los contenedores, pero aisla de un red a otra..

Cada vez que se crea un container genera automaticamente un nombre DNS para su resolución.

Use bridge networks | Docker Documentation

Pruebas Bridge

He creado dos redes bridge 10.10.0.0/24 y 10.20.0.0/24, he creado 4 containers, 2 a un red y 2 a la otra.

docker network create Bridge-01 --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1
docker network create Bridge-02 --driver bridge --subnet 10.20.0.0/24 --gateway 10.20.0.1
docker run -dit --name BG-01 --network Bridge-01  alpine ash
docker run -dit --name BG-02 --network Bridge-01  alpine ash
docker run -dit --name BG-03 --network Bridge-02  alpine ash
docker run -dit --name BG-04 --network Bridge-02  alpine ash

Me conecto al Container BG-01 (docker attach <Container>) que esta en la red Bridge-01, realizamos las siguientes pruebas:

  • Ping al Container BG-02 en la Misma Red, responde OK.
  • Ping al Container BG-03 y BG-04 en la Distinta Red, responde KO.
  • Ping a IP BG-03 en Distinta Red, responde KO.
  • Ping a red externa OK.

Para salir de la maquina si que se apage CTRL + p CTRL + q

HOST

Parecido a Bridge, pero elimina el aislamiento de red entre el contenedor y el host de Docker, y use la red del host directamente.

El driver host solo funciona en hosts Linux y no es compatible con Docker Desktop para Mac, Docker Desktop para Windows o Docker Windows Server.

Las opciones de port al crear un container se omitirán dado que responderá con la IP del Host.

No se pueden crear más redes con el driver host.

Use host networking | Docker Documentation

Pruebas HOST

Vamos a realizar unas pruebas a ver que nos devuelve.

docker run -dit --name HO-01 --network host  alpine ash
docker attach HO-01

Intentamos llegar a las dos redes Bridge que generamos en el Tipo Bridge y llegamos perfectamente, que en el Bridge entre ellas no se veían.

Hacemos ping al nombre del host y me devuelve como localhost y a nombre publico sin problemas.

Si miramos la IP del container nos devuelve la configuración el Host.

OVERLAY

Para la red Overlay se necesita un entorno de Docker Swarm, esta red nos permite generar una red interna extendida entre todos los nodos de Swarm.

Al agregar un host Docker a un Swarm nos creara dos nuevas redes:

  • una overlay con el nombre de Ingress, que maneja el tráfico entre los servidores del Swarm y será la red por defecto si no especificamos a que red agregar un servicio.
  • y otra red docker_gwbridge, conecta el host con los otros hosts del swarm, también conecta las redes overlay.

Usar redes superpuestas | Documentación acoplable (docker.com)

docker network create --driver overlay Mi-Red
Para Cifrar red overlay

Para cifra una red basta con agregar el parámetro –opt encrypted

docker network create --opt encrypted --driver overlay Mi-Red

IPVLAN

El controlador IPVLAN, nos permite conectar la red en Capa 2/Capa 3 con la tarjeta de red del Host y eliminar el Bridge del Host, nos permitirá segmentar los container con VLANs, los que sería parecido al modo tradicional.

Usar redes IPvlan | Documentación acoplable (docker.com)

Pruebas Capa 2

En mi caso, creare una red IPVlan a mi red 192.168.60.0/24 con Gateway 192.168.60.254, y me asignara IPs del dicho rango a los containers.

El comando sera el siguiente:

docker network create -d ipvlan \
 --subnet=192.168.60.0/24 \
 --gateway=192.168.60.254 \
 -o ipvlan_mode=l2 \
 -o parent=ens160 \
 Mi-IPVlan

El Container asignará una IP de mi rango 192.168.60.1

Realizo un ping a otra red para que pase a través del Gateway

Y en el Firewall puedo ver que el container con la ip asignada.

MACVLAN

El controlador MACVlan nos permite asignar MAC a la tarjeta de red, por ejemplo para uso de trafico de red que es necesaria una MAC.

docker network create -d macvlan \
  --subnet=172.16.86.0/24 \
  --gateway=172.16.86.1 \
  -o parent=eth0 \
  Mi-MACVLAN

Usar redes macvlan | Documentación acoplable (docker.com)

NONE

Con este tipo de controlador el container no tendra red y estará totalmente aislada.

docker run -dit \
  --network none \
  --name None-01 \
  alpine:latest ash

Crear Network

Para crear una nueva red, muy fácil docker network create Mi_Red.

Si no se especifica, por defecto nos la crea en tipo bridge.

docker network create Mi_Red

Ejemplo, crear la red Bridge-01, tipo bridge, con el rango 10.10.0.0/24 y su gateway.

docker network create Bridge-01 --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1

Remover Network

Para remover las redes usaremos el comando siguiente:

docker network rm <Network>

Si borramos una red que contenga container estos se quedaran sin red.

Conectar/Desconectar red de Container

Para conectar o desconectar un container a la red, solo necesitamos usar uno de estos comandos:

docker network connect <Network> <Container>
docker network disconnect <Network> <Container>

Compose YAML

Vamos a configurar la nuestra red desde un fichero YAML.

Ejemplo 1

En este ejemplo teniendo una red existente le diremos a que los containers se conecten a dicha red.

docker network create DemoNet --driver bridge --subnet 10.10.0.0/24 --gateway 10.10.0.1

Solo necesitamos especificar el nombre de la red.

version: '3.8'

services:
  Demo-Network:
    image: alpine:latest
    container_name: Net-Compose
    stdin_open: true # docker run -i
    tty: true        # docker run -t
    restart: unless-stopped
    networks:
      - DemoNet
networks:
  DemoNet:
    external: true

Ejemplo 2

En este ejemplo creamos una nueva red para conectar los nuevos containers.

version: '3.8'

services:
  Demo-Network:
    image: alpine:latest
    container_name: Net-Compose
    stdin_open: true # docker run -i
    tty: true        # docker run -t
    restart: unless-stopped
    networks:
      - NewNet
networks:
        NewNet:
          driver: ipvlan
          ipam:
            driver: default
            config:
              - subnet: 192.168.60.0/24
                gateway: 192.168.60.254

Mordor Blog – Parte 1 – Instalar Dockers en Raspberry-Pi

Mordor Blog – Parte 2 – Instalar Docker Compose

Mordor Blog – Parte 3 – Desplegar Pi-Hole con DoH y Docker Compose

Mordor Blog – Parte 4 – Depliegue Docker Swarm

Mordor Blog – Parte 5 – Docker Volumenes

Dejar un comentario

Tu dirección de correo electrónico no será publicada.