Salta al contenuto

Come posso risolvere i problemi relativi a Service Connect in Amazon ECS?

6 minuti di lettura
0

I miei servizi Amazon Elastic Container Service (Amazon ECS) non riescono a connettersi a un altro servizio.

Risoluzione

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Problemi di configurazione o di rete causano problemi di comunicazione tra servizi. Per risolvere questi problemi, intraprendi le seguenti azioni.

Verifica la configurazione di Service Connect

Verifica di aver attivato Service Connect

Prerequisiti: per utilizzare Amazon ECS Service Connect, assicurati di soddisfare i requisiti di Service Connect.

Per verificare se hai attivato Service Connect per i servizi Amazon ECS, esegui il seguente comando AWS CLI describe-services:

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

Nota: sostituisci cluster-name con il nome del tuo cluster e service-name con il nome del tuo servizio.

Esempio di output:

"serviceConnectConfiguration": {

"enabled": true,

Nota: se il servizio Amazon ECS deve consentire il traffico di rete da altri servizi, assicurati di impostare la configurazione di Service Connect come servizio client-server. Per verificare questa configurazione, controlla "services" in "serviceConnectionConfiguration" nell'output del comando.

Controlla il namespace dei servizi

Per utilizzare Service Connect, devi configurare i servizi Amazon ECS nello stesso namespace. Inoltre, assicurati che il servizio client e il servizio client-server si trovino nello stesso namespace. Per controllare il namespace dei servizi, esegui il seguente comando describe-services:

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

Nota: sostituisci cluster-name con il nome del tuo cluster e service-name con il nome del tuo servizio.

Nell'output, controlla il valore per il namespace. Per aggiornare il namespace di un servizio, utilizza la console Amazon ECS per aggiornare l'impostazione della configurazione di Service Connect. Oppure esegui il seguente comando update-service:

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

Nota: sostituisci cluster-name con il nome del tuo cluster, service-name con il nome del tuo servizio e Namespace-name con il tuo namespace.

Se il servizio client non è in grado di risolvere il DNS del servizio client-server, ricevi uno dei seguenti messaggi di errore:

  • "server can't find DNS: NXDOMAIN"
  • "server can't find example.core.staging.local: NXDOMAIN"

Per risolvere il problema, esegui il seguente comando get-namespace per verificare di aver registrato il namespace in AWS Cloud Map:

aws servicediscovery get-namespace --id namespace

Nota: sostituisci namespace con l'ID del tuo namespace.

Controlla l'output del comando per visualizzare i namespace disponibili nell'account AWS e nella Regione AWS.

Per verificare di aver registrato le attività nel namespace dell'istanza, completa i seguenti passaggi:

  1. Per ottenere l'ID del namespace, esegui il seguente comando list-namespaces:

    aws servicediscovery list-namespaces
  2. Utilizza la console AWS Cloud Map o AWS CLI per elencare i servizi nel namespace.

  3. Per visualizzare le istanze registrate del servizio, esegui il seguente comando list-instances:

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

    Nota: sostituisci serviceID con l'ID del tuo servizio.

  4. Se non hai registrato l'istanza, esegui il seguente comando update-service per ridistribuire le attività:

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

    Nota: sostituisci cluster-name con il nome del tuo cluster, service-name con il nome del tuo servizio e region-name con la tua Regione.
    Oppure utilizza la console Amazon ECS per aggiornare il servizio e scegli Forza una nuova distribuzione.

Controlla i nomi della mappatura delle porte

Se non imposti il nome della mappatura delle porte nella definizione dell'attività, ricevi il seguente messaggio di errore:

"No port aliases found. Select a different task definition family and revision that has port mappings configured to use client and server mode."

Per risolvere il problema, aggiorna la definizione dell'attività e aggiungi un valore per il parametro name in portMappings.

Esempio di definizione dell'attività:

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

Controlla la lista di controllo degli accessi alla rete (ACL) e le impostazioni del gruppo di sicurezza

Assicurati che la lista di controllo degli accessi alla rete (ACL) e i gruppi di sicurezza utilizzino le seguenti configurazioni:

  • Il servizio client consente il traffico in uscita verso la porta del gruppo di sicurezza del servizio client-server.
  • Il gruppo di sicurezza del servizio client-server consente il traffico in entrata sulla porta del servizio client.
  • Le ACL della rete privata virtuale (VPC) consentono il traffico sulle porte containerPort e ingressPortOverride.
  • Se le attività dei servizi vengono eseguite su VPC diversi, la connessione peering VPC o il gateway di transito deve consentire il traffico tra i VPC.

Verifica la connettività tra le attività dei servizi

Completa i seguenti passaggi:

  1. Se esegui attività su AWS Fargate, attiva ECS Exec. Se esegui attività su Amazon Elastic Compute Cloud (Amazon EC2), procedi al passaggio 3.

  2. Esegui il seguente comando execute-command per connetterti in remoto al container:

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

    Nota: sostituisci cluster-name con il nome del tuo cluster, task-id con l'ID della tua attività e container-name con la tua istanza di container.

  3. Per assicurarti che la connessione utilizzi il proxy Service Connect, esegui il seguente comando:

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

    Nota: sostituisci IPaddress con l'indirizzo IP privato dell'attività, portnumber con la porta dell'istanza di container e healthcheck con il percorso di controllo dell'integrità del container.

    Controlla l'intestazione server: envoy nell'output del comando per verificare che la connessione utilizzi il proxy. Se la connessione non utilizza il proxy, assicurati che la configurazione di Service Connect sia corretta.

  4. Per aprire il file /etc/hosts, esegui il seguente comando:

    cat /etc/hosts

    Controlla l'output del comando per assicurarti di poter vedere gli endpoint di altri servizi. Se non li vedi, assicurati che la configurazione di Service Connect sia corretta.

  5. Se modifichi la configurazione di Service Connect, esegui il seguente comando update-service per ridistribuire le attività:

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

    Nota: sostituisci cluster-name con il nome del tuo cluster, service-name con il nome del tuo servizio e region-name con la tua Regione.
    Oppure utilizza la console Amazon ECS per aggiornare il servizio e scegli Forza una nuova distribuzione.

Ridistribuisci le attività del servizio client

Se ricevi il messaggio di errore "Could not resolve host", significa che le attività non possono risolvere gli endpoint del servizio. Potresti invece ricevere il messaggio di errore "ping: bad address 'DNS'".

Per risolvere questi problemi, ridistribuisci le attività del servizio client esistenti.

Esamina i log dell'applicazione

Controlla i log dell'applicazione per individuare eventuali errori di connettività o di runtime. Amazon ECS esporta i log verso diverse destinazioni in base al driver di log. Se utilizzi il driver awslogs, Amazon ECS esporta i log in Amazon CloudWatch.

Informazioni correlate

Componenti di Amazon ECS Service Connect

AWS UFFICIALEAggiornata un anno fa