Kubernetes [errore: nessun tipo di "CertificateSigningRequest"]
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
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
Nelle note di rilascio di Kubernetes v1.19 puoi trovare le seguenti modifiche:
L'
CertificateSigningRequestAPI viene promossacertificates.k8s.io/v1con le seguenti modifiche:
spec.signerNameè ora obbligatorio e le richieste dikubernetes.io/legacy-unknownnon possono essere create tramite l'certificates.k8s.io/v1API
spec.usages isora richiesto, non può contenere valori duplicati e deve contenere solo utilizzi noti
status.conditionsnon può contenere tipi duplicati
status.conditions[*].statusè ora richiesto
status.certificatedeve 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.
Sembra che tu abbia due versioni di csr. Cambia la tua versione student-csr in certificates.k8s.io/v1, suppongo funzionerà.
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