Какова будет политика opa в.rego для следующих примеров?

Я новичок в opa и k8s, у меня мало знаний или опыта в этой области. Я хотел бы иметь политику в коде Rego (opa policy) и выполнить, чтобы увидеть результат. следующие примеры:

  1. Всегда извлекать изображения - убедитесь, что каждый контейнер устанавливает свой "imagePullPolicy" в "Всегда"
  2. Проверьте зонд живости - убедитесь, что каждый контейнер устанавливает livenessProbe
  3. Проверка готовности зонда - убедитесь, что каждый контейнер устанавливает готовность 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])
}
Другие вопросы по тегам