Kubernetes [erreur: aucun type "CertificateSigningRequest"]
Pendant que j'essaie d'approuver le certificat pour RBAC dans Kubernetes, j'obtiens une erreur.
Je crée une demande de certificat pour Kubernetes pour 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
Puis j'ai couru kubectl create -f signing-request.yamlet je suis sorti
Certificatsigningrequest.certificates.k8s.io/student-csr créés
Et puis kubectl get csrmontre
NOM AGE SIGNERNAME DEMANDEUR CONDITION student-csr 100s kubernetes.io/legacy-unknown minikube-user En attente
Jusqu'ici tout va bien. Mais le problème est survenu lorsque j'ai essayé de l'approuver enkubectl certificate approve student-csr
Aucune ressource trouvée erreur: aucun type "CertificateSigningRequest" n'est enregistré pour la version "certificate.k8s.io/v1" dans le schéma "k8s.io/kubectl/pkg/scheme/scheme.go:28"
Je ne sais pas pourquoi. J'ai essayé de chercher mais il n'y a rien de similaire à ce genre d'erreur.
Les outils que j'utilise:
- Minikube: v1.13.1
- Kubernetes v1.19.2
- Docker 19.03.12
- Mac OS: Catalina (10.15.6)
*** Utilisation de minikube avec minikube start --container-runtime=docker --vm-driver=virtualbox
Toute sorte d'aide très appréciée.
Merci en avance.
Réponses
J'ai rencontré ce problème alors que j'exécutais la version v1.17 de kubectl et que mon cluster k8s était la version v1.19:
$ kubectl version --short
Client Version: v1.17.0
Server Version: v1.19.2
Je l'ai corrigé en mettant à jour mon kubectl vers la v1.19
$ kubectl version --short
Client Version: v1.19.0
Server Version: v1.19.2
Dans les notes de publication de Kubernetes v1.19, vous pouvez trouver les modifications suivantes:
L'
CertificateSigningRequestAPI est promuecertificates.k8s.io/v1avec les modifications suivantes:
spec.signerNameest désormais obligatoire et les demandes dekubernetes.io/legacy-unknownne peuvent pas être créées via l'certificates.k8s.io/v1API
spec.usages ismaintenant requis, ne peut pas contenir de valeurs en double et ne doit contenir que des utilisations connues
status.conditionsne peut pas contenir de types en double
status.conditions[*].statusest maintenant requis
status.certificatedoit être codé PEM et contenir uniquement des blocs CERTIFICATE (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]
Donc l'erreur que vous voyez:
no kind "CertificateSigningRequest" is registered for version "certificates.k8s.io/v1"
signifie que vous devriez utiliser à la apiVersion: certificates.k8s.io/v1place de apiVersion: certificates.k8s.io/v1beta1.
Afin de changer vos versions d'API, vous pouvez utiliser la kubectl convertcommande:
Convertissez les fichiers de configuration entre différentes versions d'API. Les formats YAML et JSON sont acceptés.
La commande prend le nom de fichier, le répertoire ou l'URL en entrée et le convertit au format de la version spécifiée par l'
--output-versionindicateur. Si la version cible n'est pas spécifiée ou n'est pas prise en charge, effectuez la conversion vers la dernière version.
Il semble que vous ayez deux versions de csr. Changez votre version student-csr en certificates.k8s.io/v1, cela fonctionnera je suppose.
Le contrôleur de certificats n'est pas activé par défaut dans Minikube, il y a un problème ouvert: https://github.com/kubernetes/minikube/issues/1647
C'est la raison pour laquelle vous pouvez créer votre objet API mais ne pouvez pas approuver le certificat.
Cependant, il peut être possible de le faire fonctionner en utilisant des paramètres supplémentaires: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886