All Policies
Require Requests and Limits for emptyDir in CEL expressions
Pods which mount emptyDir volumes may be allowed to potentially overrun the medium backing the emptyDir volume. This sample ensures that any initContainers or containers mounting an emptyDir volume have ephemeral-storage requests and limits set. Policy will be skipped if the volume has already a sizeLimit set.
Policy Definition
/other-cel/require-emptydir-requests-limits/require-emptydir-requests-limits.yaml
1apiVersion: kyverno.io/v1
2kind: ClusterPolicy
3metadata:
4 name: require-emptydir-requests-and-limits
5 annotations:
6 policies.kyverno.io/title: Require Requests and Limits for emptyDir in CEL expressions
7 policies.kyverno.io/category: Other in CEL
8 policies.kyverno.io/severity: medium
9 kyverno.io/kyverno-version: 1.12.1
10 kyverno.io/kubernetes-version: "1.26-1.27"
11 policies.kyverno.io/subject: Pod
12 policies.kyverno.io/description: >-
13 Pods which mount emptyDir volumes may be allowed to potentially overrun
14 the medium backing the emptyDir volume. This sample ensures that any
15 initContainers or containers mounting an emptyDir volume have
16 ephemeral-storage requests and limits set. Policy will be skipped if
17 the volume has already a sizeLimit set.
18spec:
19 background: false
20 validationFailureAction: Audit
21 rules:
22 - name: check-emptydir-requests-limits
23 match:
24 any:
25 - resources:
26 kinds:
27 - Pod
28 operations:
29 - CREATE
30 - UPDATE
31 celPreconditions:
32 - name: "has-emptydir-volume"
33 expression: "object.spec.?volumes.orValue([]).exists(volume, has(volume.emptyDir))"
34 validate:
35 cel:
36 variables:
37 - name: containers
38 expression: "object.spec.containers + object.spec.?initContainers.orValue([])"
39 - name: emptydirnames
40 expression: >-
41 has(object.spec.volumes) ?
42 object.spec.volumes.filter(volume, has(volume.emptyDir) && !has(volume.emptyDir.sizeLimit)).map(volume, volume.name) : []
43 expressions:
44 - expression: >-
45 variables.containers.all(container,
46 !container.?volumeMounts.orValue([]).exists(mount, mount.name in variables.emptydirnames) ||
47 container.resources.?requests[?'ephemeral-storage'].hasValue() &&
48 container.resources.?limits[?'ephemeral-storage'].hasValue())
49 message: Containers mounting emptyDir volumes must specify requests and limits for ephemeral-storage.