新增learn-kubernetes(https://github.com/yyong-brs/learn-kubernetes)相关文件
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
## Credits
|
||||
|
||||
Adapted from the OPA [Agile Bank demo](https://github.com/open-policy-agent/gatekeeper/tree/master/demo/agilebank).
|
||||
@@ -0,0 +1,53 @@
|
||||
apiVersion: templates.gatekeeper.sh/v1beta1
|
||||
kind: ConstraintTemplate
|
||||
metadata:
|
||||
name: policycontainerprobes
|
||||
spec:
|
||||
crd:
|
||||
spec:
|
||||
names:
|
||||
kind: PolicyContainerProbes
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
probes:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
probeTypes:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
targets:
|
||||
- target: admission.k8s.gatekeeper.sh
|
||||
rego: |
|
||||
package policycontainerprobes
|
||||
|
||||
probe_type_set = probe_types {
|
||||
probe_types := {type | type := input.parameters.probeTypes[_]}
|
||||
}
|
||||
|
||||
violation[{"msg": msg}] {
|
||||
container := input.review.object.spec.containers[_]
|
||||
probe := input.parameters.probes[_]
|
||||
probe_is_missing(container, probe)
|
||||
msg := get_violation_message(container, input.review, probe)
|
||||
}
|
||||
|
||||
probe_is_missing(ctr, probe) = true {
|
||||
not ctr[probe]
|
||||
}
|
||||
|
||||
probe_is_missing(ctr, probe) = true {
|
||||
probe_field_empty(ctr, probe)
|
||||
}
|
||||
|
||||
probe_field_empty(ctr, probe) = true {
|
||||
probe_fields := {field | ctr[probe][field]}
|
||||
diff_fields := probe_type_set - probe_fields
|
||||
count(diff_fields) == count(probe_type_set)
|
||||
}
|
||||
|
||||
get_violation_message(container, review, probe) = msg {
|
||||
msg := sprintf("Container <%v> in your <%v> <%v> has no <%v>", [container.name, review.kind.kind, review.object.metadata.name, probe])
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
apiVersion: templates.gatekeeper.sh/v1beta1
|
||||
kind: ConstraintTemplate
|
||||
metadata:
|
||||
name: policyimagerepository
|
||||
spec:
|
||||
crd:
|
||||
spec:
|
||||
names:
|
||||
kind: PolicyImageRepository
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
repos:
|
||||
type: array
|
||||
items:
|
||||
type: string
|
||||
targets:
|
||||
- target: admission.k8s.gatekeeper.sh
|
||||
rego: |
|
||||
package k8sallowedrepos
|
||||
|
||||
violation[{"msg": msg}] {
|
||||
container := input.review.object.spec.containers[_]
|
||||
satisfied := [good | repo = input.parameters.repos[_] ; good = startswith(container.image, repo)]
|
||||
not any(satisfied)
|
||||
msg := sprintf("container <%v> has an invalid image repo <%v>, allowed repos are %v", [container.name, container.image, input.parameters.repos])
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
apiVersion: templates.gatekeeper.sh/v1beta1
|
||||
kind: ConstraintTemplate
|
||||
metadata:
|
||||
name: policyresourcelimits
|
||||
spec:
|
||||
crd:
|
||||
spec:
|
||||
names:
|
||||
kind: PolicyResourceLimits
|
||||
targets:
|
||||
- target: admission.k8s.gatekeeper.sh
|
||||
rego: |
|
||||
package policyresourcelimits
|
||||
|
||||
missing(obj, field) = true {
|
||||
not obj[field]
|
||||
}
|
||||
|
||||
missing(obj, field) = true {
|
||||
obj[field] == ""
|
||||
}
|
||||
|
||||
violation[{"msg": msg}] {
|
||||
general_violation[{"msg": msg, "field": "containers"}]
|
||||
}
|
||||
|
||||
general_violation[{"msg": msg, "field": field}] {
|
||||
container := input.review.object.spec[field][_]
|
||||
not container.resources
|
||||
msg := sprintf("container <%v> has no resource limits", [container.name])
|
||||
}
|
||||
|
||||
general_violation[{"msg": msg, "field": field}] {
|
||||
container := input.review.object.spec[field][_]
|
||||
not container.resources.limits
|
||||
msg := sprintf("container <%v> has no resource limits", [container.name])
|
||||
}
|
||||
|
||||
general_violation[{"msg": msg, "field": field}] {
|
||||
container := input.review.object.spec[field][_]
|
||||
missing(container.resources.limits, "cpu")
|
||||
msg := sprintf("container <%v> has no cpu limit", [container.name])
|
||||
}
|
||||
|
||||
general_violation[{"msg": msg, "field": field}] {
|
||||
container := input.review.object.spec[field][_]
|
||||
missing(container.resources.limits, "memory")
|
||||
msg := sprintf("container <%v> has no memory limit", [container.name])
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
apiVersion: templates.gatekeeper.sh/v1beta1
|
||||
kind: ConstraintTemplate
|
||||
metadata:
|
||||
name: requiredlabels
|
||||
spec:
|
||||
crd:
|
||||
spec:
|
||||
names:
|
||||
kind: RequiredLabels
|
||||
validation:
|
||||
openAPIV3Schema:
|
||||
properties:
|
||||
labels:
|
||||
type: array
|
||||
items: string
|
||||
targets:
|
||||
- target: admission.k8s.gatekeeper.sh
|
||||
rego: |
|
||||
package requiredlabels
|
||||
|
||||
violation[{"msg": msg, "details": {"missing_labels": missing}}] {
|
||||
provided := {label | input.review.object.metadata.labels[label]}
|
||||
required := {label | label := input.parameters.labels[_]}
|
||||
missing := required - provided
|
||||
count(missing) > 0
|
||||
msg := sprintf("you must provide labels: %v", [missing])
|
||||
}
|
||||
Reference in New Issue
Block a user