1
votes

Comment puis-je exposer des conteneurs Docker en interne les uns aux autres avec AWS CloudFormation?

Je suis un noob AWS. J'ai un conteneur de serveur Web et un conteneur de concentrateur de sélénium. Mon serveur Web doit accéder à l'autre conteneur; Je peux le faire sur un environnement de développement en utilisant docker-compose (par défaut, les conteneurs sont exposés les uns aux autres par leur nom). Je ne sais pas comment faire cela en utilisant AWS CloudFormation. Il existe paramètre" links "dans le ContainerDefinition mais je pense que cela utilise le paramètre de lien du docker hérité. Je suis donc réticent à l’utiliser.

Une recommandation?

P.S: Je ne veux pas ouvrir l'instance de sélénium au public, donc utiliser des noms d'hôte / IP publics n'est pas une option.


3 commentaires

Comment exécutez-vous ces conteneurs (EKS, ECS, directement sur les instances EC2, Fargate)?


@DavidMaze J'utilise ECR, LaunchType: FARGATE. Modifier: 'networkMode': 'awsvpc'.


Avez-vous essayé de créer un groupe de sécurité et de spécifier ce même groupe de sécurité dans la définition de tâche de chaque conteneur?


3 Réponses :


2
votes

Bien que le paramètre links soit hérité dans le monde purement Docker, il reste le moyen le plus simple de connecter des conteneurs dans le monde AWS ECS sans compter sur des découverte de service (par exemple Consul ou Route 53 ).

La plus grande mise en garde avec l'utilisation de liens est que les liens circulaires ne sont pas possibles. De plus, les conteneurs doivent s'exécuter dans la même tâche / service. Le paramètre links ne fonctionnera pas sur plusieurs tâches / services.


1 commentaires

J'ai trouvé ceci: aws.amazon.com/blogs/compute / task-networking-in-aws-fargate On dirait que si je définis les conteneurs étroitement couplés dans la même tâche; ils peuvent communiquer entre eux à l'aide d'ips locales. Je confirmerai si cela fonctionne.



2
votes

Ok, j'ai résolu mon problème. J'ai suivi ce blog .

et j'ai placé 2 conteneurs étroitement couplés dans la même définition de tâche et j'ai simplement pu accéder à l'autre conteneur comme: localhost: port.

Cela fonctionne bien.

Pour les autres qui font face au même problème; cette solution peut ne pas être la meilleure pour vous si vos conteneurs ne sont pas étroitement couplés et qu'un jour vous devrez peut-être les déployer sur des machines séparées.

Mais pour moi, c'est bien.


0 commentaires

0
votes

Créez un espace de noms DNS privé et enregistrez vos services dans cet espace de noms via DnsConfig . Cela rendra votre service adressable via le nom de domaine fourni en tant que Nom . Nous utilisons Type: A, TTL: 10 comme configuration DnsRecords .


0 commentaires