CodeBlanks Logo Icon CodeBlanks

ConstraintTemplate

ConstraintTemplate ile politika tanımlamayı öğrenirsin.

ConstraintTemplate

ConstraintTemplate, yeni bir Constraint türü (CRD) tanımlar ve Rego mantığını içerir. crd.spec.names.kind oluşacak Constraint türünün adı, validation parametrelerin tanımı, targets[].rego politika kodudur:

apiVersion: templates.gatekeeper.sh/v1
kind: ConstraintTemplate
metadata:
  name: k8szorunluetiket
spec:
  crd:
    spec:
      names:
        kind: K8sZorunluEtiket
      validation:
        openAPIV3Schema:
          type: object
          properties:
            etiketler:
              type: array
              items: {type: string}
  targets:
    - target: admission.k8s.gatekeeper.sh
      rego: |
        package k8szorunluetiket
        violation[{"msg": msg}] {
          gerekli := input.parameters.etiketler[_]
          not input.review.object.metadata.labels[gerekli]
          msg := sprintf("eksik etiket: %v", [gerekli])
        }

Parametreler

Şablonu genel tutup ayrıntıyı Constraint'e bırakmak, aynı mantığın farklı yerlerde farklı ayarlarla kullanılmasını sağlar. Rego'da parametreler input.parameters altındadır:

gerekli := input.parameters.etiketler[_]       # ["takim", "ortam"]
not input.review.object.metadata.labels[gerekli]

Örneğin aynı şablon deployment'larda [takim, ortam], namespace'lerde [sahip] etiketini zorunlu kılabilir.

Uygulama Image kaynağı şablonu

Bir ConstraintTemplate'in targets bölümünü yaz (targets: ile başlayarak): target: admission.k8s.gatekeeper.sh; rego: | altında package k8sizinliregistry ve container image'ı input.parameters.onek ile başlamıyorsa violation[{"msg": msg}] üreten kural (c := input.review.object.spec.containers[_], not startswith(c.image, input.parameters.onek), msg := sprintf("izinsiz image: %v", [c.image])).

Başlangıç kodu

terminal
# buraya yaz

Örnek çözüm

terminal
targets:
  - target: admission.k8s.gatekeeper.sh
    rego: |
      package k8sizinliregistry
      violation[{"msg": msg}] {
        c := input.review.object.spec.containers[_]
        not startswith(c.image, input.parameters.onek)
        msg := sprintf("izinsiz image: %v", [c.image])
      }

Beklenen çıktı

constrainttemplate.templates.gatekeeper.sh/k8sizinliregistry created

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bu şablon uygulandıktan sonra cluster'da hangi yeni tür oluşur?

  • Policy
  • Rego
  • K8sZorunluEtiket Doğru cevap
  • ConstraintTemplate

Açıklama: Gatekeeper şablondan bir CRD üretir; Constraint'ler bu türde yazılır.

2 Constraint'in parametrelerini Rego'da oku.

Soru
  gerekli := input.____.etiketler[_]
Cevap
  gerekli := input.parameters.etiketler[_]

Açıklama: input.parameters Constraint'teki spec.parameters'tır.

3 Eşleştir.

Kavram Anlamı
crd.spec.names.kind Yeni Constraint türü
validation Parametre tanımı
targets[].rego Politika kodu
input.parameters Constraint ayarları

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