Kubernetes [error: ningún tipo "CertificateSigningRequest"]

Oct 10 2020

Mientras intento aprobar el certificado para RBAC en Kubernetes, aparece un error.

Creo una solicitud de certificado para Kubernetes para 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

Luego corrí kubectl create -f signing-request.yamly salí

certificadosigningrequest.certificates.k8s.io/student-csr creado

Y luego kubectl get csrmuestra

NOMBRE EDAD NOMBRE DEL SEÑOR CONDICIÓN DEL SOLICITANTE
estudiante-csr 100s kubernetes.io/legacy-unknown minikube-user Pendiente 

Hasta aquí todo bien. Pero el problema ocurrió cuando intenté aprobarlo porkubectl certificate approve student-csr

No se encontraron recursos
error: ningún tipo "CertificateSigningRequest" está registrado para la versión "certificate.k8s.io/v1" en el esquema "k8s.io/kubectl/pkg/scheme/scheme.go:28"

No tengo ni idea de por qué. Traté de buscar pero no hay nada similar a este tipo de error.

Herramientas que estoy usando:

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

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

Cualquier tipo de ayuda muy apreciada.

Gracias de antemano.

Respuestas

6 DavidWer Oct 27 2020 at 16:41

Me enfrenté a este problema mientras estaba ejecutando kubectl versión v1.17 y mi clúster k8s era la versión v1.19:

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

Lo arreglé actualizando mi kubectl a v1.19

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

En las notas de la versión de Kubernetes v1.19 , puede encontrar los siguientes cambios:

La CertificateSigningRequestAPI se promuevecertificates.k8s.io/v1 con los siguientes cambios:

  • spec.signerNameahora es obligatorio y kubernetes.io/legacy-unknownno se permite la creación de solicitudes a través de la certificates.k8s.io/v1API.

  • spec.usages is ahora es obligatorio, no puede contener valores duplicados y solo debe contener usos conocidos

  • status.conditions no puede contener tipos duplicados

  • status.conditions[*].status ahora se requiere

  • status.certificate debe estar codificado en PEM y contener solo bloques CERTIFICATE (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]

Entonces el error que ves:

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

significa que debería usar en apiVersion: certificates.k8s.io/v1lugar de apiVersion: certificates.k8s.io/v1beta1.

Para cambiar las versiones de su API, puede usar el kubectl convertcomando:

Convierta archivos de configuración entre diferentes versiones de API. Se aceptan los formatos YAML y JSON.

El comando toma el nombre de archivo, directorio o URL como entrada y lo convierte al formato de la versión especificada por la --output-versionbandera. Si la versión de destino no está especificada o no es compatible, conviértala a la última versión.

EmreOdabaş Oct 10 2020 at 13:42

Parece que tienes dos versiones de csr. Cambie su versión de estudiante-csr a certificate.k8s.io/v1, supongo que funcionará.

AlexandreBrach Oct 16 2020 at 14:27

El controlador de certificados no está habilitado de forma predeterminada en Minikube, hay un problema abierto: https://github.com/kubernetes/minikube/issues/1647

Esta es la razón por la que puede crear su objeto API pero no puede aprobar el certificado.

Sin embargo, es posible que funcione con parámetros adicionales: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886