Filter

Restrict Ingress Classes

Ingress classes should only be allowed which match up to deployed Ingress controllers in the cluster. Allowing users to define classes which cannot be satisfied by a deployed Ingress controller can result in either no or undesired functionality. This policy checks Ingress resources and only allows those which define `HAProxy` or `nginx` in the respective annotation. This annotation has largely been replaced as of Kubernetes 1.18 with the IngressClass resource.

Policy Definition

/other/restrict_ingress_classes.yaml

 1apiVersion: kyverno.io/v1
 2kind: ClusterPolicy
 3metadata:
 4  name: restrict-ingress-classes
 5  annotations:
 6    policies.kyverno.io/title: Restrict Ingress Classes
 7    policies.kyverno.io/category: Sample
 8    policies.kyverno.io/severity: medium
 9    policies.kyverno.io/subject: Ingress
10    policies.kyverno.io/description: >-
11      Ingress classes should only be allowed which match up to deployed Ingress controllers
12      in the cluster. Allowing users to define classes which cannot be satisfied by a deployed
13      Ingress controller can result in either no or undesired functionality. This policy checks
14      Ingress resources and only allows those which define `HAProxy` or `nginx` in the respective
15      annotation. This annotation has largely been replaced as of Kubernetes 1.18 with the IngressClass
16      resource.      
17spec:
18  rules:
19  - name: validate-ingress
20    match:
21      resources:
22        kinds:
23        - Ingress
24    validate:
25      message: "Unknown ingress class."
26      pattern:
27        metadata:
28          annotations:
29            kubernetes.io/ingress.class: "HAProxy | nginx"