Kubernetes [Fehler: keine Art "CertificateSigningRequest"]

Oct 10 2020

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

6 DavidWer Oct 27 2020 at 16:41

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
1 WytrzymałyWiktor Oct 12 2020 at 15:21

In den Versionshinweisen zu Kubernetes v1.19 finden Sie die folgenden Änderungen:

Die CertificateSigningRequestAPI wirdcertificates.k8s.io/v1 mit den folgenden Änderungen hochgestuft:

  • spec.signerNameist jetzt erforderlich, und Anforderungen für kubernetes.io/legacy-unknowndürfen nicht über die certificates.k8s.io/v1API erstellt werden

  • spec.usages is Jetzt erforderlich, darf keine doppelten Werte enthalten und darf nur bekannte Verwendungen enthalten

  • status.conditions darf keine doppelten Typen enthalten

  • status.conditions[*].status ist jetzt erforderlich

  • status.certificate muss 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.

EmreOdabaş Oct 10 2020 at 13:42

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.

AlexandreBrach Oct 16 2020 at 14:27

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