Kubernetes [Fehler: keine Art "CertificateSigningRequest"]
Während ich versuche, das Zertifikat für RBAC in Kubernetes zu genehmigen, wird eine Fehlermeldung angezeigt.
Ich erstelle eine Zertifikatsanforderung für Kubernetes für student-csr
apiVersion: certificates.k8s.io/v1beta1
kind: CertificateSigningRequest
metadata:
name: student-csr
spec:
groups:
- system:authenticated
request: <encoded key>
usages:
- digital signature
- key encipherment
- client auth
Dann rannte ich kubectl create -f signing-request.yamlraus und war raus
certificatesigningrequest.certificates.k8s.io/student-csr erstellt
Und dann kubectl get csrzeigt
NAME AGE SIGNERNAME REQUESTOR ZUSTAND student-csr 100s kubernetes.io/legacy-unknown minikube-user Ausstehend
So weit, ist es gut. Aber das Problem trat auf, als ich versuchte, es durch zu genehmigenkubectl certificate approve student-csr
Keine Ressourcen gefunden Fehler: Für die Version "certificates.k8s.io/v1" im Schema "k8s.io/kubectl/pkg/scheme/scheme.go:28" ist keine Art "CertificateSigningRequest" registriert.
Ich habe keine Ahnung warum. Ich habe versucht zu suchen, aber es gibt nichts Ähnliches wie diese Art von Fehler.
Werkzeuge, die ich benutze:
- Minikube: v1.13.1
- Kubernetes v1.19.2
- Docker 19.03.12
- Mac OS: Catalina (10.15.6)
*** Mit Minikube mit minikube start --container-runtime=docker --vm-driver=virtualbox
Jede Art von Hilfe sehr geschätzt.
Danke im Voraus.
Antworten
Ich hatte dieses Problem, als ich kubectl Version v1.17 ausführte und mein k8s-Cluster Version v1.19 war:
$ kubectl version --short
Client Version: v1.17.0
Server Version: v1.19.2
Ich habe es behoben, indem ich mein kubectl auf v1.19 aktualisiert habe
$ kubectl version --short
Client Version: v1.19.0
Server Version: v1.19.2
In den Versionshinweisen zu Kubernetes v1.19 finden Sie die folgenden Änderungen:
Die
CertificateSigningRequestAPI wirdcertificates.k8s.io/v1mit den folgenden Änderungen hochgestuft:
spec.signerNameist jetzt erforderlich, und Anforderungen fürkubernetes.io/legacy-unknowndürfen nicht über diecertificates.k8s.io/v1API erstellt werden
spec.usages isJetzt erforderlich, darf keine doppelten Werte enthalten und darf nur bekannte Verwendungen enthalten
status.conditionsdarf keine doppelten Typen enthalten
status.conditions[*].statusist jetzt erforderlich
status.certificatemuss PEM-codiert sein und nur CERTIFICATE-Blöcke enthalten (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI und Testing]
Also der Fehler, den Sie sehen:
no kind "CertificateSigningRequest" is registered for version "certificates.k8s.io/v1"
bedeutet, dass Sie apiVersion: certificates.k8s.io/v1anstelle von verwenden sollten apiVersion: certificates.k8s.io/v1beta1.
Um Ihre API-Versionen zu ändern, können Sie den folgenden kubectl convertBefehl verwenden:
Konvertieren Sie Konfigurationsdateien zwischen verschiedenen API-Versionen. Es werden sowohl YAML- als auch JSON-Formate akzeptiert.
Der Befehl verwendet den Dateinamen, das Verzeichnis oder die URL als Eingabe und konvertiert sie in das durch das
--output-versionFlag angegebene Format der Version . Wenn die Zielversion nicht angegeben oder nicht unterstützt wird, konvertieren Sie in die neueste Version.
Es scheint, dass Sie zwei Versionen von csr haben. Ändern Sie Ihre student-csr-Version in certificates.k8s.io/v1, es wird funktionieren, denke ich.
Der Zertifikatscontroller ist in Minikube standardmäßig nicht aktiviert. Es ist ein Problem aufgetreten: https://github.com/kubernetes/minikube/issues/1647
Aus diesem Grund können Sie Ihr API-Objekt erstellen, das Zertifikat jedoch nicht genehmigen.
Es kann jedoch möglich sein, dass es mit zusätzlichen Parametern funktioniert: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886