Kubernetes [ошибка: нет типа «CertificateSigningRequest»]

Oct 10 2020

Пока я пытаюсь утвердить сертификат для RBAC в Kubernetes, я получаю сообщение об ошибке.

Создаю запрос сертификата Kubernetes для 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

Затем я побежал kubectl create -f signing-request.yamlи вышел, был

Certificateigningrequest.certificates.k8s.io/student-csr создан

А потом kubectl get csrпоказывает

ИМЯ ВОЗРАСТ ПОДПИСЬ СОСТОЯНИЕ ЗАПРОСА
student-csr 100s kubernetes.io/legacy-unknown minikube-user Ожидание 

Все идет нормально. Но проблема возникла, когда я попытался утвердить ееkubectl certificate approve student-csr

Ресурсы не найдены
ошибка: в схеме k8s.io/kubectl/pkg/scheme/scheme.go:28 для версии «сертификаты.k8s.io/v1» не зарегистрирован вид «CertificateSigningRequest»

Понятия не имею, почему. Я попытался выполнить поиск, но ничего похожего на эту ошибку нет.

Инструменты, которые я использую:

  • Minikube: v1.13.1
  • Kubernetes v1.19.2
  • Докер 19.03.12
  • Mac OS: Catalina (10.15.6).

*** Использование minikube с minikube start --container-runtime=docker --vm-driver=virtualbox

Любая помощь очень ценится.

Заранее спасибо.

Ответы

6 DavidWer Oct 27 2020 at 16:41

Я столкнулся с этой проблемой, когда работал с kubectl версии v1.17, а мой кластер k8s был версией v1.19:

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

Я исправил это, обновив свой kubectl до v1.19

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

В примечаниях к выпуску Kubernetes v1.19 вы можете найти следующие изменения:

В CertificateSigningRequestAPIcertificates.k8s.io/v1 внесены следующие изменения:

  • spec.signerNameтеперь требуется, и запросы для kubernetes.io/legacy-unknownне могут быть созданы через certificates.k8s.io/v1API

  • spec.usages is теперь является обязательным, не может содержать повторяющихся значений и должен содержать только известные способы использования

  • status.conditions не может содержать повторяющиеся типы

  • status.conditions[*].status теперь требуется

  • status.certificate должен иметь кодировку PEM и содержать только блоки CERTIFICATE (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI and Testing]

Итак, вы видите ошибку:

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

означает, что вы должны использовать apiVersion: certificates.k8s.io/v1вместо apiVersion: certificates.k8s.io/v1beta1.

Чтобы изменить свои версии API, вы можете использовать kubectl convertкоманду:

Преобразование файлов конфигурации между разными версиями API. Принимаются форматы YAML и JSON.

Команда принимает имя файла, каталог или URL-адрес в качестве входных данных и преобразует их в формат версии, указанной --output-versionфлагом. Если целевая версия не указана или не поддерживается, конвертируйте в последнюю версию.

EmreOdabaş Oct 10 2020 at 13:42

Вроде у вас две версии csr. Измените версию student-csr на Certificates.k8s.io/v1, я думаю, это сработает.

AlexandreBrach Oct 16 2020 at 14:27

Контроллер сертификатов не включен по умолчанию в Minikube, есть открытая проблема: https://github.com/kubernetes/minikube/issues/1647

Это причина, по которой вы можете создать свой объект API, но не можете утвердить сертификат.

Однако можно заставить его работать, используя дополнительные параметры: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886