Come posso risolvere i problemi di connessione tra la mia attività Fargate e gli altri servizi AWS?

7 minuti di lettura
0

Voglio risolvere i problemi di connettività che sto riscontrando tra la mia attività AWS Fargate e un servizio AWS.

Breve descrizione

Le applicazioni eseguite all'interno di un'attività Fargate con Amazon Elastic Container Service (Amazon ECS) possono non riuscire ad accedere ad altri servizi AWS per i seguenti motivi:

  • Autorizzazioni AWS Identity and Access Management (IAM) insufficienti
  • Percorsi di sottorete errati
  • Restrizioni della lista di controllo degli accessi alla rete (ACL)
  • Gruppi di sicurezza
  • Endpoint Amazon Virtual Private Cloud (Amazon VPC)

Per risolvere questi problemi, usa Amazon ECS Exec per interagire con il container di applicazione del task Fargate. Se stai riscontrando errori di timeout nella connessione nei registri del container di applicazione, verifica la connettività tra l'attività Fargate e il servizio AWS corrispondente.

Risoluzione

Usa ECS Exec per interagire con il container di applicazione del task Fargate

  1. Prima di utilizzare Amazon ECS exec, completa i prerequisiti per l'utilizzo di Amazon ECS Exec.

  2. Segui le istruzioni in Uso di Amazon ECS Exec per attivare la funzionalità.

  3. Esegui Amazon ECS Exec per accedere al container di applicazione e verificare la rete e la connettività IAM tra il contenitore e il servizio AWS.

Nota:Prima di eseguire Exec, è consigliabile impostare il parametro initProcessEnabled su** true**. Ciò impedisce ai processi secondari di AWS Systems Manager Agent (SSM Agent) di diventare orfani. (Facoltativo) Aggiungi un comando** sleep** per mantenere il container in funzione per un dato periodo di tempo.

Esempio:

{
    "taskRoleArn": "ecsTaskRole",
    "networkMode": "awsvpc",
    "requiresCompatibilities": [
        "EC2",
        "FARGATE"
        ],
        "executionRoleArn": "ecsTaskExecutionRole",
        "memory": ".5 gb",
        "cpu": ".25 vcpu",
        "containerDefinitions": [
            {
                "name": "application",
                "image": "application:latest",
                "essential": true,
                "command": ["sleep","7200"],
                "linuxParameters": {
                    "initProcessEnabled": true
                }
            }
        ],
        "family": "ecs-exec-task"
}

Se non riesci a usare Exec per accedere al container di applicazione, esegui Exec per una nuova attività Fargate che verrà eseguita sull'immagine Docker** amazon/aws-cli**. Ciò consente di testare la comunicazione tra l'attività Fargate e il servizio AWS.

Nota: La nuova attività Fargate deve avere la stessa configurazione di rete (sottoreti, gruppi di sicurezza e così via) del container di applicazione.

Per eseguire una nuova attività Fargate con l'immagine** Docker** amazon/aws-cli, completa i seguenti passaggi:

Nota: L'interfaccia a riga di comando AWS (AWS CLI) è preinstallata nell'immagine** amazon/aws-cli** del contenitore. Se AWS CLI non è installata nel container di applicazione, esegui il seguente comando:

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86\_64.zip" -o "awscliv2.zip"

unzip awscliv2.zip

sudo ./aws/install
  1. Crea una definizione di attività con** amazon/aws-cli** come immagine per il contenitore. Quindi, aggiungi i punti di ingresso** tail**,\ -f e** /dev/null** per mettere il container in uno stato di** esecuzione** continuo.

Esempio di definizione dell'attività:

{  
    "requiresCompatibilities": \[  
        "FARGATE"  
    \],  
    "family": "aws-cli",  
    "containerDefinitions": \[  
        {  
        "entryPoint": \[  
        "tail",  
        "-f",  
        "/dev/null"  
        \],  
        "name": "cli",  
        "image": "amazon/aws-cli",  
        "essential": true  
        }  
    \],  
    "networkMode": "awsvpc",  
    "memory": "512",  
    "cpu": "256",  
    "executionRoleArn": "arn:aws:iam::123456789012:role/EcsTaskExecutionRole",  
    "taskRoleArn": "arn:aws:iam::123456789012:role/TaskRole"  
}
  1. Crea un servizio Amazon ECS con la definizione dell'attività appena creata e con la stessa configurazione di rete del container di applicazione:
$ aws ecs create-service --cluster <example-cluster-name> --task-definition <example-task-definition-name> --network-configuration awsvpcConfiguration="{subnets=[example-subnet-XXXXXXX, example-subnet-XXXXXXX],securityGroups=[example-sg-XXXXXXXXXXXX],assignPublicIp=ENABLED}" --enable-execute-command --service-name <example-service-name> --desired-count 1 --launch-type FARGATE --region <example-region>

Nota:Sostituisci example-cluster-name con il nome del tuo cluster,** example-task-definition-name** con il nome della definizione dell'attività,** example-service-name** con il nome del tuo servizio e** example-region** con la tua regione AWS.

  1. Esegui Exec per accedere al container di attività Amazon ECS Fargate ed esegui il comando** /bin/sh** con ilcontainer-name e task-idspecificati:
$ aws ecs execute-command --cluster <example-cluster-name> --task <example-task-id> --container <example-container-name> --interactive --command "/bin/sh" --region <example-region>

Nota:Sostituisci example-cluster-name con il nome del tuo cluster,** example-task-id** con l'ID dell'attività,** example-container-name** con il nome del tuo contenitore ed** example-region** con la tua regione.

Se hai ancora problemi con ECS Exec per la tua attività Fargate, consulta L'ARTICOLO DI ISHAN QUI (URL in attesa dell'articolo\ _33538).

Verifica la connettività tra un'attività Fargate e il servizio AWS corrispondente

Risolvi i problemi relativi alle autorizzazioni IAM insufficienti

Verifica se l'attività Fargate dispone di autorizzazioni IAM sufficienti per connettersi al servizio AWS corrispondente. Per eseguire i comandi relativi all'interfaccia della linea di comando AWS per il servizio AWS richiesto, consulta la Guida di riferimento per i comandi relativi all'interfaccia della linea di comando AWS.

Esempio di test di connettività tra l'attività Fargate e Amazon Simple Notification Service (Amazon SNS):

# aws sns list-topics --region <example-region-name>

Se riscontri il seguente errore, controlla la politica degli endpoint Amazon VPC. Assicurati che la policy consenta l'accesso per eseguire le azioni necessarie rispetto al servizio AWS.

An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:<region-name>:123456789012:* with an explicit deny in a VPC endpoint policy

Se riscontri il seguente errore, controlla le autorizzazioni del ruolo IAM dell'attività Amazon ECS. Assicurati che il ruolo IAM disponga delle autorizzazioni necessarie per eseguire le azioni richieste sul servizio AWS.

An error occurred (AuthorizationError) when calling the ListTopics operation: User: arn:aws:sts::123456789012:assumed-role/TaskRole/123456789012 is not authorized to perform: SNS:ListTopics on resource: arn:aws:sns:<region-name>:123456789012:* because no identity-based policy allows the SNS:ListTopics action

**Nota:**Se non vedi alcun errore durante l'esecuzione dei comandi relativi all’interfaccia della linea di comando di AWS sull'attività Fargate, significa che sono presenti le autorizzazioni IAM richieste per quel servizio AWS.

Risolvi gli errori di timeout della connessione

  1. Usa**\ # telnet** per testare la connettività di rete agli endpoint del servizio AWS dall'attività Fargate:
# telnet <EXAMPLE-ENDPOINT> <EXAMPLE-PORT>

Nota:Sostituisci EXAMPLE-ENDPOINT con il nome e l'URL dell'endpoint del tuo servizio AWS e** EXAMPLE-PORT** con la porta del servizio AWS.

L'output di esempio seguente mostra che l'endpoint è accessibile dal container:

Trying 10.0.1.169...
Connected to sns.us-east-1.amazonaws.com.
Escape character is '^]'.

# dig <EXAMPLE-ENDPOINT>

# nslookup <EXAMPLE-ENDPOINT>

Per un elenco degli endpoint dei servizi AWS regionali, consulta Endpoint e quote di servizio per i servizi AWS.

Nota:Se non hai installato telnet e ** dig** nel container di applicazione, esegui i** comandi** apt-get update**,** apt install dnsutils** e** apt install telnet per installarli. Per i container basati su** amazon/aws-cli**, usa i comandi** yum update**,** yum install telnet** e** yum install bind-utils** per installare** telnet** e altri strumenti.

  1. Se riscontri** errori di timeout della** connessione dopo aver testato la connettività di rete agli endpoint del servizio AWS, controlla la configurazione di rete:

Esegui il comando** nslookup**. Se vedi gli intervalli IP CIDR VPC, il traffico viene indirizzato attraverso gli endpoint VPC:

# nslookup sns.us-east-1.amazonaws.com

Non-authoritative answer:
Name:    sns.us-east-1.amazonaws.com
Address: 10.0.1.169
Name:    sns.us-east-1.amazonaws.com
Address: 10.0.2.248

Per gli errori di timeout della connessione, controlla le regole in entrata del gruppo di sicurezza degli endpoint VPC. Assicurati che il traffico TCP sulla porta 443 sia consentito nelle regole in entrata dal gruppo di sicurezza ECS o dal CIDR VPC. Per ulteriori informazioni, consulta Come posso risolvere i problemi di connettività sul gateway e sugli endpoint di interfaccia VPC?

  • Se nella regione non è configurato alcun endpoint Amazon VPC, controlla i percorsi dalle tue sottoreti a Internet. Per un'attività Fargate in una sottorete pubblica, assicurati che l'attività abbia un percorso predefinito verso il gateway Internet. Per un'attività Fargate in una sottorete privata, assicurati che l'attività abbia un percorso predefinito. L'attività richiede un percorso predefinito verso il gateway NAT, AWS PrivateLink, un'altra fonte di connettività Internet o verso il CIDR locale e VPC.
  • Assicurati che l'ACL di rete consenta l'accesso al servizio AWS.
  • Verifica che le regole in entrata del gruppo di sicurezza siano allegate al servizio AWS a cui stai tentando di accedere con il tuo task Fargate. Consenti il traffico in ingresso sulle porte richieste.
  • Verifica che le regole in uscita del gruppo di sicurezza delle attività di Fargate consentano il traffico in uscita sulle porte richieste per connettersi al servizio AWS.
AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa