Tôi đang học cách sử dụng kyverno để xây dựng một số chính sách, nhưng tôi đang gặp một số vấn đề để hiểu một số hành vi:
Kịch bản đầu tiên của tôi là tôi muốn chặn một số tài nguyên có thể có hoặc không có bộ spec.tier.
Nếu nó được đặt và nó khác với 'Ứng dụng', tôi muốn nó bị chặn. Nếu nó không được đặt thì nó sẽ được cho phép. Vì vậy, tôi đã thử điều này:
phiên bản api: kyverno.io/v1
loại: ClusterPolicy
metadata:
tên: kiểm tra-khối-tầng
thông số kỹ thuật:
xác thựcFailureAction: thi hành
nền: sai
quy tắc:
- tên: kiểm tra-khối-tầng
trận đấu:
không tí nào:
- tài nguyên:
các loại:
- crd.antrea.io/v1alpha1/NetworkPolicy
điều kiện tiên quyết:
không tí nào:
- khóa: "{{request.object.spec.tier || 'Ứng dụng'}}"
toán tử: NotEquals
giá trị: Ứng dụng
xác thực:
thông báo: "Antrea namespace ANP chỉ có thể được sử dụng trên cấp: Ứng dụng"
phủ nhận: {}
Chính sách hoạt động như mong đợi khi có cấp được đặt trong yaml.
Chấp nhận nếu có cấp: Ứng dụng
apiVersion: crd.antrea.io/v1alpha1
loại: NetworkPolicy
metadata:
tên: kiểm tra-np
thông số kỹ thuật:
bậc: Ứng dụng
Từ chối nếu có cấp: bất cứ điều gì khác
apiVersion: crd.antrea.io/v1alpha1
loại: NetworkPolicy
metadata:
tên: kiểm tra-np
thông số kỹ thuật:
cấp độ: Khẩn cấp
Nhưng cũng từ chối nếu không có bộ spec.tier mà tôi không mong đợi vì mặc định nếu không tồn tại là "Ứng dụng" trên mỗi khóa: "{{request.object.spec.tier || 'Ứng dụng'}}".
Tôi nên thay đổi những gì để nó hoạt động như mong đợi?