Error de kubectl al obtener nodos: debe iniciar sesión en el servidor (no autorizado): cómo solucionarlo

Error de kubectl al obtener nodos: debe iniciar sesión en el servidor (no autorizado): cómo solucionarlo

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/configtuvieran claves y valores de certificado obsoletos.

La solución fue reemplazar elvalores client-certificate-datay client-key-dataen un archivo ~/.kube/configcon los valores del archivo actualizado /etc/kubernetes/kubelet.confdel mismo nombre.

Respuesta2

Puede copiar client-certificate-datay client-key-datadesde /etc/kubernetes/admin.confa su ~/.kube/configarchivo 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.

información relacionada