

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Solução de problemas do Amazon EKS Connector
<a name="troubleshooting-connector"></a>

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
<a name="tsc-steps"></a>

Esta seção descreve as etapas para diagnosticar problemas no Amazon EKS Connector.

### Verifique o status do Amazon EKS Connector
<a name="tsc-check"></a>

Para verificar o status do Amazon EKS Connector, digite:

```
kubectl get pods -n eks-connector
```

### Inspecione logs do Amazon EKS Connector
<a name="tsc-logs"></a>

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
<a name="tsc-name"></a>

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
<a name="tsc-misc"></a>

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 por 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 suas 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
<a name="w662aac60c33b9"></a>

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)
<a name="symp-pending"></a>

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 apresentando loops de falhas](#symp-loop) neste tópico.

## Erro no console: O usuário system:serviceaccount:eks-connector:eks-connector não pode representar usuários de recursos no grupo API no escopo do cluster
<a name="symp-imp"></a>

O Amazon EKS Connector usa a [representação de usuário](https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation) do Kubernetes para atuar em nome das [entidades principais do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal) no Console de gerenciamento da AWS. Toda entidade principal que acessa a API do Kubernetes na conta de serviço do AWS `eks-connector` precisa receber uma permissão para representar o usuário do Kubernetes correspondente 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 {{111122223333}} da AWS, é mapeado para um usuário do Kubernetes. [As melhores práticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) recomendam que você conceda permissões para perfis e não para usuários.

  ```
                 arn:aws:iam::111122223333:user/john
  ```
+ O perfil do IAM {{admin}}, da conta da {{111122223333}} da AWS, é mapeado para um usuário do Kubernetes:

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

  O resultado é um ARN de 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 para visualizar os recursos do cluster Kubernetes em um console do Amazon EKS](connector-grant-access.md). Substitua `%IAM_ARN%` no modelo pelo ARN do IAM do Console de gerenciamento da AWS da entidade principal do IAM.

## Erro no console: [...] é proibido: O usuário [...] não pode listar o recurso [...] no grupo API no escopo do cluster
<a name="symp-rbac"></a>

Considere o seguinte problema. O Amazon EKS Connector representou com êxito a entidade principal do IAM da solicitação no Console de gerenciamento da AWS no cluster de destino do Kubernetes. No entanto, a entidade principal representada não tem a permissão 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 `userARN1` e `userARN2` por uma lista dos ARNs dos perfis do IAM para conceder acesso à 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 para visualizar os recursos do cluster Kubernetes em um console do Amazon EKS](connector-grant-access.md).

## Erro no console: o Amazon EKS não pode se comunicar com o servidor de API do cluster do Kubernetes. O cluster deve estar em um estado ATIVO para estabelecer uma conexão bem-sucedida. Tente novamente em alguns minutos.
<a name="symp-con"></a>

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](#tsc-logs). Se você não encontrar nenhum erro para o Amazon EKS Connector, tente fazer a conexão novamente após alguns minutos. Se você costuma apresentar alta latência ou conectividade intermitente para o cluster de destino, considere a possibilidade de registrar novamente o cluster em uma região do AWS que esteja localizada mais perto de você.

## Os pods do Amazon EKS Connector estão apresentando loops de falhas
<a name="symp-loop"></a>

Há vários motivos que podem fazer com que o pod do Amazon EKS Connector entre 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 abaixo um exemplo de saída.

```
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](#tsc-logs) para solucionar o problema.

## Falha ao iniciar eks-connector: InvalidActivation
<a name="symp-regis"></a>

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 obter mais informações, consulte [Etapa 1: Registrar o cluster](connecting-cluster.md#connector-connecting).
+ 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 solucionar esse problema, certifique-se de que o manifesto do Amazon EKS Connector seja aplicado ao cluster de destino do Kubernetes 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 gera uma nova ativação.

## O nó do cluster está sem conectividade de saída
<a name="symp-out"></a>

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 de destino AWS. 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](eks-connector.md#connect-cluster-reqts).

## Os pods do Amazon EKS Connector estão no estado `ImagePullBackOff`
<a name="symp-img"></a>

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

```
kubectl get pods -n eks-connector
```

Veja abaixo um exemplo de saída.

```
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](https://gallery.ecr.aws/). É possível que o cluster de destino do Kubernetes não possa extrair imagens da Galeria Pública do Amazon ECR. 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.