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.
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.
Respuestas:
(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.
fuente