Какова будет политика opa в.rego для следующих примеров?
Я новичок в opa и k8s, у меня мало знаний или опыта в этой области. Я хотел бы иметь политику в коде Rego (opa policy) и выполнить, чтобы увидеть результат. следующие примеры:
- Всегда извлекать изображения - убедитесь, что каждый контейнер устанавливает свой "imagePullPolicy" в "Всегда"
- Проверьте зонд живости - убедитесь, что каждый контейнер устанавливает livenessProbe
- Проверка готовности зонда - убедитесь, что каждый контейнер устанавливает готовность Probe
для следующего я хотел бы иметь политику opa:
1. Всегда тяните изображения:
apiVersion: v1
kind: Pod
metadata:
name: test-image-pull-policy
spec:
containers:
- name: nginx
image: nginx:1.13
imagePullPolicy: IfNotPresent
2. Проверьте на жизнеспособность зонда
3. Проверьте готовность зонда
containers:
- name: opa
image: openpolicyagent/opa:latest
ports:
- name: http
containerPort: 8181
args:
- "run"
- "--ignore=.*" # exclude hidden dirs created by Kubernetes
- "--server"
- "/policies"
volumeMounts:
- readOnly: true
mountPath: /policies
name: example-policy
livenessProbe:
httpGet:
scheme: HTTP # assumes OPA listens on localhost:8181
port: 8181
initialDelaySeconds: 5 # tune these periods for your environemnt
periodSeconds: 5
readinessProbe:
httpGet:
path: /health?bundle=true # Include bundle activation in readiness
scheme: HTTP
port: 8181
initialDelaySeconds: 5
periodSeconds: 5
Есть ли способ создать политику opa для вышеуказанных условий. Может ли кто-нибудь помочь, как я новичок в опа. Заранее спасибо.
2 ответа
Для проверки живучести и готовности можно просто проверить, определены ли эти поля:
package kubernetes.admission
deny["container is missing livenessProbe"] {
container := input_container[_]
not container.livenessProbe
}
deny["container is missing readinessProbe"] {
container := input_container[_]
not container.readinessProbe
}
input_container[container] {
container := input.request.object.spec.containers[_]
}
#Always Pull Images
package kubernetes.admission
deny[msg] {
input.request.kind.kind = "Pod"
container = input.request.object.spec.containers[_]
container.imagePullPolicy != "Always"
msg = sprintf("Forbidden imagePullPolicy value \"%v\"", [container.imagePullPolicy])
}