%20-%20so%20beheben%20Sie%20das%20Problem.png)
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/config
veraltete Schlüssel und Zertifikatswerte enthielten.
Die Lösung bestand im Austausch derWerte client-certificate-data
und client-key-data
in einer Datei ~/.kube/config
mit den Werten aus der aktualisierten Datei mit /etc/kubernetes/kubelet.conf
gleichem Namen.
Antwort2
Ab neueren Versionen von Kubernetes können Sie die client-certificate-data
und client-key-data
von /etc/kubernetes/admin.conf
in Ihre Datei kopieren. Siehe~/.kube/config
diese 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.