Je ne peux pas me connecter au serveur externe mongodb
depuis mon docker swarm
grappe.
Si je comprends bien, c'est parce que le cluster utilise un pilote de réseau de superposition. Ai-je raison?
Sinon, comment fonctionne le pilote de superposition de docker et comment puis-je me connecter au serveur externe mongodb
à partir du cluster?
Q. Comment fonctionne le pilote de superposition de docker?
Je recommanderais cette bonne référence pour comprendre la superposition du réseau de swarm docker, et plus globalement, l'architecture de Docker .
Cela indique que:
Docker utilise le DNS intégré pour fournir la découverte de services pour les conteneurs s'exécutant sur un seul moteur Docker et les tâches s'exécutant dans un essaim Docker. Docker Engine dispose d'un serveur DNS interne qui fournit une résolution de noms à tous les conteneurs sur l'hôte dans les réseaux de pont, de superposition et MACVLAN définis par l'utilisateur.
Chaque conteneur Docker (ou tâche en mode Swarm) possède un résolveur DNS qui transfère les requêtes DNS à Docker Engine, qui agit comme un serveur DNS.
Donc, en multi-hôte docker swarm mode
, avec cet exemple de configuration:
Dans cet exemple, il existe un service de deux conteneurs appelé
myservice
. Un deuxième service (client
) existe sur le même réseau.client
exécute deux opérationscurl
pour docker.com etmyservice
.Ce sont les actions qui en résultent:
- Les requêtes DNS sont lancées par
client
pourdocker.com
etmyservice
.- Le résolveur intégré du conteneur intercepte les requêtes DNS sur
127.0.0.11:53
et les envoie au serveur DNS de Docker Engine.myservice
se résout en IP virtuelle (VIP) de ce service qui est équilibrée en charge interne aux adresses IP des tâches individuelles. Les noms de conteneurs se résolvent également, bien que directement à leurs adresses IP.docker.com
n'existe pas en tant que nom de service dans le réseau Mynet et la demande est donc transmise au serveur DNS par défaut configuré .
Retour à votre question:
Comment puis-je me connecter à un cluster de formulaires de serveur mongodb externe?
Pour votre mongodb
externe (disons que vous avez un DNS pour ce mongodb.mydomain.com
), vous êtes dans la même situation que client
dans l'architecture ci-dessus, vous voulez vous connecter à docker.com
, sauf que vous ne voulez certainement pas exposer cela mongodb.mydomain.com
à l'ensemble du Web, vous l'avez donc peut-être déclaré dans votre serveur DNS de cluster interne.
Ensuite, comment dire au moteur Docker d'utiliser ce serveur DNS interne pour résoudre mongodb.mydomain.com
?
Vous devez indiquer dans votre docker service
tâche que vous souhaitez utiliser serveur DNS interne , comme ceci:
docker service create \
--name myservice \
--network my-overlay-network \
--dns=10.0.0.2 \
myservice:latest
La chose importante ici est --dns=10.0.0.2
. Cela indiquera au moteur Docker d'utiliser le serveur DNS à 10.0.0.2:53
par défaut s'il ne peut pas résoudre le nom DNS dans le VIP.
Enfin, quand vous dites:
Je ne peux pas me connecter au serveur mongodb externe à partir de mon cluster d'essaimage Docker. Si je comprends bien, c'est parce que le cluster utilise un pilote réseau de superposition. Ai-je raison?
Je dirais non, car il existe une méthode intégrée dans docker engine
pour transférer le nom DNS inconnu provenant de overlay network
au serveur DNS souhaité.
J'espère que cela t'aides!