ฉันกำลังเรียนรู้วิธีใช้ kyverno เพื่อสร้างนโยบาย แต่ฉันประสบปัญหาเล็กน้อยในการทำความเข้าใจพฤติกรรมบางอย่าง:
สถานการณ์แรกของฉันคือฉันต้องการบล็อกทรัพยากรบางอย่างที่อาจมีหรือไม่มีการตั้งค่า spec.tier
หากมีการตั้งค่าและแตกต่างจาก 'แอปพลิเคชัน' ฉันต้องการให้บล็อก หากไม่ได้ตั้งค่าไว้ ควรอนุญาต ดังนั้นฉันจึงลองสิ่งนี้:
apiVersion: kyverno.io/v1
ประเภท: ClusterPolicy
ข้อมูลเมตา:
ชื่อ: การทดสอบบล็อกระดับ
ข้อมูลจำเพาะ:
การตรวจสอบความล้มเหลวการดำเนินการ: บังคับใช้
พื้นหลัง: เท็จ
กฎ:
- ชื่อ: การทดสอบบล็อกระดับ
จับคู่:
ใดๆ:
- ทรัพยากร:
ชนิด:
- crd.antrea.io/v1alpha1/NetworkPolicy
เงื่อนไขเบื้องต้น:
ใดๆ:
- คีย์: "{{request.object.spec.tier || 'แอปพลิเคชัน'}}"
ตัวดำเนินการ: NotEquals
ค่า: ใบสมัคร
ตรวจสอบความถูกต้อง:
ข้อความ: "Antrea namespaced ANP สามารถใช้ได้เฉพาะในระดับ: แอปพลิเคชัน"
ปฏิเสธ: {}
นโยบายทำงานตามที่คาดไว้ตราบเท่าที่มีระดับที่กำหนดไว้ใน yaml
ยอมรับหากมีระดับ: แอปพลิเคชัน
apiVersion: crd.antrea.io/v1alpha1
ชนิด: NetworkPolicy
ข้อมูลเมตา:
ชื่อ: ทดสอบ-np
ข้อมูลจำเพาะ:
ชั้น: ใบสมัคร
ปฏิเสธถ้ามีระดับ: อย่างอื่น
apiVersion: crd.antrea.io/v1alpha1
ชนิด: NetworkPolicy
ข้อมูลเมตา:
ชื่อ: ทดสอบ-np
ข้อมูลจำเพาะ:
ชั้น: ฉุกเฉิน
แต่ยังปฏิเสธหากไม่มีการตั้งค่า spec.tier ซึ่งฉันไม่ได้คาดหวังเนื่องจากค่าเริ่มต้นหากไม่มีอยู่คือ "แอปพลิเคชัน" ต่อคีย์: "{{request.object.spec.tier || 'แอปพลิเคชัน'}}"
ฉันควรเปลี่ยนอะไรเพื่อให้ทำงานได้ตามที่คาดไว้