Kubernetes [erro: nenhum tipo “CertificateSigningRequest”]

Oct 10 2020

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

6 DavidWer Oct 27 2020 at 16:41

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

Nas notas da versão do Kubernetes v1.19, você pode encontrar as seguintes alterações:

A CertificateSigningRequestAPI é promovidacertificates.k8s.io/v1 com as seguintes alterações:

  • spec.signerNameagora é obrigatório, e as solicitações de kubernetes.io/legacy-unknownnão podem ser criadas por meio da certificates.k8s.io/v1API

  • spec.usages is agora obrigatório, não pode conter valores duplicados e deve conter apenas usos conhecidos

  • status.conditions não pode conter tipos duplicados

  • status.conditions[*].status agora é necessário

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

EmreOdabaş Oct 10 2020 at 13:42

Parece que você tem duas versões do csr. Mude sua versão de aluno-csr para certificados.k8s.io/v1, acho que funcionará.

AlexandreBrach Oct 16 2020 at 14:27

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