%3A%20c%C3%B3mo%20solucionarlo.png)
Sin cambios en infraestructura Si ejecuto algún comando de kubectl, es decir:
kubectl get nodes
me sale el error
You must be logged in to the server (Unauthorized)
El clúster de Kubernetes estaba funcionando bien y no le hice cambios... ¿Alguna idea de cómo depurar esto? kubectl no tiene el indicador de depuración -vv od para proporcionar más información.
si lo intento
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)
Respuesta1
En mi caso, el problema comenzó después de renovar los certificados de Kubernates, lo que provocó que los existentes ~/.kube/config
tuvieran claves y valores de certificado obsoletos.
La solución fue reemplazar elvalores client-certificate-data
y client-key-data
en un archivo ~/.kube/config
con los valores del archivo actualizado /etc/kubernetes/kubelet.conf
del mismo nombre.
Respuesta2
Puede copiar client-certificate-data
y client-key-data
desde /etc/kubernetes/admin.conf
a su ~/.kube/config
archivo a partir de versiones más recientes de Kubernetes. Veresta respuestapara determinar cuándo caducan sus certificados.
Respuesta3
Me enfrenté a un problema similar hoy y los comentarios anteriores me ayudaron a solucionarlo. Estoy agregando más detalles a mi escenario porque podría ser útil para las personas que tienen configuraciones similares.
Tengo un usuario independiente para conectarme a mi clúster k8s (es un clúster normal en instancias EC2). Creé el usuario arunlal con acceso limitado agregando ClusterRoleBindings.
Si recibe el siguiente error al ejecutar la API en el clúster (en mi caso Kubectl):
error: You must be logged in to the server (Unauthorized)
Siga el siguiente orden.
- Primero verifique el certificado utilizado en su archivo de configuración (cliente local)
Tenía una configuración separada en mi sistema local, porque la configuración principal tenía los detalles sobre las otras credenciales del clúster k8s y okd. Entonces creé una segunda configuración en mi computadora portátil (/Users/arunlal/.kube/config_two). En este caso tengo los siguientes alias:
alias kctl="kubectl --kubeconfig=/Users/arunlal/.kube/config_two"
- De este archivo obtendrá el certificado que estamos utilizando.
[[correo electrónico protegido]~] gato /Users/arunlal/.kube/config_two| grep -A 5 usuarios usuarios: - nombre: arunlal usuario: certificado de cliente: /Users/arunlal/.arunlal-keys/arunlal.crt clave-cliente: /Users/arunlal/.arunlal-keys/arunlal.key
- Una vez que obtenga el certificado en la configuración de su cliente, puede verificar la validez usando el comando openssl.
[[correo electrónico protegido]~] openssl x509 -noout -dates -in /Users/arunlal/.arunlal-keys/arunlal.crt notBefore=22 de junio 23:43:22 2021 GMT notAfter=30 de septiembre 23:43:22 2021 GMT
- Validar el vencimiento
Al crear el usuario pasé los días como 5, ese fue el problema. ¿Cómo creé el usuario?
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 solucionarlo, recreé el certificado con más días.
openssl x509 -req -in arunlal.csr -CA /etc/kubernetes/pki/ca.crt -CAkey /etc/kubernetes/pki/ca.key -CAcreateserial -out arunlal.crt -días 100
- Esto debemos ejecutarlo desde el clúster k8s.
- Se reemplazó el certificado localmente.
Modificado /Users/arunlal/.arunlal-keys/arunlal.crt con nuevo certificado.
Espero que esto ayude a alguien. ¡Gracias!
~ arun
Respuesta4
Es posible que el certificado de kubeconfig haya cambiado. Si implementó su clúster usando terraform. Realice terraform apply para generar un nuevo archivo kubeconfig.