Saltar al contenido

La red Docker Macvlan dentro del contenedor no llega a su propio host

Estate atento ya que en esta noticia encontrarás el arreglo que buscas.Esta reseña ha sido aprobado por nuestros expertos para asegurar la calidad y exactitud de nuestro contenido.

Solución:

Este es un comportamiento definido para macvlan y es por diseño. Consulte la documentación de Docker Macvlan

  • Al usar macvlan, no puede hacer ping ni comunicarse con la dirección IP del espacio de nombres predeterminado. Por ejemplo, si crea un contenedor e intenta hacer ping al eth0 del host de Docker, no funcionará. Ese tráfico es filtrado explícitamente por los propios módulos del kernel para ofrecer aislamiento y seguridad adicionales del proveedor.

  • Se puede agregar una subinterfaz macvlan al host de Docker para permitir el tráfico entre el host de Docker y los contenedores. La dirección IP debe configurarse en esta subinterfaz y eliminarse de la dirección principal.

La pregunta es “un poco antigua”, sin embargo, a otros les puede resultar útil. Hay una solución alternativa descrita en Acceso de anfitrión sección de USO DE REDES DOCKER MACVLAN POR LARS KELLOGG-STEDMAN. Puedo confirmar que está funcionando.

Acceso al host Con un contenedor conectado a una red macvlan, descubrirá que si bien puede comunicarse con otros sistemas en su red local sin problemas, el contenedor no podrá conectarse a su host (y su host no podrá conectarse). a su contenedor). Esta es una limitación de las interfaces macvlan: sin el soporte especial de un conmutador de red, su host no puede enviar paquetes a sus propias interfaces macvlan.

Afortunadamente, existe una solución para este problema: puede crear otra interfaz macvlan en su host y usarla para comunicarse con contenedores en la red macvlan.

Primero, voy a reservar una dirección de nuestro rango de red para que la use la interfaz del host usando la opción –aux-address para crear la red docker. Eso hace que nuestra línea de comando final se vea así:

docker network create -d macvlan -o parent=eno1 
  --subnet 192.168.1.0/24 
  --gateway 192.168.1.1 
  --ip-range 192.168.1.192/27 
  --aux-address 'host=192.168.1.223' 
  mynet

Esto evitará que Docker asigne esa dirección a un contenedor.

A continuación, creamos una nueva interfaz macvlan en el host. Puedes llamarlo como quieras, pero a este lo llamo mynet-shim:

ip link add mynet-shim link eno1 type macvlan  mode bridge

Ahora necesitamos configurar la interfaz con la dirección que reservamos y abrirla:

ip addr add 192.168.1.223/32 dev mynet-shim
ip link set mynet-shim up

Lo último que debemos hacer es decirle a nuestro host que use esa interfaz cuando se comunique con los contenedores. Esto es relativamente fácil porque hemos restringido nuestros contenedores a un subconjunto particular de CIDR de la red local; simplemente agregamos una ruta a ese rango como esta:

ip route add 192.168.1.192/27 dev mynet-shim

Con esa ruta establecida, su host utilizará automáticamente esta interfaz mynet-shim cuando se comunique con contenedores en la red mynet.

Tenga en cuenta que la configuración de la interfaz y el enrutamiento que se presenta aquí no es persistente: perderá si reinicia su host. Cómo hacerlo persistente depende de la distribución.

Finalizando este artículo puedes encontrar las notas de otros desarrolladores, tú también tienes el poder mostrar el tuyo si lo crees conveniente.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *