Constraint
- Docker & Kubernetes kursu
- Uzman
- Ders 35/47
- 4 dk
Constraint ile politika uygulmayı öğrenirsin.
Constraint
Constraint, şablonun ürettiği türde bir nesnedir: politikanın hangi nesnelere (match) ve hangi parametrelerle uygulanacağını söyler. enforcementAction davranışı belirler: deny (reddet), warn (uyar ama kabul et), dryrun (yalnızca audit):
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sZorunluEtiket
metadata:
name: deployment-etiketleri
spec:
enforcementAction: deny
match:
kinds:
- apiGroups: ["apps"]
kinds: ["Deployment"]
excludedNamespaces: ["kube-system", "gatekeeper-system"]
parameters:
etiketler: ["takim", "ortam"]Sistem namespace'lerini hariç tutmak
Politikaların kube-system gibi sistem namespace'lerine uygulanması kritik bileşenlerin güncellenmesini engelleyebilir; bu yüzden excludedNamespaces ile hariç tutulur. Gatekeeper'ın kendi config'i de bazı namespace'leri tamamen dışarıda bırakabilir:
$ kubectl create deployment deneme --image=nginx:1.27 -n magaza
error: admission webhook "validation.gatekeeper.sh" denied the request: [deployment-etiketleri] eksik etiket: takim
$ kubectl create deployment deneme --image=nginx:1.27 -n magaza --dry-run=server -o name
Warning: [deployment-etiketleri] eksik etiket: ortam # enforcementAction: warn olsaydıUygulama Constraint yaz
Bir K8sZorunluEtiket Constraint YAML'ı yaz: constraints.gatekeeper.sh/v1beta1; adı deployment-etiketleri; enforcementAction: deny; match.kinds altında apiGroups: ["apps"], kinds: ["Deployment"]; excludedNamespaces: ["kube-system"]; parameters.etiketler: ["takim", "ortam"].
Başlangıç kodu
# buraya yazÖrnek çözüm
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sZorunluEtiket
metadata:
name: deployment-etiketleri
spec:
enforcementAction: deny
match:
kinds:
- apiGroups: ["apps"]
kinds: ["Deployment"]
excludedNamespaces: ["kube-system"]
parameters:
etiketler: ["takim", "ortam"]Beklenen çıktı
k8szorunluetiket.constraints.gatekeeper.sh/deployment-etiketleri created
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Yeni bir politikayı üretimde güvenle devreye almanın yolu nedir?
- Audit'i kapatmak
- Önce dryrun ya da warn ile başlayıp ihlalleri temizledikten sonra deny'a geçmek Doğru cevap
- Doğrudan deny ile başlamak
- kube-system'e de uygulamak
Açıklama: Doğrudan deny, mevcut dağıtımların güncellenmesini bir anda durdurabilir.
2 Politikayı yalnızca uyaracak şekilde ayarla.
spec:
enforcementAction: ____
spec:
enforcementAction: warn
Açıklama: warn kabul eder ama uyarı döndürür.
3 Eşleştir.
| Kavram | Anlamı |
|---|---|
deny |
Reddet |
warn |
Uyar, kabul et |
dryrun |
Yalnızca audit |
excludedNamespaces |
Hariç tutulanlar |