Kubernetes [erro: nenhum tipo “CertificateSigningRequest”]
Enquanto tento aprovar o certificado para RBAC no Kubernetes, estou recebendo um erro.
Eu crio uma solicitação de certificado para Kubernetes para aluno-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
Então eu corri kubectl create -f signing-request.yamle coloquei foi
certificadosigningrequest.certificates.k8s.io/student-csr criado
E então kubectl get csrmostra
NOME IDADE SIGNERNAME REQUESTOR CONDITION student-csr 100s kubernetes.io/legacy-unknown minikube-user Pendente
Até agora tudo bem. Mas o problema ocorreu quando tentei aprová-lo porkubectl certificate approve student-csr
Nenhum recurso encontrado erro: nenhum tipo "CertificateSigningRequest" está registrado para a versão "certificates.k8s.io/v1" no esquema "k8s.io/kubectl/pkg/scheme/scheme.go:28"
Não tenho ideia do porquê. Tentei pesquisar, mas não há nada semelhante a esse tipo de erro.
Ferramentas que estou usando:
- Minikube: v1.13.1
- Kubernetes v1.19.2
- Docker 19.03.12
- Mac OS: Catalina (10.15.6)
*** Usando minikube com minikube start --container-runtime=docker --vm-driver=virtualbox
Qualquer tipo de ajuda muito apreciada.
Agradeço antecipadamente.
Respostas
Eu enfrentei esse problema enquanto estava executando o kubectl versão v1.17 e meu cluster k8s era a versão v1.19:
$ kubectl version --short
Client Version: v1.17.0
Server Version: v1.19.2
I fixa-lo por atualizar meu kubectl para v1.19
$ kubectl version --short
Client Version: v1.19.0
Server Version: v1.19.2
Nas notas da versão do Kubernetes v1.19, você pode encontrar as seguintes alterações:
A
CertificateSigningRequestAPI é promovidacertificates.k8s.io/v1com as seguintes alterações:
spec.signerNameagora é obrigatório, e as solicitações dekubernetes.io/legacy-unknownnão podem ser criadas por meio dacertificates.k8s.io/v1API
spec.usages isagora obrigatório, não pode conter valores duplicados e deve conter apenas usos conhecidos
status.conditionsnão pode conter tipos duplicados
status.conditions[*].statusagora é necessário
status.certificatedeve ser codificado por PEM e conter apenas blocos CERTIFICADOS (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]
Então, o erro que você vê:
no kind "CertificateSigningRequest" is registered for version "certificates.k8s.io/v1"
significa que você deve usar em apiVersion: certificates.k8s.io/v1vez de apiVersion: certificates.k8s.io/v1beta1.
Para alterar as versões da API, você pode usar o kubectl convertcomando:
Converta arquivos de configuração entre diferentes versões de API. Os formatos YAML e JSON são aceitos.
O comando pega o nome do arquivo, diretório ou URL como entrada e converte-o no formato da versão especificada pelo
--output-versionsinalizador. Se a versão de destino não for especificada ou não for compatível, converta para a versão mais recente.
Parece que você tem duas versões do csr. Mude sua versão de aluno-csr para certificados.k8s.io/v1, acho que funcionará.
O controlador de certificados não está habilitado por padrão no Minikube, há um problema aberto: https://github.com/kubernetes/minikube/issues/1647
Este é o motivo pelo qual você pode criar seu objeto API, mas não pode aprovar o certificado.
No entanto, pode ser possível fazê-lo funcionar usando parâmetros extras: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886