Erro kubectl get nodes: você deve estar conectado ao servidor (não autorizado) - como corrigir

Erro kubectl get nodes: você deve estar conectado ao servidor (não autorizado) - como corrigir

Sem alterações na infraestrutura Se eu executar qualquer comando kubectl, ou seja:

kubectl get nodes

eu recebo o erro

You must be logged in to the server (Unauthorized) 

O cluster Kubernetes estava funcionando bem e não fiz nenhuma alteração nele... Alguma ideia de como depurar isso? kubectl não possui sinalizador de depuração -vv od para fornecer mais informações.

Se eu tentar

kubectl version

Client Version: version.Info{Major:"1", Minor:"17", GitVersion:"v1.17.0",
(...) 
error: You must be logged in to the server (the server has asked for the client to provide credentials)

Responder1

No meu caso, o problema começou após a renovação dos certificados kubernates, o que fez com que os existentes ~/.kube/configtivessem chaves e valores de certificado desatualizados.

A solução foi substituir ovalores client-certificate-datae client-key-dataem arquivo ~/.kube/configcom os valores do arquivo atualizado /etc/kubernetes/kubelet.confde mesmo nome.

Responder2

Você pode copiar client-certificate-datae client-key-datapara /etc/kubernetes/admin.confo seu ~/.kube/configarquivo a partir de versões mais recentes do Kubernetes. Veresta respostapara determinar quando seus certificados expiram.

Responder3

Enfrentei um problema semelhante hoje e os comentários acima me ajudaram a resolver o problema. Estou adicionando mais detalhes ao meu cenário porque pode ser útil para pessoas que têm configurações semelhantes.

Tenho um usuário separado para conectar-me ao meu cluster k8s (é um cluster normal em instâncias EC2). Eu criei o usuário arunlal com acesso limitado adicionando ClusterRoleBindings.

Se você receber o seguinte erro ao executar a API no cluster (no meu caso, Kubectl):

error: You must be logged in to the server (Unauthorized)

Siga a seguinte ordem.

- Primeiro verifique o certificado usado no seu arquivo de configuração (cliente local)

Eu tinha uma configuração separada em meu sistema local, porque a configuração principal continha os detalhes sobre as outras credenciais do cluster k8s e okd. Então eu criei uma segunda configuração no meu laptop (/Users/arunlal/.kube/config_two). Neste caso, tenho o seguinte apelido:

alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"

- Deste arquivo você obterá o certificado que estamos utilizando.

[[e-mail protegido]~] gato /Users/arunlal/.kube/config_two| grep -A 5 usuários
Usuários:
- nome: arunlal
  do utilizador:
    certificado do cliente: /Users/arunlal/.arunlal-keys/arunlal.crt
    chave do cliente: /Users/arunlal/.arunlal-keys/arunlal.key

- Depois de obter o certificado na configuração do cliente, você pode verificar a validade usando o comando openssl.

    [[e-mail protegido]~] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt
    notBefore = 22 de junho 23:43:22 2021 GMT
    notAfter = 30 de setembro 23:43:22 2021 GMT

- Validar o vencimento

Ao criar o usuário passei os dias como 5, esse era o problema. Como criei o usuário?

openssl genrsa -out arunlal.key 2048
openssl req -new -key arunlal.key -out arunlal.csr -subj "/CN=arunlal/O=crybit"
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -days 5
kubectl config set-credentials arunlal --client-certificate=/root/arunlal-keys/arunlal.crt  --client-key=/root/arunlal-keys/arunlal.key

- Para corrigir, recriei o certificado com mais dias

openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt
-CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -dias 100

- Precisamos executar isso a partir do cluster k8s.

- Substituiu o certificado localmente.

/Users/arunlal/.arunlal-keys/arunlal.crt modificado com novo certificado.

Espero que isso ajude alguém. Obrigado!

~ arun

Responder4

O certificado kubeconfig pode ter mudado. Se você implantou seu cluster usando terraform. Faça terraform apply para gerar um novo arquivo kubeconfig.

informação relacionada