Meydan okuma - OPA
- Docker & Kubernetes kursu
- Uzman
- Ders 46/47
- 5 dk
Rego ile bir politika yazarsın.
Meydan okuma: latest yasağı
Bu meydan okumada latest etiketli ya da etiketsiz image'ları yasaklayan bir Gatekeeper politikası yazacaksın. Kural pod'lara uygulanacak; önce yalnızca uyaracak, ihlaller temizlenince reddedecek:
nginx -> ihlal (etiket yok, latest sayılır)
nginx:latest -> ihlal
nginx:1.27 -> uygun
ghcr.io/sirket/api@sha256:… -> uygunRego'da endswith ve contains yerleşik fonksiyonlarını kullanacaksın.
Uygulama Rego kuralları
Rego kodunu yaz: package k8slatestyasak; iki violation[{"msg": msg}] kuralı. İlki c := input.review.object.spec.containers[_], endswith(c.image, ":latest"), msg := sprintf("latest yasak: %v", [c.image]). İkincisi aynı c ile not contains(c.image, ":"), msg := sprintf("etiket yok: %v", [c.image]).
Başlangıç kodu
# buraya yazÖrnek çözüm
package k8slatestyasak
violation[{"msg": msg}] {
c := input.review.object.spec.containers[_]
endswith(c.image, ":latest")
msg := sprintf("latest yasak: %v", [c.image])
}
violation[{"msg": msg}] {
c := input.review.object.spec.containers[_]
not contains(c.image, ":")
msg := sprintf("etiket yok: %v", [c.image])
}Beklenen çıktı
$ opa eval -d latest.rego -i pod.json "data.k8slatestyasak.violation"
{"result": [{"expressions": [{"value": [{"msg": "etiket yok: nginx"}]}]}]}
Uygulama Önce uyar
Bir K8sLatestYasak Constraint YAML'ı yaz: constraints.gatekeeper.sh/v1beta1; adı latest-yasak; enforcementAction: warn; match.kinds altında apiGroups: [""], kinds: ["Pod"]; excludedNamespaces: ["kube-system"].
Başlangıç kodu
# buraya yazÖrnek çözüm
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sLatestYasak
metadata:
name: latest-yasak
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
excludedNamespaces: ["kube-system"]Beklenen çıktı
k8slatestyasak.constraints.gatekeeper.sh/latest-yasak created $ kubectl run deneme --image=nginx Warning: [latest-yasak] etiket yok: nginx pod/deneme created
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Rego'da aynı adlı iki violation kuralı yazılırsa ne olur?
- İkisi de tetiklenmelidir (VE)
- İhlaller birleşir; herhangi biri tetiklenirse ihlal oluşur (VEYA) Doğru cevap
- Derleme hatası
- Yalnızca ikincisi çalışır
Açıklama: Kural içindeki satırlar VE, aynı adlı kurallar VEYA anlamına gelir.
2 Image'ın latest ile bitip bitmediğine bak.
____(c.image, ":latest")
endswith(c.image, ":latest")
Açıklama: endswith dizenin sonunu denetler.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
endswith |
Sonu denetle |
contains |
İçeriyor mu |
warn |
Önce uyar |
deny |
Sonra reddet |