Kubernetes [error: no kind “CertificateSignedRequest”]
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
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
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/v1với những thay đổi sau:
spec.signerNamehiện là bắt buộc và các yêu cầu đối vớikubernetes.io/legacy-unknownkhông được phép tạo quacertificates.k8s.io/v1API
spec.usages isbâ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.conditionskhông được chứa các loại trùng lặp
status.conditions[*].statusbây giờ là bắt buộc
status.certificatephả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.
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.
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