Por que não consigo me conectar ao meu cluster do Amazon EKS?
Criei um cluster do Amazon Elastic Kubernetes Service (Amazon EKS), mas não consigo me conectar ao meu cluster.
Breve descrição
Talvez você não consiga se conectar ao seu 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 APIs do Amazon EKS.
Resolução
Você não criou o arquivo kubeconfig
Depois de criar o cluster do Amazon EKS, você deverá configurar o arquivo kubeconfig com 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 seu arquivo kubeconfig sem usar a AWS CLI, consulte Como criar ou atualizar um arquivo kubeconfig para um cluster do Amazon EKS.
Observação: se você receber erros ao executar comandos da AWS CLI, verifique se está usando a versão mais recente da AWS CLI.
1. Verifique se a versão 1.16.308 ou posterior da AWS CLI está instalada no sistema:
$ aws --version
Importante: você deve ter o Python versão 2.7.9 ou posterior instalado no sistema. Caso contrário, você receberá um erro.
Dica: use gerenciadores de pacotes como yum, apt-get ou homebrew para macOS para instalar a AWS CLI.
2. Verifique a identidade atual para confirmar que você está usando as credenciais corretas que têm permissões para o cluster do Amazon EKS:
aws sts get-caller-identity
Observação: o usuário ou perfil da entidade do AWS Identity and Access Management (IAM) que cria um cluster da Amazon recebe permissões automaticamente quando esse cluster é criado. Essas permissões são concedidas na configuração RBAC do cluster no plano de controle. Usuários ou perfis 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 Como ativar o acesso de usuários e perfis do IAM ao seu cluster.
3. Crie ou atualize o arquivo kubeconfig do seu 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 kubeconfig ($HOME/.kube/config) no seu diretório inicial. O arquivo também pode ser mesclado com um kubeconfig existente nesse local. Para Windows, o arquivo está em %USERPROFILE%\.kube\config.
Você também pode especificar outro caminho definindo a variável de ambiente KUBECONFIG (do site Kubernetes) ou com a seguinte opção de --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Observação: para autenticação ao executar comandos kubectl, você pode especificar o 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, conclua a Etapa 6 na seção Crie o arquivo kubeconfig manualmente de Como 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 tipo de recurso, consulte Não autorizado ou acesso negado (kubectl).
Não é possível conectar-se ao endpoint do servidor de APIs do Amazon EKS.
1. Verifique se você está se conectando ao URL correta do servidor de APIs do Amazon EKS. Para fazer isso, ative o detalhamento de kubectl e execute o seguinte comando:
$ kubectl get svc --v=9
A saída é semelhante ao 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 APIs 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 ao 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 permissões todos os endereços IP de origem na lista publicAccessCidrs. Para fazer isso, siga estas etapas:
- Abra o console do Amazon EKS.
- Escolha o cluster que você deseja atualizar.
- Escolha a guia Rede e depois escolha Gerenciar redes.
- Selecione Público.
- Em Configurações avançadas, para Bloco CIDR, insira todo o intervalo público de CIDRs que precisa ser incluído na lista de permissões.
- Escolha Salvar alterações.
Na saída anterior, se endPointPrivateAccess for true, certifique-se de que a solicitação de kubectl esteja vindo da rede do cluster. Se a solicitação de kubectl vier de fora da sua 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 IP de origem ou o intervalo de CIDRs estejam na lista de permissões. Isso permite que o cliente kubectl se conecte ao endpoint do servidor de APIs do Amazon EKS.
Informações relacionadas
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos