Я изучаю, как использовать kyverno для создания некоторых политик, но столкнулся с несколькими проблемами, чтобы понять некоторое поведение:
Мой первый сценарий: я хочу заблокировать некоторый ресурс, который может иметь или не иметь набор spec.tier.
Если он установлен и отличается от «Приложения», я хочу, чтобы он был заблокирован. Если он не установлен, он должен быть разрешен. Итак, я попробовал это:
версия API: kyverno.io/v1
вид: КластерПолици
метаданные:
имя: уровень тестового блока
спецификация:
validationFailureAction: применить
фон: ложь
правила:
- имя: уровень тестового блока
соответствовать:
Любые:
- Ресурсы:
виды:
- crd.antrea.io/v1alpha1/NetworkPolicy
предпосылки:
Любые:
- ключ: "{{request.object.spec.tier || 'Приложение'}}"
оператор: неравно
значение: Приложение
подтвердить:
сообщение: «ANP с пространством имен Antrea можно использовать только на уровне: Приложение»
Отрицать: {}
Политика работает должным образом, если в yaml установлен уровень.
Принимается, если есть уровень: Приложение
apiVersion: crd.antrea.io/v1alpha1
вид: NetworkPolicy
метаданные:
имя: тест-НП
спецификация:
уровень: приложение
Отказывается, если есть уровень: что-нибудь еще
apiVersion: crd.antrea.io/v1alpha1
вид: NetworkPolicy
метаданные:
имя: тест-НП
спецификация:
уровень: Чрезвычайная ситуация
Но также отказывается, если нет набора spec.tier, которого я не ожидал, поскольку по умолчанию, если он не существует, используется «Приложение» для каждого ключа: «{{request.object.spec.tier || 'Приложение'}}».
Что я должен изменить, чтобы заставить его работать, как ожидалось?