Kubernetes [error: no kind “CertificateSignedRequest”]

Oct 10 2020

Trong khi cố gắng phê duyệt chứng chỉ cho RBAC trong Kubernetes, tôi gặp lỗi.

Tôi tạo một yêu cầu chứng chỉ cho Kubernetes cho 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

Sau đó, tôi chạy kubectl create -f signing-request.yamlvà ra ngoài là

Certificatingrequest.certificates.k8s.io/student-csr đã được tạo

Và sau đó kubectl get csrcho thấy

TÊN TUỔI SIGNERNAME ĐIỀU KIỆN YÊU CẦU
student-csr 100s kubernetes.io/legacy-unknown minikube-user Đang chờ xử lý 

Càng xa càng tốt. Nhưng sự cố đã xảy ra khi tôi cố gắng phê duyệt nó bằng cáchkubectl certificate approve student-csr

Không tìm thấy tài nguyên
lỗi: không có loại "CertificateSignedRequest" nào được đăng ký cho phiên bản "certificate.k8s.io/v1" trong lược đồ "k8s.io/kubectl/pkg/scheme/scheme.go:28"

Tôi không biết tại sao. Tôi đã cố gắng tìm kiếm nhưng không có gì tương tự như loại lỗi này.

Công cụ tôi đang sử dụng:

  • Minikube: v1.13.1
  • Kubernetes v1.19.2
  • Docker 19.03.12
  • Mac OS: Catalina (10.15.6)

*** Sử dụng minikube với minikube start --container-runtime=docker --vm-driver=virtualbox

Bất kỳ loại giúp đỡ nhiều đánh giá cao

Cảm ơn bạn trước.

Trả lời

6 DavidWer Oct 27 2020 at 16:41

Tôi gặp phải sự cố này khi đang chạy phiên bản kubectl v1.17 và cụm k8s của tôi là phiên bản v1.19:

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

Tôi đã sửa nó bằng cách cập nhật kubectl của mình lên v1.19

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

Trong ghi chú phát hành Kubernetes v1.19, bạn có thể tìm thấy những thay đổi sau:

Các CertificateSigningRequestAPI được thăngcertificates.k8s.io/v1 với những thay đổi sau:

  • spec.signerNamehiện là bắt buộc và các yêu cầu đối với kubernetes.io/legacy-unknownkhông được phép tạo qua certificates.k8s.io/v1API

  • spec.usages is bây giờ là bắt buộc, không được chứa các giá trị trùng lặp và chỉ được chứa các cách sử dụng đã biết

  • status.conditions không được chứa các loại trùng lặp

  • status.conditions[*].status bây giờ là bắt buộc

  • status.certificate phải được mã hóa PEM và chỉ chứa các khối CERTIFICATE (# 91685, @liggitt) [SIG API Machinery, Architecture, Auth, CLI và Testing]

Vì vậy, lỗi bạn thấy:

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

có nghĩa là bạn nên sử dụng apiVersion: certificates.k8s.io/v1thay vì apiVersion: certificates.k8s.io/v1beta1.

Để thay đổi các phiên bản API của mình, bạn có thể sử dụng kubectl convertlệnh:

Chuyển đổi các tệp cấu hình giữa các phiên bản API khác nhau. Cả hai định dạng YAML và JSON đều được chấp nhận.

Lệnh lấy tên tệp, thư mục hoặc URL làm đầu vào và chuyển đổi nó thành định dạng của phiên bản được chỉ định bởi --output-versioncờ. Nếu phiên bản đích không được chỉ định hoặc không được hỗ trợ, hãy chuyển đổi sang phiên bản mới nhất.

EmreOdabaş Oct 10 2020 at 13:42

Có vẻ như bạn có hai phiên bản csr. Thay đổi phiên bản student-csr của bạn thành certificate.k8s.io/v1, tôi đoán nó sẽ hoạt động.

AlexandreBrach Oct 16 2020 at 14:27

Bộ điều khiển chứng chỉ không được bật theo mặc định trong Minikube, đã xảy ra sự cố đã mở: https://github.com/kubernetes/minikube/issues/1647

Đây là lý do tại sao bạn có thể tạo đối tượng API của mình nhưng không thể phê duyệt chứng chỉ.

Tuy nhiên, có thể làm cho nó hoạt động bằng cách sử dụng các thông số bổ sung: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886