Kubernetes [errore: nessun tipo di "CertificateSigningRequest"]

Oct 10 2020

Mentre cerco di approvare il certificato per RBAC in Kubernetes, ricevo un errore.

Creo una richiesta di certificato per Kubernetes per 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

Poi sono corso kubectl create -f signing-request.yamle fuori posto è stato

certificateigningrequest.certificates.k8s.io/student-csr creato

E poi kubectl get csrmostra

NOME ETA NOME NOME RICHIESTA CONDIZIONE
student-csr 100s kubernetes.io/legacy-unknown minikube-user In attesa 

Fin qui tutto bene. Ma il problema si è verificato quando ho provato ad approvarlo dakubectl certificate approve student-csr

Nessuna risorsa trovata
errore: nessun tipo "CertificateSigningRequest" è registrato per la versione "certificates.k8s.io/v1" nello schema "k8s.io/kubectl/pkg/scheme/scheme.go:28"

Non ho idea del perché. Ho provato a cercare ma non c'è niente di simile a questo tipo di errore.

Strumenti che sto utilizzando:

  • Minikube: v1.13.1
  • Kubernetes v1.19.2
  • Docker 19.03.12
  • Mac OS: Catalina (10.15.6)

*** Utilizzando minikube con minikube start --container-runtime=docker --vm-driver=virtualbox

Qualsiasi tipo di aiuto molto apprezzato.

Grazie in anticipo.

Risposte

6 DavidWer Oct 27 2020 at 16:41

Ho riscontrato questo problema mentre eseguivo la versione kubectl v1.17 e il mio cluster k8s era la versione v1.19:

$ kubectl version --short
Client Version: v1.17.0
Server Version: v1.19.2

L'ho risolto aggiornando il mio kubectl alla v1.19

$ kubectl version --short
 Client Version: v1.19.0
 Server Version: v1.19.2
1 WytrzymałyWiktor Oct 12 2020 at 15:21

Nelle note di rilascio di Kubernetes v1.19 puoi trovare le seguenti modifiche:

L' CertificateSigningRequestAPI viene promossacertificates.k8s.io/v1 con le seguenti modifiche:

  • spec.signerNameè ora obbligatorio e le richieste di kubernetes.io/legacy-unknownnon possono essere create tramite l' certificates.k8s.io/v1API

  • spec.usages is ora richiesto, non può contenere valori duplicati e deve contenere solo utilizzi noti

  • status.conditions non può contenere tipi duplicati

  • status.conditions[*].status è ora richiesto

  • status.certificate deve essere codificato PEM e contenere solo blocchi CERTIFICATE (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]

Quindi l'errore che vedi:

no kind "CertificateSigningRequest" is registered for version "certificates.k8s.io/v1"

significa che dovresti usare apiVersion: certificates.k8s.io/v1invece di apiVersion: certificates.k8s.io/v1beta1.

Per modificare le versioni dell'API puoi utilizzare il kubectl convertcomando:

Converti file di configurazione tra diverse versioni API. Sono accettati sia i formati YAML che JSON.

Il comando accetta il nome del file, la directory o l'URL come input e lo converte nel formato della versione specificata dal --output-versionflag. Se la versione di destinazione non è specificata o non è supportata, converti alla versione più recente.

EmreOdabaş Oct 10 2020 at 13:42

Sembra che tu abbia due versioni di csr. Cambia la tua versione student-csr in certificates.k8s.io/v1, suppongo funzionerà.

AlexandreBrach Oct 16 2020 at 14:27

Il controller dei certificati non è abilitato per impostazione predefinita in Minikube, c'è un problema aperto: https://github.com/kubernetes/minikube/issues/1647

Questo è il motivo per cui puoi creare il tuo oggetto API ma non puoi approvare il certificato.

Tuttavia, potrebbe essere possibile farlo funzionare utilizzando parametri extra: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886