ConstraintTemplate
- Docker & Kubernetes kursu
- Uzman
- Ders 34/47
- 4 dk
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
# buraya yazÖrnek çözüm
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.
gerekli := input.____.etiketler[_]
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ı |