%20-%20como%20corrigir.png)
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/config
tivessem chaves e valores de certificado desatualizados.
A solução foi substituir ovalores client-certificate-data
e client-key-data
em arquivo ~/.kube/config
com os valores do arquivo atualizado /etc/kubernetes/kubelet.conf
de mesmo nome.
Responder2
Você pode copiar client-certificate-data
e client-key-data
para /etc/kubernetes/admin.conf
o seu ~/.kube/config
arquivo 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.