Como soluciono problemas do Service Connect no Amazon ECS?

6 minuto de leitura
0

Meus serviços do Amazon Elastic Container Service (Amazon ECS) não conseguem se conectar a outro serviço.

Resolução

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Problemas de configuração incorreta ou de rede causam problemas de comunicação entre serviços. Para resolver esses problemas, execute as seguintes ações de solução de problemas.

Verifique sua configuração do Service Connect

Verifique se você ativou o Service Connect

Pré-requisitos: para usar o Amazon ECS Service Connect, certifique-se de atender aos requisitos do Service Connect.

Para verificar se você ativou o Service Connect para seus serviços do Amazon ECS, execute o seguinte comando describe-services da AWS CLI:

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

Observação: substitua cluster-cluster pelo nome do seu cluster e service-name pelo nome do seu serviço.

Exemplo de saída:

"serviceConnectConfiguration": {

"enabled": true,

Observação: se o serviço Amazon ECS precisar permitir o tráfego de rede de outros serviços, certifique-se de definir a configuração do Service Connect como um serviço cliente-servidor. Para verificar essa configuração, revise a saída do comando para “serviços” em “ServiceConnectionConfiguration”.

Verifique o namespace dos seus serviços

Para usar o Service Connect, você deve configurar seus serviços do Amazon ECS no mesmo namespace. Além disso, verifique se o serviço ao cliente e o serviço cliente-servidor estão no mesmo namespace. Para verificar o namespace dos seus serviços, execute o comando describe-services:

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

Observação: substitua cluster-cluster pelo nome do seu cluster e service-name pelo nome do seu serviço.

Na saída, verifique o valor do namespace. Para atualizar o namespace de um serviço, use o console do Amazon ECS para atualizar a configuração do Service Connect. Execute o comando update-service:

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

Observação: Substitua o cluster-name pelo nome do cluster, service-name pelo nome do serviço e Namespace-name pelo seu namespace.

Se o serviço cliente não conseguir resolver o DNS do serviço cliente-servidor, você receberá uma das seguintes mensagens de erro:

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

Para resolver esse problema, execute o seguinte comando get-namespace para verificar se você registrou o namespace no AWS Cloud Map:

aws servicediscovery get-namespace --id namespace

Observação: substitua namespace pelo seu ID de namespace.

Verifique a saída do comando para visualizar os namespaces disponíveis em sua conta da AWS e na região da AWS.

Para confirmar que você registrou suas tarefas no namespace da instância, conclua as etapas a seguir:

  1. Para obter o ID do namespace, execute o seguinte comando list-namespaces:

    aws servicediscovery list-namespaces
  2. Use o console do AWS Cloud Map ou a AWS CLI para listar os serviços no namespace.

  3. Para visualizar as instâncias registradas do serviço, execute o seguinte comando list-instances:

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

    Observação: Substitua serviceID pelo seu ID de serviço.

  4. Se você não registrou sua instância, execute o seguinte comando update-service para reimplantar as tarefas:

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

    Observação: Substitua o cluster-name pelo nome do cluster, service-name pelo nome do serviço e region-name pela região.
    Ou use o console do Amazon ECS para atualizar o serviço e escolha Forçar nova implantação.

Verifique seus nomes de mapeamento de portas

Se você não definir o nome do mapeamento de portas na definição da tarefa, receberá a seguinte mensagem de erro:

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

Para resolver esse problema, atualize a definição da tarefa e adicione um valor para o parâmetro name em portMappings.

Exemplo de definição de tarefa:

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

Verifique suas configurações de ACL de rede e grupo de segurança

Certifique-se de que sua lista de controle de acesso à rede (ACL de rede) e grupos de segurança usem as seguintes configurações:

  • O serviço cliente permite tráfego de saída para a porta do grupo de segurança do serviço cliente-servidor.
  • O grupo de segurança do serviço cliente-servidor permite tráfego de entrada na porta do serviço do cliente.
  • As ACLs de rede privada virtual (VPC) permitem tráfego nas portas ContainerPort e IngressPortOverride.
  • Se as tarefas de serviço forem executadas em VPCs diferentes, sua conexão de emparelhamento da VPC ou o gateway de trânsito deverão permitir o tráfego entre as VPCs.

Verifique a conectividade entre suas tarefas de serviços

Conclua as etapas a seguir:

  1. Se você executar tarefas no AWS Fargate, ative o ECS Exec. Se você executar tarefas no Amazon Elastic Compute Cloud (Amazon EC2), vá para a etapa 3.

  2. Execute o seguinte comando execute-command para se conectar remotamente ao contêiner:

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

    Observação: substitua cluster-name pelo nome do cluster, task-id pelo ID da tarefa e container-name pelo nome da instância de contêiner.

  3. Para garantir que sua conexão use o proxy Service Connect, execute o seguinte comando:

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

    Observação: substitua o IPaddress pelo endereço IP privado da tarefa, o número da porta pela porta da instância de contêiner e a verificação de integridade pelo caminho da verificação de integridade do contêiner.

    Verifique a saída do comando para o cabeçalho server: envoy para confirmar se a conexão usa o proxy. Se sua conexão não usar o proxy, verifique se a configuração do Service Connect está correta.

  4. Para abrir o arquivo /etc/hosts, execute o seguinte comando:

    cat /etc/hosts

    Verifique a saída do comando para garantir que você possa ver os endpoints de outros serviços. Se você não vê os endpoints do serviço, verifique se a configuração do Service Connect está correta.

  5. Se você alterar a configuração do Service Connect, execute o seguinte comando update-service para reimplantar as tarefas:

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

    Observação: Substitua o cluster-name pelo nome do cluster, service-name pelo nome do serviço e region-name pela região.
    Ou use o console do Amazon ECS para atualizar o serviço e escolha Forçar nova implantação.

Reimplemente suas tarefas de atendimento ao cliente

Se você receber a mensagem de erro “Could not resolve host”, suas tarefas não poderão resolver os endpoints do serviço. Em vez disso, você pode receber a mensagem de erro “ping: bad address ‘DNS’”.

Para resolver esses problemas, reimplante as tarefas de atendimento ao cliente existentes.

Revise os logs da sua aplicação

Verifique os logs da aplicação em busca de erros de conectividade ou runtime. O Amazon ECS exporta logs para diferentes destinos com base no seu driver de log. Se você usar o driver awslogs, o Amazon ECS exporta os logs para o Amazon CloudWatch.

Informações relacionadas

Componentes do Amazon ECS Service Connect

AWS OFICIAL
AWS OFICIALAtualizada há 3 meses