Kubernetes [error: ningún tipo "CertificateSigningRequest"]
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
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
En las notas de la versión de Kubernetes v1.19 , puede encontrar los siguientes cambios:
La
CertificateSigningRequestAPI se promuevecertificates.k8s.io/v1con los siguientes cambios:
spec.signerNameahora es obligatorio ykubernetes.io/legacy-unknownno se permite la creación de solicitudes a través de lacertificates.k8s.io/v1API.
spec.usages isahora es obligatorio, no puede contener valores duplicados y solo debe contener usos conocidos
status.conditionsno puede contener tipos duplicados
status.conditions[*].statusahora se requiere
status.certificatedebe 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.
Parece que tienes dos versiones de csr. Cambie su versión de estudiante-csr a certificate.k8s.io/v1, supongo que funcionará.
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