Uso de redes físicas privadas con modo enjambre Docker

11

Estoy trabajando en una configuración de producción con Docker en modo enjambre (usando Docker 17.03.1-ce). Habrá 2 centros de datos involucrados. En ambos centros de datos, todas las máquinas tienen una IP pública y una IP privada (local a centro de datos) en una red privada, por lo que habrá 2 redes privadas.

Enlace a la configuración de visualización de diagrama simplificado

El tráfico de red a través de las interfaces de red privadas es gratuito, mientras que el tráfico a través de la interfaz pública no supera un cierto límite (y es más lento), por lo que siempre que sea posible, preferiría que el tráfico de red vaya a través de las interfaces privadas.

Ahora, por lo que entiendo (creo), todo el tráfico entre los nodos de Docker en modo enjambre pasará a través de la misma interfaz de red que se utiliza para comunicarse con los maestros de enjambre, que en mi caso tendrán que ser públicos para crear redes de múltiples CC posible. Sin embargo, el tráfico más esperado será entre nodos en los mismos DC, y sería muy bueno si Docker pudiera enrutar el tráfico a través de mis redes privadas si los nodos de origen y destino se encuentran en la misma red privada.

Me temo que esto podría no ser posible de inmediato porque los maestros de enjambre no saben acerca de estas redes privadas y las IP que los nodos tienen en ellas.

Una solución que se me ocurre es configurar una VPN e implementar el enjambre además de eso, pero esto agrega complejidad adicional y preferiría una solución de enjambre Docker puro.


Actualización : como se sugiere en un comentario, la base para una solución podría ser usar iptables para enrutar el tráfico saliente a IP privadas en lugar de las públicas. Sin embargo, si quisiera hacer esto, mi próximo problema sería cómo administrar todas estas reglas. Con 10 servidores en un DC, necesitaría 10 * 9 = 90 de ellos para enrutar todo el tráfico local posible a través de la red privada. Me imagino que tal vez exista alguna herramienta que pueda ayudar con tal tarea o podría crear una, pero tal vez haya una manera mucho más simple de hacer esto.

Ede
fuente
1
Puede usar iptables para reescribir la ip de destino de hermanos en el mismo centro de datos a sus ips de red privada. Además, esto debería estar en serverfault no SO;)
n00b32
Sí, un poco más de excavación me llevó a la misma conclusión. Sin embargo, eso será una molestia, realmente necesitaría una herramienta para hacerlo automáticamente (reescribir todas las IP entre todos los nodos en un clúster / DC). Después de todo, para N nodos necesitaría (N-1) ^ 2 reglas de iptables.

Respuestas:

1

(Probablemente debería ser un comentario, pero todavía no puedo comentar)

Como no puede usar nombres de host y / o DNS para arrancar el clúster, no veo forma de forzar el intercambio de datos de la balsa en la red no medida correcta, pero veo que puede usar un nombre de interfaz. Curiosamente, no se indica en los documentos de enjambre, pero un problema muestra que el mensaje de error espera una IP o interfaz.

Me pregunto si puede configurar los miembros del clúster para anunciar utilizando el nombre de la interfaz privada, de modo que obtenga la mayor cantidad de tráfico de la manera que desee.

No puedo ponerme a prueba en este momento, pero lo haré la próxima semana, ya que puedo encontrar un problema similar para un próximo proyecto.

Pablo
fuente
Gracias, por favor avíseme si descubre algo la próxima semana. El problema al que se vinculó es sobre la funcionalidad del enjambre Docker 'antiguo', mientras que estoy usando (y le aconsejaría que use) el nuevo modo de enjambre Docker que está incorporado y no requiere un almacén de clave / valor externo.
Ede