Como soluciono problemas de conexão entre minha tarefa do Fargate e outros serviços da AWS?

7 minuto de leitura
0

Quero solucionar problemas de conectividade que estou enfrentando entre minha tarefa do AWS Fargate e um serviço da AWS.

Breve descrição

Aplicativos executados dentro de uma tarefa do Fargate com o Amazon Elastic Container Service (Amazon ECS) podem deixar de acessar outros serviços da AWS devido aos seguintes motivos:

  • Permissões insuficientes do AWS Identity and Access Management (IAM)
  • Rotas de sub-rede incorretas
  • Restrições da lista de controle de acesso à rede (ACL de rede)
  • Grupos de segurança
  • Endpoints da Amazon Virtual Private Cloud (Amazon VPC)

Para resolver esses problemas, use o Amazon ECS Exec para interagir com o contêiner do aplicativo da tarefa do Fargate. Se você observar erros de tempo limite de conexão nos logs do contêiner de aplicação, teste a conectividade entre a tarefa Fargate e o serviço correspondente da AWS.

Resolução

Use o ECS Exec para interagir com o contêiner de aplicação da tarefa Fargate

1.Antes de usar o Amazon ECS exec, preencha os pré-requisitos de uso do Amazon ECS Exec.

  1. Siga as instruções em Como usar o Amazon ECS Exec para ativar o recurso.

3.Execute o Amazon ECS Exec para acessar seu contêiner de aplicação e verificar a conectividade de rede e IAM entre o contêiner e o serviço da AWS.

**Observação:**Antes de executar o Exec, é recomendável definir o parâmetro initProcessEnabled como true. Isso evita que os processos secundários do AWS Systems Manager Agent (SSM Agent) se tornem órfãos. (Opcional) Adicione um comando sleep para o contêiner da aplicação para mantê-lo em execução por um período de tempo especificado.

Exemplo:

{
    "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 você não conseguir usar o Exec para acessar o contêiner da aplicação, execute o Exec para uma nova tarefa do Fargate que é executada na imagem do Docker amazon/aws-cli. Isso permite testar a comunicação entre a tarefa Fargate e o serviço da AWS.

Observação: A nova tarefa do Fargate deve ter a mesma configuração de rede (sub-redes, grupos de segurança etc.) do contêiner da sua aplicação.

Para executar uma nova tarefa do Fargate com a imagem do Docker amazon/aws-cli, conclua as seguintes etapas:

Observação: A AWS Command Line Interface (AWS CLI) está pré-instalada na imagem amazon/aws-cli do seu contêiner. Se a AWS CLI não estiver instalada no contêiner da sua aplicação, execute o seguinte comando:

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

unzip awscliv2.zip

sudo ./aws/install

1.Crie uma definição de tarefa com amazon/aws-cli como imagem para o contêiner. Em seguida, adicione os pontos de entrada tail-f e /dev/null para colocar o contêiner em um estado de execução contínua.

Exemplo de definição de tarefa:

{  
    "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.Crie um serviço Amazon ECS com a definição de tarefa recém-criada e com a mesma configuração de rede do contêiner do aplicativo:

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

Observação: substitua example-cluster-name pelo nome do cluster, example-task-definition-name pelo nome da definição da tarefa,example-service-name pelo nome do serviço e example-region pela sua região da AWS.

3.Execute o Exec para acessar o contêiner de tarefas do Amazon ECS Fargate e execute o comando /bin/sh no seu container-name e task-id especificados:

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

Observação:Substitua example-cluster-name com o nome do cluster, example-task-id pelo ID da tarefa, example-container-name pelo nome do contêiner e** example-region** pela sua região.

Se você ainda tiver problemas ao usar o ECS Exec em sua tarefa do Fargate, CONSULTE O ARTIGO DE ISHAN AQUI (Aguardar URL para o artigo\ _33538).

Teste a conectividade entre uma tarefa do Fargate e o serviço correspondente da AWS

Solucionar problemas de permissões insuficientes do IAM

Verifique se a tarefa do Fargate tem permissões de IAM suficientes para se conectar ao serviço correspondente da AWS. Para executar comandos da AWS CLI para o serviço necessário da AWS, consulte a ](https://awscli.amazonaws.com/v2/documentation/api/latest/index.html)Guia de referência de comandos[ da AWS CLI.

Exemplo de teste de conectividade entre a tarefa do Fargate e o Amazon Simple Notification Service (Amazon SNS):

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

Se você receber o erro a seguir, verifique a política de endpoint do Amazon VPC. Certifique-se de que a política permita o acesso para realizar as ações necessárias contra o serviço da 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 você receber o erro a seguir, verifique as permissões da função IAM da tarefa do Amazon ECS. Certifique-se de que o perfil do IAM tenha as permissões necessárias para realizar as ações necessárias no serviço da 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

**Observação:**Se você não encontrar nenhum erro ao executar comandos da AWS CLI na tarefa Fargate, as permissões necessárias do IAM estão presentes para esse serviço da AWS.

Solucionar erros de tempo limite de conexão

1.Use # telnet para testar a conectividade de rede com seus endpoints de serviço da AWS a partir da tarefa Fargate:

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

**Observação:**Substitua EXAMPLE-ENDPOINT pelo nome e URL do seu endpoint de serviço da AWS e EXAMPLE-PORT pela sua porta de serviço da AWS.

O exemplo de saída a seguir mostra que o endpoint pode ser acessado a partir do contêiner:

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

# dig <EXAMPLE-ENDPOINT>

# nslookup <EXAMPLE-ENDPOINT>

Para obter uma lista dos endpoints de serviços regionais da AWS, consulte Endpoints de serviço e cotas para serviços da AWS.

**Observação:**Se você não instalou o telnet e dig no contêiner da aplicação, execute os comandos apt-get updateapt install dnsutilsapt install telnet para instalá-los. Para contêineres baseados em amazon/aws-cli, use os comandos yum updateyum install telnet e yum install bind-utils para instalar o telnet e outras ferramentas.

  1. Se você receber erros de tempo limite de conexão depois de testar a conectividade de rede com seus endpoints de serviço da AWS, inspecione a configuração da rede:

Execute o comando nslookup. Se você vir VPC CIDR IP, o tráfego está sendo roteado por meio de endpoints 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

Para erros de tempo limite de conexão, verifique as regras de entrada do grupo de segurança de endpoint da VPC. Certifique-se de que o tráfego TCP pela porta 443 seja permitido nas regras de entrada do grupo de segurança do ECS ou VPC CIDR. Para obter mais informações, consulte Como posso solucionar problemas de conectividade em meus terminais VPC de gateway e interface?

  • Se nenhum endpoint do Amazon VPC estiver configurado na região, verifique as rotas de suas sub-redes para a Internet. Para uma tarefa do Fargate em uma sub-rede pública, certifique-se de que sua tarefa tenha uma rota padrão para o gateway da Internet. Para uma tarefa do Fargate em uma sub-rede privada, certifique-se de que sua tarefa tenha uma rota padrão. Sua tarefa precisa de uma rota padrão para o gateway NAT, o AWS PrivateLink, outra fonte de conectividade com a Internet ou para o CIDR local e de VPC.
  • Certifique-se de que a ACL de rede permita o acesso ao serviço da AWS.
  • Verifique se as regras de entrada do grupo de segurança estão anexadas ao serviço da AWS que você está tentando acessar com sua tarefa do Fargate. Permita o tráfego de entrada pelas portas necessárias.
  • Verifique se as regras de saída do grupo de segurança de tarefas do Fargate permitem o tráfego de saída pelas portas necessárias para se conectar ao serviço da AWS.
AWS OFICIAL
AWS OFICIALAtualizada há um ano