Kubernetes [오류 : 'CertificateSigningRequest'종류 없음]

Oct 10 2020

Kubernetes에서 RBAC에 대한 인증서를 승인하는 동안 오류가 발생합니다.

student-csr 용 Kubernetes에 대한 인증서 요청을 생성합니다.

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났다.

certificatesigningrequest.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"체계의 "certificates.k8s.io/v1"버전에 대해 "CertificateSigningRequest"종류가 등록되지 않았습니다.

왜 그런지 모르겠습니다. 나는 검색을 시도했지만 이런 종류의 오류와 비슷한 것은 없습니다.

내가 사용하는 도구 :

  • Minikube : v1.13.1
  • Kubernetes v1.19.2
  • Docker 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를 릴리스 노트 다음과 같은 변화를 찾을 수 있습니다 :

CertificateSigningRequestAPI가로 승격certificates.k8s.io/v1 다음 변경 :

  • spec.signerName이제는 필수이며에 대한 요청 kubernetes.io/legacy-unknowncertificates.k8s.io/v1API 를 통해 생성 할 수 없습니다.

  • spec.usages is 이제 필수이며 중복 값을 포함 할 수 없으며 알려진 사용법 만 포함해야합니다.

  • status.conditions 중복 유형을 포함 할 수 없습니다.

  • status.conditions[*].status 이제 필수입니다

  • status.certificate PEM으로 인코딩되어야하며 CERTIFICATE 블록 (# 91685, @liggitt) 만 포함해야합니다. [SIG API 기계, 아키텍처, 인증, CLI 및 테스트]

따라서 표시되는 오류 :

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 버전을 certificate.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