Por que não consigo me conectar ao cluster do Amazon EKS?
Criei um cluster do Amazon Elastic Kubernetes Service (Amazon EKS), mas não consigo me conectar a ele.
Breve descrição
Talvez você não consiga se conectar ao cluster do EKS por um dos seguintes motivos:
- Você não criou o arquivo kubeconfig para o cluster.
- Você não consegue se conectar ao endpoint do servidor de API do Amazon EKS.
Resolução
Você não criou o arquivo kubeconfig
Depois de criar o cluster do Amazon EKS, você deve configurar o arquivo kubeconfig usando a AWS Command Line Interface (AWS CLI). Essa configuração permite conectar-se ao cluster usando a linha de comando kubectl. A resolução a seguir mostra como criar um arquivo kubeconfig para o cluster com o comando update-kubeconfig da AWS CLI. Para atualizar manualmente o arquivo kubeconfig sem usar a AWS CLI, consulte Criar ou atualizar um arquivo kubeconfig para um cluster do Amazon EKS. Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.
1. Verifique se a AWS CLI versão 1.16.308 ou posterior está instalada no seu sistema:
$ aws --version
Importante: você deve ter o Python versão 2.7.9 ou posterior instalado no seu sistema. Caso contrário, você receberá um erro.
Dica: use gerenciadores de pacotes, como o yum, apt-get ou homebrew para macOS para instalar a AWS CLI.
2. Verifique a identidade atual para confirmar se você está usando as credenciais corretas com as permissões para o cluster do Amazon EKS:
aws sts get-caller-identity
Observação: o usuário ou a função da entidade do AWS Identity and Access Management (IAM) que cria um cluster da Amazon recebe automaticamente as permissões quando o cluster é criado. As permissões são concedidas na configuração RBAC do cluster no ambiente de gerenciamento. Usuários ou funções do IAM também podem ter acesso a um cluster do Amazon EKS em aws-auth ConfigMap. Por padrão, o AWS IAM Authenticator for Kubernetes usa a identidade configurada da AWS CLI ou do AWS SDK. Para obter mais informações, consulte Ativar o acesso de usuários e perfis do IAM ao cluster.
3. Crie ou atualize o arquivo kubeconfig do cluster:
aws eks --region example_region update-kubeconfig --name cluster_name
Observação: substitua example_region pelo nome da sua região da AWS. Substitua cluster_name pelo nome do seu cluster do EKS.
Por padrão, o arquivo de configuração para Linux é criado no caminho do kubeconfig ($HOME/.kube/config) no diretório inicial. O arquivo também pode ser mesclado com um kubeconfig existente nesse local. No Windows, o arquivo está em %USERPROFILE%.kube\config.
Você também pode especificar outro caminho definindo a variável de ambiente KUBECONFIG (do site da Kubernetes) ou com a seguinte opção --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Observação: para autenticação ao executar comandos kubectl, você pode especificar um nome do recurso da Amazon (ARN) de um perfil do IAM com a opção --role-arn. Caso contrário, a entidade do IAM na cadeia de credenciais padrão da AWS CLI ou do AWS SDK será usada. Para obter mais informações, consulte update-kubeconfig. Ou então, conclua a etapa 6 na seção Criar o arquivo kubeconfig manualmente de Criar ou atualizar um arquivo kubeconfig para um cluster do Amazon EKS.
4. Teste sua configuração:
$ kubectl get svc
Exemplo de saída:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Observação: se você receber outros erros de autorização ou de tipo de recurso, consulte Não autorizado ou acesso negado (kubectl).
Você não consegue se conectar ao endpoint do servidor de API do Amazon EKS
1. Verifique se você está se conectando à URL correta do servidor de API do Amazon EKS. Para fazer isso, ative kubectl verbosity e execute o seguinte comando:
$ kubectl get svc --v=9
A saída é semelhante à seguinte:
I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/config I0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
2. Verifique se o servidor de API do Amazon EKS está acessível publicamente executando o seguinte comando:
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
A saída é semelhante à seguinte:
{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }
3. Na saída anterior, se EndpointPublicAccess for true, certifique-se de incluir na lista de permitidos todos os endereços IP de origem da lista PublicAccessCIDRS. Para isso, faça o seguinte:
- Abra o console do Amazon EKS.
- Escolha o cluster que você deseja atualizar.
- Escolha a guia Networking (Rede) e, depois escolha Manage Networking (Gerenciar rede).
- Selecione Public (Público).
- Em Advanced settings (Configurações avançadas), para CIDR block (Bloco CIDR), insira todo o intervalo de CIDR público que precise ser incluído na lista de permitissões.
- Escolha Save changes (Salvar alterações).
Na saída anterior, se endpointPrivateAccess for true, certifique-se de que a solicitação kubectl esteja vindo de dentro da rede do cluster. Se a solicitação kubectl vier de fora da Amazon Virtual Private Cloud (Amazon VPC), você receberá o seguinte erro de tempo limite:
$ kubectl get svc --v=9 I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
Além disso, atualize o grupo de segurança do cluster para garantir que o intervalo IP ou CIDR de origem esteja listado na lista de permissões. Isso permite que o cliente kubectl se conecte ao endpoint do servidor de API do Amazon EKS.
Informações relacionadas
Vídeos relacionados

Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 10 meses
- AWS OFICIALAtualizada há 4 meses
- AWS OFICIALAtualizada há um ano