Ir para o conteúdo

Por que não consigo me conectar ao meu cluster do Amazon EKS?

6 minuto de leitura
0

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 seu cluster do Amazon EKS por um dos seguintes motivos:

  • Você não criou o arquivo kubeconfig para o seu cluster.
  • Não é possível conectar-se ao endpoint do servidor de APIs do Amazon EKS.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Você não criou o arquivo kubeconfig

Depois de criar seu cluster do Amazon EKS, configure seu arquivo kubeconfig para que seja possível usar a linha de comandos kubectl para se conectar ao seu cluster. O arquivo kubeconfig contém sua configuração de cluster do Kubernetes.

Com base no seu sistema operacional (SO), é possível encontrar seu arquivo kubeconfig nos seguintes locais:

  • Para Linux ou macOS, acesse $HOME/.kube/config.
  • Para Windows, acesse %USERPROFILE%\.kube\config.

Para usar um local de arquivo diferente, execute uma das seguintes ações:

  • Defina a variável de ambiente KUBECONFIG para apontar para o novo local.
  • Use a sinalização --kubeconfig ao executar os comandos kubectl para especificar um caminho de arquivo personalizado.

Se um arquivo kubeconfig já existir no local padrão, o Amazon EKS mesclará novas configurações com o arquivo existente. É possível usar o comando kubectl config para gerenciar seus contextos de cluster. Para obter mais informações, consulte kubectl config no site do Kubernetes.

Não é possível conectar-se ao endpoint do servidor de APIs do Amazon EKS

Para solucionar esse problema, conclua as seguintes etapas:

  1. Para verificar se é possível se conectar à URL do servidor de API do Amazon EKS, execute o seguinte comando com maior detalhamento:

    kubectl get svc --v=9

    A saída do comando mostra informações detalhadas da conexão, incluindo a URL do servidor de API que sua conexão usa. Verifique os endereços IP listados para HTTP Trace: Pesquisa de DNS.
    Exemplo de saída:

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 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. Para verificar se o servidor de API do Amazon EKS está acessível publicamente, execute o seguinte comando describe-cluster da AWS CLI:

    aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

    Observação: Substitua cluster_name pelo nome do seu cluster e example_region pela sua região da AWS.
    Exemplo de saída:

    {    "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"
        ]
    }

    Para permitir o acesso público, certifique-se de que endpointPublicAccess seja verdadeiro. Para manter o acesso privado, certifique-se de que endpointPublicAccess seja falso. Se endpointPublicAccess for falso, vá para a etapa 9. Se o endpointPublicAccess for verdadeiro, é uma prática recomendada de segurança limitar o endpointPublicAccess a intervalos específicos de endereços IP. Conclua as etapas 3 a 8 para adicionar seus endereços IP permitidos à lista de permissões publicAccessCidrs.

  3. Abra o console do Amazon EKS.

  4. Selecione Clusters e selecione o cluster que você deseja atualizar.

  5. Selecione a guia Rede e depois clique em Gerenciar redes.

  6. Selecione Público.

  7. Em Configurações avançadas, em bloco CIDR, insira o intervalo de CIDR público que você deseja adicionar à lista de permissões.
    Importante: Inclua o endereço IP do gateway NAT que os nós de processamento em suas sub-redes privadas usam para acessar a internet. Além disso, inclua os endereços IP de todos os componentes de rede do dispositivo NAT.

  8. Selecione Salvar alterações.

  9. Se você configurou o servidor de API do cluster no modo somente privado, verifique se a solicitação kubectl vem da rede do cluster. Se sua solicitação kubectl for de fora da sua Amazon Virtual Private Cloud (Amazon VPC), você receberá o seguinte erro de tempo limite ao executar o comando get svc:

    $ kubectl get svc --v=9I0110 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
  10. Atualize o grupo de segurança do cluster para adicionar o endereço IP de origem ou o intervalo CIDR à sua lista de permissões. Isso permite que o cliente kubectl se conecte ao endpoint do servidor de API do Amazon EKS de dentro da VPC do cluster.

Informações relacionadas

Solucionar problemas com clusters e nós do Amazon EKS

Como resolvo o erro quando me conecto ao servidor de APIs do Amazon EKS?"You must be logged in to the server (Unauthorized)"

De-mystifying cluster networking for Amazon EKS worker nodes [Desmistificando a rede de clusters para nós de processamento do Amazon EKS]

Como faço para bloquear o acesso à API de endereços IP específicos no meu cluster do Amazon EKS?

AWS OFICIALAtualizada há 4 meses