我想禁止在没有ResourceQuota的命名空间中创建 Pod 。如果可能的话,我希望 Gatekeeper在允许创建 Pod 之前确保有一个 ResourceQuota 设置limits.cpu
。limits.memory
我创建了以下配置,但它们没有解决我的问题:
模板
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8sresoucequota
spec:
crd:
spec:
names:
kind: k8sResouceQuota
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8sresoucequota
violation[{"msg": msg}] {
input.request.kind.kind == "Pod"
requestns := input.request.object.metadata.namespace
existingrqs := {e | e := data.inventory.namespace[requestns]["v1beta1"]["ResourceQuota"].metadata.name}
not ns_exists(requestns,existingrqs)
msg := sprintf("container <%v> could not be created because the <%v> namespace does not have ResourceQuotas defined", [input.request.object.metadata.name,input.request.object.metadata.namespace])
}
ns_exists(ns,arr) {
arr[_] = ns
}
约束
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: k8sResouceQuota
metadata:
name: namespace-must-have-resourcequota
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces:
- kube-system
- kube-public
- kube-node-lease
- default
- gatekeeper-system
- kubernetes-dashboard
同步.yaml
apiVersion: config.gatekeeper.sh/v1alpha1
kind: Config
metadata:
name: config
namespace: "gatekeeper-system"
spec:
sync:
syncOnly:
- group: ""
version: "v1beta1"
kind: "Pod"
- group: ""
version: "v1beta1"
kind: "Namespace"
- group: ""
version: "v1beta1"
kind: "ResourceQuota"