Wie behebe ich Verbindungsprobleme zwischen meiner Fargate-Aufgabe und anderen AWS-Services?

Lesedauer: 7 Minute
0

Ich möchte Verbindungsprobleme zwischen meiner AWS Fargate-Aufgabe und einem AWS-Service beheben.

Kurze Beschreibung

Anwendungen, die innerhalb einer Fargate-Aufgabe mit Amazon Elastic Container Service (Amazon ECS) ausgeführt werden, können aus den folgenden Gründen nicht auf andere AWS-Services zugreifen:

  • Unzureichende AWS-Berechtigungen für Identity and Access Management (IAM)
  • Falsche Subnetzrouten
  • Einschränkungen der Netzwerk-Zugriffssteuerungsliste (Netzwerk-ACL)
  • Sicherheitsgruppen
  • Amazon Virtual Private Cloud (Amazon VPC)-Endpunkte

Verwenden Sie Amazon ECS Exec, um mit dem Anwendungscontainer der Fargate-Aufgabe zu interagieren, um diese Probleme zu lösen. Wenn Sie Verbindungs-Timeout-Fehler in den Anwendungscontainer-Protokollen feststellen, testen Sie die Konnektivität zwischen der Fargate-Aufgabe und dem entsprechenden AWS-Service.

Auflösung

Verwenden Sie ECS Exec, um mit dem Anwendungscontainer der Fargate-Aufgabe zu interagieren

1.    Bevor Sie Amazon ECS Exec verwenden, müssen Sie die Voraussetzungen für die Verwendung von Amazon ECS Exec erfüllen.

2.Folgen Sie den Anweisungen unter Verwenden von Amazon ECS Exec, um die Funktion zu aktivieren.

3.    Führen Sie Amazon ECS Exec aus, um auf Ihren Anwendungscontainer zuzugreifen, und überprüfen Sie die Netzwerk- und IAM-Konnektivität zwischen dem Container und dem AWS-Service.

**Hinweis:**Bevor Sie Exec ausführen, empfiehlt es sich, den Parameter initProcessEnabled auf true zu setzen. Dadurch wird verhindert, dass untergeordnete Prozesse von AWS Systems Manager Agent (SSM Agent) verwaist werden. (Optional) Fügen Sie einen sleep-Befehl für den Anwendungscontainer hinzu, um den Container für einen bestimmten Zeitraum am Laufen zu halten.

Beispiel:

{
    "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"
}

Wenn Sie Exec nicht für den Zugriff auf Ihren Anwendungscontainer verwenden können, führen Sie Exec für eine neue Fargate-Aufgabe aus, die auf dem Amazon/aws-cli-Docker-Image ausgeführt wird. Auf diese Weise können Sie die Kommunikation zwischen der Fargate-Aufgabe und dem AWS-Service testen.

Hinweis: Die neue Fargate-Aufgabe muss dieselbe Netzwerkkonfiguration (Subnetze, Sicherheitsgruppen usw.) wie Ihr Anwendungscontainer haben.

Gehen Sie wie folgt vor, um eine neue Fargate-Aufgabe mit dem Amazon/aws-cli-Docker-Image auszuführen:

Hinweis: Die AWS Command Line Interface (AWS CLI) ist auf dem Amazon/aws-cli-Image Ihres Containers vorinstalliert. Wenn AWS CLI nicht in Ihrem Anwendungscontainer installiert ist, führen Sie den folgenden Befehl aus:

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

unzip awscliv2.zip

sudo ./aws/install

1.Erstellen Sie eine Aufgabendefinition mit amazon/aws-cli als Image für den Container. Fügen Sie dann die Einstiegspunkte tail, -f und /dev/null hinzu, um den Container in einen kontinuierlichen Laufzustand zu versetzen.

Beispiel für eine Aufgabendefinition:

{  
    "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"  
}

2.    Erstellen Sie einen Amazon ECS-Service mit der neu erstellten Aufgabendefinition und mit derselben Netzwerkkonfiguration wie der Anwendungscontainer:

$ 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>

**Hinweis:**Ersetzen Sie example-cluster-name durch Ihren Clusternamen, example-task-definition-name durch Ihren Aufgabendefinitionsnamen, example-service-name durch Ihren Servicenamen und example-region durch Ihre AWS-Region.

3.    Führen Sie Exec aus, um auf den Amazon ECS Fargate-Aufgabencontainer zuzugreifen, und führen Sie den Befehl /bin/sh für Ihren angegebenen container-name und Ihre task-id aus:

$ aws ecs execute-command --cluster <example-cluster-name> --task <example-task-id> --container <example-container-name> --interactive --command "/bin/sh" --region <example-region>

**Hinweis:**Ersetzen Sie example-cluster-name durch Ihren Clusternamen, example-task-id durch Ihre Aufgaben-ID, example-container-name durch Ihren Containernamen und example-region durch Ihre Region.

Wenn Sie immer noch Probleme mit der Verwendung von ECS Exec für Ihre Fargate-Aufgabe haben, lesen Sie HIER DEN ARTIKEL VON ISHAN (Die URL für den Artikel wird erwartet_33538).

Testen Sie die Konnektivität zwischen einer Fargate-Aufgabe und dem entsprechenden AWS-Service

Beheben Sie unzureichende IAM-Berechtigungen

Prüfen Sie, ob die Fargate-Aufgabe über ausreichende IAM-Berechtigungen verfügt, um eine Verbindung zum entsprechenden AWS-Service herzustellen. Informationen zum Ausführen von AWS-CLI-Befehlen für den erforderlichen AWS-Service finden Sie im Referenzhandbuch für AWS-CLI-Befehle.

Beispiel für einen Konnektivitätstest zwischen der Fargate-Aufgabe und Amazon Simple Notification Service (Amazon SNS):

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

Wenn Sie die folgende Fehlermeldung erhalten, überprüfen Sie die Amazon VPC-Endpunktrichtlinie. Stellen Sie sicher, dass die Richtlinie den Zugriff ermöglicht, um die erforderlichen Maßnahmen gegen den AWS-Service durchzuführen.

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

Wenn Sie die folgende Fehlermeldung erhalten, überprüfen Sie die Berechtigungen der Amazon ECS-Task-IAM-Rolle. Stellen Sie sicher, dass die IAM-Rolle über die erforderlichen Berechtigungen verfügt, um die erforderlichen Aktionen im AWS-Service auszuführen.

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

**Hinweis:**Wenn beim Ausführen von AWS-CLI-Befehlen für die Fargate-Aufgabe kein Fehler angezeigt wird, sind die erforderlichen IAM-Berechtigungen für diesen AWS-Service vorhanden.

Beheben Sie Verbindungs-Timeout-Fehler

1.    Verwenden Sie # telnet, um die Netzwerkkonnektivität zu Ihren AWS-Serviceendpunkten von der Fargate-Aufgabe aus zu testen:

# telnet <EXAMPLE-ENDPOINT> <EXAMPLE-PORT>

**Hinweis:Ersetzen Sie EXAMPLE-ENDPOINT durch Ihren AWS-Serviceendpunktnamen und Ihre URL und ** EXAMPLE-PORT durch Ihren AWS-Serviceport.

Die folgende Beispielausgabe zeigt, dass auf den Endpunkt vom Container aus zugegriffen werden kann:

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

# dig <EXAMPLE-ENDPOINT>

# nslookup <EXAMPLE-ENDPOINT>

Eine Liste der regionalen AWS-Serviceendpunkte finden Sie unter Service-Endpunkte und Kontingente für AWS-Services.

**Hinweis:**Wenn Sie Telnet und dig nicht im Anwendungscontainer installiert haben, führen Sie die Befehle apt-get update, apt install dnsutils und apt install telnet aus, um sie zu installieren. Verwenden Sie für Container, die auf amazon/aws-cli basieren, die Befehle yum update, yum install telnet und yum install bind-utils, um Telnet und andere Tools zu installieren.

2.Wenn Sie nach dem Testen der Netzwerkkonnektivität zu Ihren AWS-Serviceendpunkten Fehler mit dem Verbindungszeitlimit erhalten, überprüfen Sie die Netzwerkkonfiguration:

Führen Sie den Befehl nslookup aus. Wenn Sie VPC CIDR-IP-Bereiche sehen, wird der Datenverkehr über VPC-Endpunkte geleitet:

# 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

Überprüfen Sie bei Fehlern, bei denen das Verbindungszeitlimit überschritten wurde, die Regeln für eingehenden Datenverkehr der VPC-Endpunktsicherheitsgruppe. Stellen Sie sicher, dass TCP-Verkehr über Port 443 in den Regeln für eingehenden Datenverkehr der ECS-Sicherheitsgruppe oder des VPC CIDR zulässig ist. Weitere Informationen finden Sie unter Wie kann ich Verbindungsprobleme über meine Gateway- und Schnittstellen-VPC-Endpunkte beheben?

  • Wenn in der Region keine Amazon VPC-Endpunkte konfiguriert sind, überprüfen Sie die Routen von Ihren Subnetzen zum Internet. Stellen Sie bei einer Fargate-Aufgabe in einem öffentlichen Subnetz sicher, dass Ihre Aufgabe eine Standardroute zum Internet-Gateway hat. Stellen Sie bei einer Fargate-Aufgabe in einem privaten Subnetz sicher, dass Ihre Aufgabe eine Standardroute hat. Ihre Aufgabe benötigt eine Standardroute zum NAT-Gateway, AWS PrivateLink, einer anderen Quelle für Internetkonnektivität, oder zu lokalem CIDR und VPC.
  • Stellen Sie sicher, dass die Netzwerk-ACL den Zugriff auf den AWS-Service ermöglicht.
  • Vergewissern Sie sich, dass die Regeln für eingehenden Datenverkehr der Sicherheitsgruppe an den AWS-Service angehängt sind, auf den Sie mit Ihrer Fargate-Aufgabe zugreifen möchten. Lassen Sie den eingehenden Datenverkehr über die erforderlichen Ports zu.
  • Stellen Sie sicher, dass die Regeln für ausgehenden Datenverkehr der Fargate-Task-Sicherheitsgruppe den ausgehenden Datenverkehr über die erforderlichen Ports zulassen, um eine Verbindung zum AWS-Service herzustellen.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr