Kubernetes [오류 : 'CertificateSigningRequest'종류 없음]
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
어떤 종류의 도움이라도 대단히 감사합니다.
미리 감사드립니다.
답변
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를 릴리스 노트 다음과 같은 변화를 찾을 수 있습니다 :
CertificateSigningRequestAPI가로 승격certificates.k8s.io/v1다음 변경 :
spec.signerName이제는 필수이며에 대한 요청kubernetes.io/legacy-unknown은certificates.k8s.io/v1API 를 통해 생성 할 수 없습니다.
spec.usages is이제 필수이며 중복 값을 포함 할 수 없으며 알려진 사용법 만 포함해야합니다.
status.conditions중복 유형을 포함 할 수 없습니다.
status.conditions[*].status이제 필수입니다
status.certificatePEM으로 인코딩되어야하며 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플래그에 지정된 버전 형식으로 변환합니다 . 대상 버전이 지정되지 않았거나 지원되지 않는 경우 최신 버전으로 변환하십시오.
두 가지 버전의 csr이있는 것 같습니다. student-csr 버전을 certificate.k8s.io/v1로 변경하면 작동합니다.
Minikube에서는 인증서 컨트롤러가 기본적으로 활성화되어 있지 않습니다. https://github.com/kubernetes/minikube/issues/1647
이것이 API 개체를 만들 수 있지만 인증서를 승인 할 수없는 이유입니다.
그러나 추가 매개 변수를 사용하여 작동하도록 할 수 있습니다. https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886