Învăț cum să folosesc kyverno pentru a construi unele politici, dar mă confrunt cu câteva probleme pentru a înțelege un anumit comportament:
Primul meu scenariu este că vreau să blochez o resursă care poate avea sau nu setul de spec.tier.
Dacă este setat și este diferit de „Aplicație”, vreau să fie blocat. Dacă nu este setat, ar trebui să fie permis. Deci am incercat asta:
apiVersion: kyverno.io/v1
fel: ClusterPolicy
metadate:
nume: test-block-tier
specificație:
validationFailureAction: aplica
fundal: fals
reguli:
- nume: test-block-tier
Meci:
orice:
- resurse:
feluri:
- crd.antrea.io/v1alpha1/NetworkPolicy
preconditii:
orice:
- cheie: „{{request.object.spec.tier || „Aplicație”}}”
operator: NotEquals
valoare: Aplicație
valida:
mesaj: „ANP cu spații de nume Antrea poate fi utilizat numai pe nivelul: Aplicație”
nega: {}
Politica funcționează conform așteptărilor, în măsura în care există nivelul setat în yaml.
Acceptă dacă au nivelul: Aplicație
apiVersion: crd.antrea.io/v1alpha1
fel: NetworkPolicy
metadate:
nume: test-np
specificație:
nivel: Aplicație
Refuză dacă are nivel: orice altceva
apiVersion: crd.antrea.io/v1alpha1
fel: NetworkPolicy
metadate:
nume: test-np
specificație:
nivel: Urgență
Dar refuză și dacă nu există un set de spec.tier la care nu mă așteptam, deoarece implicit, dacă nu există, este „Aplicație” per cheie: „{{request.object.spec.tier || „Aplicație”}}”.
Ce ar trebui să schimb pentru ca acesta să funcționeze conform așteptărilor?