Kubernetes [ошибка: нет типа «CertificateSigningRequest»]
Пока я пытаюсь утвердить сертификат для 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
Любая помощь очень ценится.
Заранее спасибо.
Ответы
Я столкнулся с этой проблемой, когда работал с 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
В примечаниях к выпуску 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флагом. Если целевая версия не указана или не поддерживается, конвертируйте в последнюю версию.
Вроде у вас две версии csr. Измените версию student-csr на Certificates.k8s.io/v1, я думаю, это сработает.
Контроллер сертификатов не включен по умолчанию в Minikube, есть открытая проблема: https://github.com/kubernetes/minikube/issues/1647
Это причина, по которой вы можете создать свой объект API, но не можете утвердить сертификат.
Однако можно заставить его работать, используя дополнительные параметры: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886