Passer au contenu

Comment résoudre les problèmes liés à Service Connect dans Amazon ECS ?

Lecture de 7 minute(s)
0

Mes services Amazon Elastic Container Service (Amazon ECS) ne peuvent pas se connecter à un autre service.

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Une erreur de configuration ou des problèmes de réseau entraînent des problèmes de communication d’un service à un autre. Pour résoudre ces problèmes, effectuez les actions de dépannage suivantes.

Vérifier la configuration de Service Connect

Vérifiez que vous avez activé Service Connect

Prérequis : Pour utiliser Amazon ECS Service Connect, assurez-vous que vous répondez aux exigences de Service Connect.

Pour vérifier si vous avez activé Service Connect pour vos services Amazon ECS, exécutez la commande describe-services de l'interface de ligne de commande AWS suivante :

aws ecs describe-services --cluster cluster-name --services service-name

Remarque : Remplacez cluster-name par le nom de votre cluster et service-name par le nom de votre service.

Exemple de sortie :

"serviceConnectConfiguration": {

"enabled": true,

Remarque : Si le service Amazon ECS doit autoriser le trafic réseau en provenance d'autres services, assurez-vous de définir la configuration de Service Connect en tant que service client-serveur. Pour vérifier cette configuration, vérifiez la sortie de commande pour « services » sous « serviceConnectionConfiguration ».

Vérifiez l'espace de noms de vos services

Pour utiliser Service Connect, vous devez configurer vos services Amazon ECS dans le même espace de noms. Assurez-vous également que votre service client et votre service client-serveur se trouvent dans le même espace de noms. Pour vérifier l'espace de noms de vos services, exécutez la commande describe-services suivante :

aws ecs describe-services --cluster cluster-name --services service-name | grep namespace

Remarque : Remplacez cluster-name par le nom de votre cluster et service-name par le nom de votre service.

Dans la sortie, vérifiez la valeur de l'espace de noms. Pour mettre à jour l'espace de noms d'un service, utilisez la console Amazon ECS pour mettre à jour le paramètre de configuration de Service Connect. Ou, exécutez la commande update-service suivante :

aws ecs update-service --cluster cluster-name --service service-name --service-connect-configuration enabled=true,namespace=Namespace-name --force-new-deployment

Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et Namespace-name par votre espace de noms.

Si le service client ne parvient pas à résoudre le DNS du service client-serveur, l'un des messages d'erreur suivants s'affiche :

  • « server can't find DNS: (le serveur ne trouve pas le DNS) NXDOMAIN »
  • « server can't find example.core.staging.local : (le serveur ne trouve pas example.core.staging.local) NXDOMAIN »

Pour résoudre ce problème, exécutez la commande get-namespace suivante pour vérifier que vous avez enregistré l'espace de noms dans AWS Cloud Map :

aws servicediscovery get-namespace --id namespace

Remarque : Remplacez namespace par l’ID de votre espace de noms.

Vérifiez la sortie de la commande pour afficher les espaces de noms disponibles dans votre compte AWS et votre région AWS.

Pour confirmer que vous avez enregistré vos tâches dans l'espace de noms de l'instance, procédez comme suit :

  1. Pour obtenir l'ID de l'espace de noms, exécutez la commande list-namespaces suivante :

    aws servicediscovery list-namespaces
  2. Utilisez la console AWS Cloud Map ou l'AWS CLI pour répertorier les services dans l'espace de noms.

  3. Pour afficher les instances enregistrées du service, exécutez la commande list-instances suivante :

    aws servicediscovery list-instances --service-id srv-serviceID

    Remarque : Remplacez serviceID par votre ID de service.

  4. Si vous n'avez pas enregistré votre instance, exécutez la commande update-service suivante pour redéployer les tâches :

    aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deployment

    Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et region-name par votre région.
    Vous pouvez également utiliser la console Amazon ECS pour mettre à jour le service et choisir Forcer un nouveau déploiement.

Vérifiez les noms de mappage de vos ports

Si vous ne définissez pas le nom de votre mappage de ports dans la définition de tâche, le message d'erreur suivant s'affiche :

« No port aliases found. Select a different task definition family and revision that has port mappings configured to use client and server mode. » (Aucun alias de port trouvé. Sélectionnez une autre famille de définitions de tâches et une révision dont les mappages de ports sont configurés pour utiliser le mode client et le mode serveur.)

Pour résoudre ce problème, mettez à jour la définition de tâche et ajoutez une valeur pour le paramètre nom sous portMappings.

Exemple de définition de tâche :

"portMappings": [ { "name": "portmappingnameexample", "containerPort": 3000, "hostPort": 3000, "protocol": "tcp" }

Vérifier les paramètres de votre ACL réseau et de votre groupe de sécurité

Assurez-vous que votre liste de contrôle d'accès réseau (ACL réseau) et vos groupes de sécurité utilisent les configurations suivantes :

Vérifier la connectivité entre vos tâches de services

Procédez comme suit :

  1. Si vous exécutez des tâches sur AWS Fargate, activez ECS Exec. Si vous exécutez des tâches sur Amazon Elastic Compute Cloud (Amazon EC2), passez à l'étape 3.

  2. Exécutez la commande execute-command suivante pour vous connecter à distance au conteneur :

    aws ecs execute-command --cluster cluster-name \
    --task task-id \
    --container container-name \
    --interactive \
    --command "/bin/sh"

    Remarque : Remplacez cluster-name par le nom de votre cluster, task-id par votre ID de tâche et container-name par votre instance de conteneur.

  3. Pour vous assurer que votre connexion utilise le proxy Service Connect, exécutez la commande suivante :

    curl -I http://$IPaddress:portnumber/healthcheck

    Remarque : Remplacez IPaddress par l'adresse IP privée de la tâche, portnumber par le port de l'instance de conteneur et healthcheck par le chemin de vérification de l’état du conteneur.

    Vérifiez la sortie de la commande pour l'en-tête server: envoy pour confirmer que la connexion utilise le proxy. Si votre connexion n'utilise pas le proxy, assurez-vous que la configuration de Service Connect est correcte.

  4. Pour ouvrir le fichier /etc/hosts, exécutez la commande suivante :

    cat /etc/hosts

    Vérifiez la sortie de la commande pour vous assurer que vous pouvez voir les points de terminaison des autres services. Si vous ne voyez pas les points de terminaison du service, assurez-vous que la configuration de Service Connect est correcte.

  5. Si vous modifiez la configuration de Service Connect, exécutez la commande update-service suivante pour redéployer les tâches :

    aws ecs update-service --cluster cluster-name --service service-name --region region-name --force-new-deployment

    Remarque : Remplacez cluster-name par le nom de votre cluster, service-name par le nom de votre service et region-name par votre région.
    Vous pouvez également utiliser la console Amazon ECS pour mettre à jour le service et choisir Forcer un nouveau déploiement.

Redéployer vos tâches de service client

Si le message d'erreur « Could not resolve host » (Impossible de résoudre l'hôte) s'affiche, cela signifie que vos tâches ne peuvent pas résoudre les points de terminaison du service. À la place, vous pourriez recevoir le message d'erreur « ping: bad address 'DNS' » (ping : mauvaise adresse 'DNS’).

Pour résoudre ces problèmes, redéployez les tâches de service client existantes.

Examiner vos journaux d’application

Consultez vos journaux d’application pour détecter les erreurs de connectivité ou d'exécution. Amazon ECS exporte les journaux vers différentes destinations en fonction de votre pilote de journal. Si vous utilisez le pilote awslogs, Amazon ECS exporte les journaux vers Amazon CloudWatch.

Informations connexes

Composants Amazon ECS Service Connect

AWS OFFICIELA mis à jour il y a 2 ans