Docker & Kubernetes
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])).
Örnek çözümü göster
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])
}
Kendini test et
-
Bu şablon uygulandıktan sonra cluster'da hangi yeni tür oluşur?
- Policy
- Rego
- K8sZorunluEtiket
- ConstraintTemplate
Cevabı göster
K8sZorunluEtiket — Gatekeeper şablondan bir CRD üretir; Constraint'ler bu türde yazılır.
-
Constraint'in parametrelerini Rego'da oku.
gerekli := input.____.etiketler[_]
Cevabı göster
gerekli := input.parameters.etiketler[_]
-
Eşleştir.
- crd.spec.names.kind
- Yeni Constraint türü
- validation
- Parametre tanımı
- targets[].rego
- Politika kodu
- input.parameters
- Constraint ayarları
Sıradaki ders: Constraint