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:
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.
¿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.
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:
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: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.