kubectl get nodes error: Sie müssen beim Server angemeldet sein (Nicht autorisiert) - so beheben Sie das Problem

kubectl get nodes error: Sie müssen beim Server angemeldet sein (Nicht autorisiert) - so beheben Sie das Problem

Ohne Änderungen in der Infrastruktur. Wenn ich einen beliebigen Kubectl-Befehl ausführe, z. B.:

kubectl get nodes

Ich erhalte den Fehler

You must be logged in to the server (Unauthorized) 

Der Kubernetes-Cluster funktionierte einwandfrei und ich habe keine Änderungen daran vorgenommen ... Irgendwelche Ideen, wie man das debuggen kann? kubectl hat kein -vv od-Debug-Flag, um weitere Informationen bereitzustellen.

Wenn ich es versuche

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)

Antwort1

In meinem Fall begann das Problem nach der Erneuerung der Kubernate-Zertifikate, was dazu führte, dass die vorhandenen Zertifikate ~/.kube/configveraltete Schlüssel und Zertifikatswerte enthielten.

Die Lösung bestand im Austausch derWerte client-certificate-dataund client-key-datain einer Datei ~/.kube/configmit den Werten aus der aktualisierten Datei mit /etc/kubernetes/kubelet.confgleichem Namen.

Antwort2

Ab neueren Versionen von Kubernetes können Sie die client-certificate-dataund client-key-datavon /etc/kubernetes/admin.confin Ihre Datei kopieren. Siehe~/.kube/configdiese Antwortum festzustellen, wann Ihre Zertifikate ablaufen.

Antwort3

Ich hatte heute ein ähnliches Problem und die obigen Kommentare haben mir geholfen, das Problem zu beheben. Ich füge meinem Szenario weitere Details hinzu, da dies für Personen mit ähnlichen Einstellungen hilfreich sein könnte.

Ich habe einen separaten Benutzer für die Verbindung mit meinem K8S-Cluster (es ist ein normaler Cluster in EC2-Instanzen). Ich habe den Benutzer arunlal mit eingeschränktem Zugriff erstellt, indem ich ClusterRoleBindings hinzugefügt habe.

Wenn beim Ausführen der API zum Cluster (in meinem Fall Kubectl) der folgende Fehler auftritt:

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

Gehen Sie die folgende Reihenfolge durch.

- Überprüfen Sie zuerst das in Ihrer Konfigurationsdatei verwendete Zertifikat (lokaler Client).

Ich hatte eine separate Konfiguration auf meinem lokalen System, da die Hauptkonfiguration die Details zu den anderen K8s- und OKD-Cluster-Anmeldeinformationen enthielt. Daher habe ich eine zweite Konfiguration auf meinem Laptop erstellt (/Users/arunlal/.kube/config_two). In diesem Fall habe ich die folgenden Aliase:

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

- Aus dieser Datei erhalten Sie das von uns verwendete Zertifikat.

[[email geschützt]~] cat /Benutzer/arunlal/.kube/config_two| grep -A 5 Benutzer
Benutzer:
- Name: Arunlal
  Benutzer:
    Client-Zertifikat: /Users/arunlal/.arunlal-keys/arunlal.crt
    Client-Schlüssel: /Users/arunlal/.arunlal-keys/arunlal.key

– Sobald Sie das Zertifikat in Ihrer Client-Konfiguration haben, können Sie die Gültigkeit mit dem Befehl openssl überprüfen.

    [[email geschützt]~] openssl x509 -noout -dates -in /Benutzer/arunlal/.arunlal-keys/arunlal.crt
    nicht vorher=22. Juni 2021, 23:43:22 GMT
    nichtNach=30. Sept. 2021, 23:43:22 GMT

- Bestätigen Sie das Ablaufdatum

Beim Erstellen des Benutzers habe ich die Tage als 5 angegeben, das war das Problem. Wie habe ich den Benutzer erstellt?

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

- Um das zu beheben, habe ich das Zertifikat mit einer höheren Anzahl an Tagen neu erstellt

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

– Dies müssen wir vom K8s-Cluster aus ausführen.

- Das Zertifikat lokal ersetzt.

/Users/arunlal/.arunlal-keys/arunlal.crt mit neuem Zertifikat geändert.

Hoffe, das hilft jemandem. Danke!

~ arun

Antwort4

Das Kubeconfig-Zertifikat hat sich möglicherweise geändert. Wenn Sie Ihren Cluster mit Terraform bereitgestellt haben. Führen Sie „Terraform Apply“ aus, um eine neue Kubeconfig-Datei zu generieren.

verwandte Informationen