Utilisation de réseaux physiques privés avec le mode Swarm Docker

11

Je travaille sur une configuration de production avec Docker en mode essaim (en utilisant Docker 17.03.1-ce). Il y aura 2 centres de données impliqués. Dans les deux centres de données, toutes les machines ont à la fois une adresse IP publique et une adresse IP privée (locale vers le centre de données) sur un réseau privé, il y aura donc 2 réseaux privés.

Lien vers un diagramme simplifié visualisant la configuration

Le trafic réseau sur les interfaces réseau privées est gratuit, tandis que le trafic sur l'interface publique n'est pas après une certaine limite (et il est plus lent), donc si possible, je préférerais que le trafic réseau passe par les interfaces privées.

Maintenant, d'après ce que je comprends (je pense), tout le trafic entre les nœuds Docker en mode swarm passera par la même interface réseau que celle utilisée pour communiquer avec les maîtres swarm, qui dans mon cas devra être publique pour créer un réseau multi DC possible. Cependant, la plupart du trafic attendu se fera entre les nœuds des mêmes contrôleurs de domaine, et ce serait très bien si Docker pouvait en quelque sorte acheminer le trafic via mes réseaux privés si les nœuds source et cible se trouvaient sur le même réseau privé.

Je crains que cela ne soit pas possible hors de la boîte car les maîtres de l'essaim ne connaissent pas ces réseaux privés et les adresses IP que les nœuds ont sur eux.

Une solution à laquelle je pourrais penser est de configurer un VPN et de déployer l'essaim en plus, mais cela ajoute une complexité supplémentaire et je préférerais une solution d'essaim Docker pure.


Mise à jour : comme suggéré dans un commentaire, la base d'une solution pourrait être d'utiliser iptables pour acheminer le trafic sortant vers des adresses IP privées plutôt que publiques. Cependant, si je veux le faire, mon prochain problème serait de savoir comment gérer toutes ces règles. Avec 10 serveurs dans un DC, j'aurais besoin de 10 * 9 = 90 d'entre eux pour acheminer tout le trafic local possible sur le réseau privé. Je peux imaginer qu'il existe peut-être un outil qui pourrait aider à une telle tâche ou que je pourrais en créer un, mais il existe peut-être un moyen beaucoup plus simple de le faire.

Ede
la source
1
Vous pouvez utiliser iptables pour réécrire l'IP de destination des frères et sœurs dans le même centre de données sur leurs ips de réseau privé. En outre, cela devrait être sur serverfault pas SO;)
n00b32
Ouais, un peu plus de fouilles m'a conduit à la même conclusion. Cela va être un problème cependant, j'aurais vraiment besoin d'un outil pour le faire automatiquement pour moi (réécrire toutes les IP entre tous les nœuds d'un cluster / DC). Après tout, pour N nœuds, j'aurais besoin de (N-1) ^ 2 règles iptables.

Réponses:

1

(Cela devrait probablement être un commentaire, mais ne peut pas encore commenter)

Comme vous ne pouvez pas utiliser de noms d'hôte et / ou DNS pour amorcer le cluster, je ne vois aucun moyen de forcer les données de radeau d'échange de cluster sur le bon réseau non mesuré, mais je vois que vous pouvez utiliser un nom d'interface. Curieusement, il n'est pas indiqué sur les documents swarm mais un problème montre que le message d'erreur attend une IP ou une interface.

Je me demande si vous pouvez configurer les membres du cluster pour qu'ils annoncent en utilisant le nom de l'interface privée, afin que vous obteniez le plus de trafic de la manière que vous souhaitez.

Je ne peux pas me tester pour l'instant, mais je le ferai la semaine prochaine car je risque de rencontrer un problème similaire pour un projet à venir.

Pablo
la source
Merci, faites-le moi savoir si vous découvrez quoi que ce soit la semaine prochaine. Le problème auquel vous avez fait référence concerne la `` vieille '' fonctionnalité Swarm Docker, alors que j'utilise (et je vous conseille d'utiliser) le nouveau mode Swarm Docker qui est intégré et ne nécessite pas de stockage de clé / valeur externe.
Ede