Como faço para resolver tempos limite de conexão quando me conecto ao meu serviço hospedado no Amazon EKS?

5 minuto de leitura
0

Recebo tempos limite de conexão quando me conecto ao meu serviço hospedado no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Dois dos motivos mais comuns pelos quais você não consegue se conectar ao seu serviço no cluster do Amazon EKS são:

  • As restrições do grupo de segurança ou da lista de controle de acesso à rede (ACL da rede) estão impedindo que o tráfego chegue aos endpoints do pod.
  • O serviço não seleciona os endpoints do pod porque os rótulos não são correspondentes.

Para resolver esses problemas, verifique os grupos de segurança e as ACLs da rede associadas às instâncias do nó de processamento e ao balanceador de carga. Além disso, verifique se o serviço tem os rótulos corretos selecionados para seus pods.

Observação: a solução de problemas varia para diferentes tipos de serviço. As seguintes resoluções são aplicáveis para quando você estiver solucionando problemas de serviços inacessíveis. Para saber mais sobre os tipos de serviço do Kubernetes, consulte Como faço para expor os serviços do Kubernetes em execução no meu cluster do Amazon EKS?

Resolução

Verificar o grupo de segurança e as ACLs da rede

IP do cluster

O tipo de serviço IP do cluster é usado para comunicação entre microsserviços executados no mesmo cluster do Amazon EKS. Certifique-se de que o grupo de segurança conectado à instância em que o pod de destino está localizado tenha uma regra de entrada para permitir a comunicação da instância do pod do cliente.

Na maioria dos casos, há uma regra própria que permite toda comunicação em todas as portas nos grupos de segurança do nó de processamento. Se você usar vários grupos de nós, cada um com seu próprio grupo de segurança, certifique-se de permitir toda comunicação entre os grupos de segurança. Isso permite que os microsserviços executados nos vários nós se comuniquem facilmente.

Para saber mais, consulte Considerações sobre grupos de segurança do Amazon EKS.

Porta do nó

O grupo de segurança do nó de processamento deve permitir o tráfego de entrada na portaespecificada na definição do serviço NodePort. Se não for especificado na definição do serviço, o valor do parâmetro da porta será o mesmo que o parâmetro targetPort. A porta é exposta em todos os nós no cluster do Amazon EKS.

Verifique as ACLS da rede vinculadas às sub-redes do nó de processamento. Certifique-se de que o endereço IP do cliente esteja na lista de permissões na porta que o serviço usa.

Se você estiver acessando o Kubernetes Service pela Internet, verifique se os nós têm um endereço IP público. Para acessar o serviço, você deve usar a combinação endereço IP público/porta do nó.

Balanceador de carga

Certifique-se de que o grupo de segurança do balanceador de carga permita as portas do listener. Além disso, verifique se o grupo de segurança do nó de processamento permite o tráfego de entrada do grupo de segurança do balanceador de carga na porta em que o contêiner da aplicação está sendo executado.

Se a porta especificada na definição de serviço for diferente da targetPort, você deverá permitir o tráfego de entrada pela porta no grupo de segurança do nó de processamento para o grupo de segurança do balanceador de carga. A porta e a targetPort geralmente são as mesmas na definição de serviço.

As ACLs da rede devem permitir que o endereço IP do cliente chegue ao balanceador de carga na porta do listener. Se você estiver acessando o balanceador de carga pela Internet, certifique-se de ter criado um balanceador de carga público.

Verificar se o serviço selecionou os endpoints do pod corretamente

Se seus pods não estiverem registrados como backends para o serviço, você poderá receber um erro de tempo limite. Isso pode acontecer quando você acessa o serviço de um navegador ou quando executa o comando curl podIP:podPort.

Verifique os rótulos dos pods e verifique se o serviço tem os seletores de rótulos apropriados (do site do Kubernetes).

Execute os seguintes comandos para verificar se o Kubernetes Service selecionou e registrou corretamente seus pods.

Comando:

kubectl get pods -o wide

Exemplo de saída:

NAME                    READY   STATUS    RESTARTS   AGE       IP                           NODE                         NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-2rtn8   1/1     Running     0       3h4m   172.31.33.214   ip-172-31-33-109.us-west-2.compute.internal       none          none

Comando:

kubectl describe svc your_service_name -n your_namespace

Observação: substitua your_service_name pelo nome do serviço e your_namespace pelo namespace.

Exemplo de saída:

Events:            none
Session Affinity:  none
Endpoints:         172.31.33.214:80
....

Na saída do exemplo anterior, 172.31.33.214 é o endereço IP do pod obtido com a execução do comando kubectl get pods -o wide. O endereço IP 172.31.33.214 também serve como backend para um serviço que está sendo executado em um cluster do Amazon EKS.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos