Kubernetes [erreur: aucun type "CertificateSigningRequest"]

Oct 10 2020

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

6 DavidWer Oct 27 2020 at 16:41

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

Dans les notes de publication de Kubernetes v1.19, vous pouvez trouver les modifications suivantes:

L' CertificateSigningRequestAPI est promuecertificates.k8s.io/v1 avec les modifications suivantes:

  • spec.signerNameest désormais obligatoire et les demandes de kubernetes.io/legacy-unknownne peuvent pas être créées via l' certificates.k8s.io/v1API

  • spec.usages is maintenant requis, ne peut pas contenir de valeurs en double et ne doit contenir que des utilisations connues

  • status.conditions ne peut pas contenir de types en double

  • status.conditions[*].status est maintenant requis

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

EmreOdabaş Oct 10 2020 at 13:42

Il semble que vous ayez deux versions de csr. Changez votre version student-csr en certificates.k8s.io/v1, cela fonctionnera je suppose.

AlexandreBrach Oct 16 2020 at 14:27

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