apiVersion: templates.gatekeeper.sh/v1 kind: ConstraintTemplate metadata: name: k8sdeniedservicetypes spec: crd: spec: names: kind: K8sDeniedServiceTypes validation: openAPIV3Schema: type: object properties: deniedTypes: type: array items: type: string targets: - target: admission.k8s.gatekeeper.sh rego: | package d8.pod_security_standards.extended violation[{"msg": msg}] { service := input.review.object service.kind == "Service" denied := service.spec.type denied == "NodePort" msg := sprintf("Service type %v is not allowed.", [denied]) } violation[{"msg": msg}] { service := input.review.object service.kind == "Service" denied := service.spec.type denied == "LoadBalancer" msg := sprintf("Service type %v is not allowed.", [denied]) } violation[{"msg": msg}] { service := input.review.object service.kind == "Service" externalIPs := service.spec.externalIPs count(externalIPs) > 0 msg := "Usage of externalIPs is not allowed." }