Solução de problemas no Amazon EKS Connector - Amazon EKS

Ajudar a melhorar esta página

Quer contribuir para este guia do usuário? Role até o final desta página e selecione Editar esta página no GitHub. Suas contribuições ajudarão a tornar nosso guia do usuário melhor para todos.

Solução de problemas no Amazon EKS Connector

Este tópico aborda alguns dos erros comuns que você pode encontrar ao usar o Amazon EKS Connector, incluindo instruções sobre como solucioná-los e soluções de contorno.

Solução básica de problemas

Esta seção descreve etapas para diagnosticar o problema se ele não estiver claro.

Verifique o status do Amazon EKS Connector

Verifique o status do Amazon EKS Connector.

kubectl get pods -n eks-connector

Inspecione logs do Amazon EKS Connector

O Pod do Amazon EKS Connector consiste em três contêineres. Para recuperar logs completos de todos esses contêineres para que possa inspecioná-los, execute os seguintes comandos:

  • connector-init

    kubectl logs eks-connector-0 --container connector-init -n eks-connector kubectl logs eks-connector-1 --container connector-init -n eks-connector
  • connector-proxy

    kubectl logs eks-connector-0 --container connector-proxy -n eks-connector kubectl logs eks-connector-1 --container connector-proxy -n eks-connector
  • connector-agent

    kubectl exec eks-connector-0 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log kubectl exec eks-connector-1 --container connector-agent -n eks-connector -- cat /var/log/amazon/ssm/amazon-ssm-agent.log

Obtenha o nome efetivo do cluster

Os clusters do Amazon EKS são identificados exclusivamente como clusterName em uma única conta da AWS e Região da AWS. Se você tiver vários clusters conectados no Amazon EKS, será possível confirmar em qual cluster do Amazon EKS o cluster atual do Kubernetes está registrado. Para fazê-lo, insira o seguinte para descobrir o clusterName do cluster atual.

kubectl exec eks-connector-0 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/" kubectl exec eks-connector-1 --container connector-agent -n eks-connector \ -- cat /var/log/amazon/ssm/amazon-ssm-agent.log | grep -m1 -oE "eks_c:[a-zA-Z0-9_-]+" | sed -E "s/^.*eks_c:([a-zA-Z0-9_-]+)_[a-zA-Z0-9]+.*$/\1/"

Comandos diversos

Os comandos a seguir são úteis para recuperar informações necessárias para solucionar problemas.

  • Use o comando a seguir para coletar imagens usadas pelo Pods no Amazon EKS Connector.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.containers[*].image}" | tr -s '[[:space:]]' '\n'
  • Use o comando a seguir para coletar os nomes dos nós nos quais o Amazon EKS Connector está sendo executado.

    kubectl get pods -n eks-connector -o jsonpath="{.items[*].spec.nodeName}" | tr -s '[[:space:]]' '\n'
  • Execute o comando a seguir para obter as versões de cliente e servidor do Kubernetes.

    kubectl version
  • Execute o comando a seguir para obter informações sobre os nós.

    kubectl get nodes -o wide --show-labels

Problema do helm: 403 proibido

Se você recebeu o seguinte erro ao executar os comandos de instalação do helm:

Error: INSTALLATION FAILED: unexpected status from HEAD request to https://public.ecr.aws/v2/eks-connector/eks-connector-chart/manifests/0.0.6: 403 Forbidden

Você pode executar a seguinte linha para corrigi-lo:

docker logout public.ecr.aws

Erro do console: o cluster está paralisado no estado Pending (Pendente)

Se o cluster ficar paralisado no estado Pending no console do Amazon EKS depois que você o registrou, isso pode indicar que o Amazon EKS Connector ainda não conectou o cluster à AWS com êxito. Em um cluster registrado, o estado Pending significa que a conexão não foi estabelecida com êxito. Para solucionar esse problema, certifique-se de que aplicou o manifesto ao cluster do Kubernetes de destino. Se você o aplicou ao cluster, mas o cluster permanece no estado Pending, pode ser que o statefulset eks-connector não esteja íntegro. Para solucionar esse problema, consulte Os Pods do Amazon EKS Connector estão em um loop de pane neste tópico.

Erro do console: User “system:serviceaccount:eks-connector:eks-connector” can't impersonate resource “users” in API group “” no escopo do cluster

O Amazon EKS Connector usa a representação do usuário do Kubernetes para atuar em nome das entidades principais do IAM no AWS Management Console. Toda entidade principal que acessa a API do Kubernetes na conta de serviço eks-connector da AWS precisa receber uma permissão para representar o usuário do Kubernetescorrespondente usando um ARN do IAM como o nome de usuário do Kubernetes. Nos exemplos a seguir, o ARN do IAM é mapeado para um usuário do Kubernetes.

  • O usuário do IAM john, da conta da AWS 111122223333 é mapeado para um usuário do Kubernetes. As melhores práticas do IAM recomendam que você conceda permissões para perfis e não para usuários.

    arn:aws:iam::111122223333:user/john
  • O perfil do IAM de admin da conta da AWS 111122223333 é mapeado para um usuário do Kubernetes:

    arn:aws:iam::111122223333:role/admin

    O resultado é um perfil do IAM, em vez do ARN da sessão do AWS STS.

Para obter instruções sobre como configurar o ClusterRole e o ClusterRoleBinding para conceder à conta de serviço do eks-connector o privilégio de representar o usuário mapeado, consulte Conceder acesso a uma entidade principal do IAM para visualizar recursos do Kubernetes em um cluster. Substitua %IAM_ARN% no modelo pelo ARN do IAM do AWS Management Console da entidade principal do IAM.

Erro do console: [...] is forbidden: User [...] cannot list resource “[...] in API group” no escopo do cluster

Considere o seguinte problema. O Amazon EKS Connector representou com êxito a entidade principal do IAM no AWS Management Console da solicitação no cluster do Kubernetes de destino. Porém, a entidade principal representada não tem as permissões RBAC para as operações de API do Kubernetes.

Para resolver esse problema, existem dois métodos de conceder permissões a usuários adicionais. Se você instalou anteriormente o eks-connector por meio do chart do Helm, poderá conceder acesso aos usuários facilmente executando o comando a seguir. Substitua o userARN1 e o userARN2 por uma lista dos ARNs dos perfis do IAM para conceder acesso para visualização dos recursos do Kubernetes:

helm upgrade eks-connector oci://public.ecr.aws/eks-connector/eks-connector-chart \ --reuse-values \ --set 'authentication.allowedUserARNs={userARN1,userARN2}'

Ou, como administrador do cluster, conceda aos usuários individuais do Kubernetes o nível apropriado de privilégios de RBAC. Para ter mais informações e exemplos, consulte Conceder acesso a uma entidade principal do IAM para visualizar recursos do Kubernetes em um cluster.

Erro do console: O Amazon EKS não consegue se comunicar com o Kubernetes servidor de API do cluster. O cluster deve estar em um estado ATIVO para estabelecer uma conexão bem-sucedida. Tente novamente em alguns minutos.

Se o serviço Amazon EKS não conseguir se comunicar com o Amazon EKS Connector no cluster de destino, pode ser por um dos seguintes motivos:

  • O Amazon EKS Connector no cluster de destino não está íntegro.

  • Baixa conectividade ou conexão interrompida entre o cluster de destino e a Região da AWS.

Para resolver esse problema, verifique os logs do Amazon EKS Connector. Se você não encontrar nenhum erro para o Amazon EKS Connector, tente fazer a conexão novamente após alguns minutos. Se você enfrentar regularmente alta latência ou conectividade intermitente para o cluster de destino, considere registrá-lo novamente em uma Região da AWS mais perto de você.

Os Pods do Amazon EKS Connector estão em um loop de pane

Muitos motivos podem fazer um Pod do Amazon EKS Connector entrar no status CrashLoopBackOff. É provável que esse problema envolva o contêiner connector-init. Verifique o status do Pod do Amazon EKS Connector.

kubectl get pods -n eks-connector

Veja um exemplo de saída abaixo.

NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:CrashLoopBackOff 1 7s

Se a saída for semelhante à saída anterior, consulte Inspecione logs do Amazon EKS Connector para solucionar o problema.

Failed to initiate eks-connector: InvalidActivation

Quando você inicia o Amazon EKS Connector pela primeira vez, ele registra um activationId e um activationCode na Amazon Web Services. O registro pode falhar, o que pode fazer com que o contêiner connector-init falhe com um erro similar ao erro a seguir.

F1116 20:30:47.261469       1 init.go:43] failed to initiate eks-connector: InvalidActivation:

Para solucionar esse problema, considere as seguintes causas e correções recomendadas:

  • O registro pode ter falhado porque o activationId e o activationCode não estavam no arquivo de manifesto. Se for esse o caso, verifique se os valores corretos retornados na operação da API RegisterCluster estavam corretos e se o activationCode está no arquivo de manifesto. O activationCode é adicionado aos segredos do Kubernetes, portanto, deve ser codificado em base64. Para ter mais informações, consulte Etapa 1: Registrar o cluster.

  • O registro pode ter falhado porque sua ativação expirou. Isso ocorre porque, por motivos de segurança, você deve ativar o Amazon EKS Connector em até três dias após registrar o cluster. Para resolver esse problema, certifique-se de que o manifesto do Amazon EKS Connector seja aplicado ao cluster do Kubernetes de destino antes da data e hora de expiração. Para confirmar a data de expiração da ativação, chame a operação da API DescribeCluster.

    aws eks describe-cluster --name my-cluster

    No exemplo de resposta a seguir, a data e a hora de expiração estão registradas como 2021-11-12T22:28:51.101000-08:00.

    { "cluster": { "name": "my-cluster", "arn": "arn:aws:eks:region:111122223333:cluster/my-cluster", "createdAt": "2021-11-09T22:28:51.449000-08:00", "status": "FAILED", "tags": { }, "connectorConfig": { "activationId": "00000000-0000-0000-0000-000000000000", "activationExpiry": "2021-11-12T22:28:51.101000-08:00", "provider": "OTHER", "roleArn": "arn:aws:iam::111122223333:role/my-connector-role" } } }

    Se a activationExpiry já tiver passado, cancele o registro do cluster e registre-o novamente. Isso gerará uma nova ativação.

O nó do cluster está sem conectividade de saída

Para funcionar corretamente, o Amazon EKS Connector requer conectividade de saída para vários endpoints da AWS. Não é possível conectar um cluster privado sem conectividade de saída a uma Região da AWS de destino. Para solucionar esse problema, você deve adicionar a conectividade de saída necessária. Para obter mais informações sobre requisitos de conector, consulte Considerações sobre o Amazon EKS Connector.

O Amazon EKS Connector Pods está no estado ImagePullBackOff

Se você executar o comando get pods e os Pods estiverem no estado ImagePullBackOff, não poderão funcionar corretamente. Se os Pods do Amazon EKS Connector estiverem no estado ImagePullBackOff, não poderão funcionar corretamente. Verifique o status dos Pods do Amazon EKS Connector.

kubectl get pods -n eks-connector

Veja um exemplo de saída abaixo.

NAME READY STATUS RESTARTS AGE eks-connector-0 0/2 Init:ImagePullBackOff 0 4s

O arquivo de manifesto padrão do Amazon EKS Connector referencia imagens da Amazon ECR Public Gallery. É possível que o cluster do Kubernetes de destino não possa extrair imagens da Amazon ECR Public Gallery. Solucione o problema de extração de imagens da Amazon ECR Public Gallery ou considere espelhar as imagens no registro do contêiner privado de sua escolha.