3 votes

Comment résoudre une adresse DNS privée à partir d'une tâche AWS Fargate ?

J'essaie d'établir une connexion à une base de données MongoDB Atlas à partir d'un conteneur AWS Fargate. Le peering VPC est configuré et fonctionne et je peux me connecter avec succès au cluster MongoDB Atlas à partir d'un bastion dans les sous-réseaux privés du VPC AWS. Cependant, lorsque je tente la même connexion à partir d'une tâche Fargate, la connexion échoue.

Par exemple, si j'essaie de me connecter avec la commande mongo cli suivante :

mongo "mongodb+srv://user:password@cluster0.foo0.mongodb.net/database"

J'obtiens l'erreur suivante.

MongoDB shell version v4.0.20
connecting to: mongodb://cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.tzhow.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017/cxchat?authSource=admin&gssapiServiceName=mongodb&replicaSet=atlas-mdt101-shard-0&ssl=true
2020-09-09T13:16:46.295+0000 I NETWORK  [js] Starting new replica set monitor for atlas-mdt101-shard-0/cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.foo0.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017
2020-09-09T13:16:56.351+0000 W NETWORK  [ReplicaSetMonitor-TaskExecutor] Unable to reach primary for set atlas-mdt101-shard-0
2020-09-09T13:16:56.351+0000 I NETWORK  [ReplicaSetMonitor-TaskExecutor] Cannot reach any nodes for set atlas-mdt101-shard-0. Please check network connectivity and the status of the set. This has happened for 1 checks in a row.
2020-09-09T13:17:11.867+0000 W NETWORK  [js] Unable to reach primary for set atlas-mdt101-shard-0
2020-09-09T13:17:11.867+0000 I NETWORK  [js] Cannot reach any nodes for set atlas-mdt101-shard-0. Please check network connectivity and the status of the set. This has happened for 2 checks in a row.
*** It looks like this is a MongoDB Atlas cluster. Please ensure that your IP whitelist allows connections from your network.
2020-09-09T13:17:11.868+0000 E QUERY    [js] Error: connect failed to replica set atlas-mdt101-shard-0/cluster0-shard-00-01.foo0.mongodb.net.:27017,cluster0-shard-00-02.foo0.mongodb.net.:27017,cluster0-shard-00-00.foo0.mongodb.net.:27017 :

La même commande fonctionne bien à partir d'un EC2 dans le VPC dans un sous-réseau privé (mêmes sous-réseaux que ceux attribués au conteneur ECS).

Je comprends que le réseau Fargate est un peu différent. La tâche est configurée avec AWSVPC comme NetworkMode. L'erreur suggère qu'une entrée de liste blanche pourrait être nécessaire du côté de Mongo Atlas, mais j'ai vérifié cela et l'IP de la tâche est 10.2.0.129, ce qui est confortablement dans la liste blanche assignée sur Atlas de 10.2.0.0/16.

Quelqu'un a-t-il essayé de le faire avec Fargate ou quelque chose de similaire ? J'aurais pensé que la connexion de peering VPC serait également active sur la tâche Fargate étant donné qu'elle est configurée dans le même VPC/sous-réseaux, etc.

1voto

Je soupçonne que cela a quelque chose à voir avec le groupe de sécurité, peut-être que les règles de sortie sont différentes / manquantes ? Ou peut-être avec le routage ? Peut-être que certains sous-réseaux n'ont pas les bonnes règles de sécurité. table des routes avec l'entrée de peering VPC qui leur est attachée ?

Voilà ce que je ferais :

  1. Créez une instance EC2 dans le même sous-réseau où s'exécute votre conteneur Fargate et lui attribuer le nom de même groupe de sécurité y el même rôle IAM . Avec cela, ils devraient se comporter de la même manière, mais EC2 est plus facile à déboguer.

  2. Maintenant, testez l'accès à Mongo - si cela ne fonctionne pas, cherchez à savoir pourquoi :

    • Les groupes de sécurité entre votre instance de test actuelle et Fargate ont-ils les mêmes entrées, tant en entrée qu'en sortie ?
    • Sont-ils vraiment dans le même sous-réseau ?
    • Ont-ils tous deux (ou aucun d'entre eux) une IP publique assignée ?
    • Pouvez-vous résoudre les IP des nœuds mongo ?
    • Utilisez un renifleur de paquets comme tcpdump pour savoir où le mongo tente de se connecter - et que se passe-t-il ensuite ? Se connecte-t-elle ? Obtient-elle une réponse ?
  3. Vous pouvez essayer d'exécuter le conteneur sur un cluster ECS basé sur EC2, le passage entre Fargate et EC2 est simple.

J'espère que cela vous aidera :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X