es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Docker swarm ingress: incapaz de conectar a través de dos redes.

Intenté ejecutar Docker Swarm en dos redes diferentes.

  • La primera red es 10.10.100.x/24
  • La segunda red es 10.10.150.x/24

Ambas redes pueden verse. No hay reglas de firewall entre ellas para bloquear ningún tráfico. Específicamente probé los puertos 7946 TCP y UDP y 4789 UDP. Puedo confirmar que puedo conectarme desde la primera red a la segunda red en ambos puertos y ambos protocolos. Y también desde la segunda red a la primera red sin ningún problema.

Docker Swarm está en funcionamiento y el motor utilizado es 20.10.11. Puedo ver que todos los nodos tienen estado=Ready y disponibilidad=Activa.

La red de ingreso es la predeterminada:

enter image description here

y también puedo ver todas las instancias allí.

Pero cuando despliego cualquier servicio en cualquier nodo con el puerto -p 20000:80, entonces solo puedo ver este nodo desde la red donde fue desplegado.

  • Si el servicio se encuentra en la primera red, solo es accesible a través de nodos de la primera red, no de la segunda.
  • Si el servicio se encuentra en la segunda red, solo es accesible a través de nodos de la segunda red, no de la primera.

enter image description here

¿Alguna idea de cómo solucionar esto?

Gracias


Actualización 1:

Intenté ejecutar Swarm con el parámetro adicional docker swarm init --default-addr-pool 172.100.0.0/16. El resultado sigue siendo el mismo.


Actualización 2:

Basándose en el consejo de @BMitch:

Verifiqué con sudo tcpdump -nn -s0 -v port 4789 or 7946 que el puerto 7946 funciona (UDP y TCP).

También verifiqué con el comando tcpdump anterior y nc -z -v -u 10.10.150.200 4789 (ejecutado desde la primera red) que el puerto 4789 funciona también.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar relacionado con la configuración de red en Docker Swarm. Por defecto, cada servicio se despliega en la red de superposición creada por Docker Swarm, que utiliza una dirección IP virtual para el equilibrio de carga y el descubrimiento de servicios. Esto significa que si despliega un servicio con el puerto -p 20000:80, solo será accesible desde dentro de la red de superposición, que no se extiende a través de las dos redes físicas que tiene.

    Para solucionar esto, puede crear una nueva red de superposición que abarque ambas redes físicas mediante el siguiente comando:

    docker network create --driver overlay --subnet=10.10.0.0/16 my-overlay-network
    

    Esto creará una nueva red de superposición llamada my-overlay-network con un rango de subred que cubre ambas redes físicas. Luego, puede desplegar sus servicios en esta red usando la bandera --network my-overlay-network. Esto hará que el servicio sea accesible desde cualquier nodo en cualquiera de las dos redes físicas.

    Por ejemplo, para desplegar un servicio con el puerto -p 20000:80 en la nueva red de superposición, puede utilizar el siguiente comando:

    docker service create --name my-service --network my-overlay-network -p 20000:80 my-image
    

    Asegúrese de reemplazar my-image con el nombre de la imagen que desee utilizar.

    ¡Espero que esto ayude! Háganme saber si tienen alguna pregunta adicional.

Comments are closed.