built-in-references/Kubernetes/load-balancer-no-public-ips/template.yaml (27 lines of code) (raw):
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sazureloadbalancernopublicips
spec:
crd:
spec:
names:
kind: K8sAzureLoadBalancerNoPublicIPs
listKind: K8sAzureLoadBalancerNoPublicIPsList
plural: k8sazureloadbalancernopublicips
singular: k8sazureloadbalancernopublicips
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8sazureloadbalancernopublicips
violation[{"msg": msg}] {
not loadbalancer_no_pip(input.review.object)
msg := sprintf("Load Balancers should not have public IPs. azure-load-balancer-internal annotation is required for %v", [input.review.object.metadata.name])
}
loadbalancer_no_pip(service) = true {
service.spec.type == "LoadBalancer"
service.metadata.annotations["service.beta.kubernetes.io/azure-load-balancer-internal"] == "true"
}
loadbalancer_no_pip(service) = true {
service.spec.type != "LoadBalancer"
}