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 รอดำเนินการ
จนถึงตอนนี้ดีมาก แต่ปัญหาเกิดขึ้นเมื่อฉันพยายามอนุมัติโดยkubectl certificate approve student-csr
ไม่พบทรัพยากร ข้อผิดพลาด: ไม่มีการลงทะเบียน "CertificateSigningRequest" สำหรับเวอร์ชัน "certificate.k8s.io/v1" ในรูปแบบ "k8s.io/kubectl/pkg/scheme/scheme.go:28"
ฉันไม่รู้เลยว่าทำไม ฉันพยายามค้นหา แต่ไม่มีอะไรคล้ายกับข้อผิดพลาดประเภทนี้
เครื่องมือที่ฉันใช้:
- Minikube: v1.13.1
- Kubernetes v1.19.2
- นักเทียบท่า 19.03.12.2019
- ระบบปฏิบัติการ Mac: 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.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 ของคุณเป็น certificate.k8s.io/v1 ฉันเดาว่าจะได้ผล
ตัวควบคุมใบรับรองไม่ได้เปิดใช้งานโดยค่าเริ่มต้นใน Minikube มีปัญหาที่เปิดอยู่: https://github.com/kubernetes/minikube/issues/1647
นี่คือเหตุผลที่คุณสามารถสร้างออบเจ็กต์ API ของคุณ แต่ไม่สามารถอนุมัติใบรับรองได้
อย่างไรก็ตามอาจเป็นไปได้ที่จะทำให้ใช้งานได้โดยใช้พารามิเตอร์เสริม: https://github.com/kubernetes/minikube/issues/1647#issuecomment-311138886