CodeBlanks Logo Icon CodeBlanks

Constraint

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

terminal
# buraya yaz

Örnek çözüm

terminal
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.

Soru
spec:
  enforcementAction: ____
Cevap
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

Uzman bölümündeki tüm dersler