policyDefinitions/Kubernetes/host-network-ports/template.yaml (45 lines of code) (raw):

apiVersion: templates.gatekeeper.sh/v1beta1 kind: ConstraintTemplate metadata: name: k8sazurehostnetworkingports spec: crd: spec: names: kind: K8sAzureHostNetworkingPorts validation: # Schema for the `parameters` field openAPIV3Schema: properties: allowHostNetwork: type: boolean minPort: type: integer maxPort: type: integer targets: - target: admission.k8s.gatekeeper.sh rego: | package k8sazurehostnetworkingports violation[{"msg": msg, "details": {}}] { container := input_containers[_] input_share_hostnetwork(container) msg := sprintf("The specified hostNetwork and hostPort are not allowed, pod: %v, container: %v. Allowed values: %v", [input.review.object.metadata.name, container.name, input.parameters]) } input_share_hostnetwork(container) { not input.parameters.allowHostNetwork input.review.object.spec.hostNetwork } input_share_hostnetwork(container) { hostPort := container.ports[_].hostPort hostPort < input.parameters.minPort } input_share_hostnetwork(container) { hostPort := container.ports[_].hostPort hostPort > input.parameters.maxPort } input_containers[c] { c := input.review.object.spec.containers[_] } input_containers[c] { c := input.review.object.spec.initContainers[_] }