Kubernetes 1.26: Revolutionäre Validierungsrichtlinien für Admissions
Entdecken Sie die neuen Validating Admission Policies in Kubernetes 1.26 und vereinfachen Sie Ihre Entwicklungsprozesse.
In Kubernetes 1.26 steht die erste Alpha-Version der Validating Admission Policies zur Verfügung! Diese neuen Richtlinien nutzen die Common Expression Language (CEL) und bieten eine deklarative, in-process Alternative zu den bestehenden validating admission webhooks.
CEL wurde ursprünglich für Validierungsregeln für CustomResourceDefinitions in Kubernetes eingeführt. Diese Erweiterung weitet die Nutzung von CEL erheblich aus und unterstützt eine viel breitere Palette von Anwendungsfällen für Admission.
Was ändert sich konkret für Entwickler/DevOps-Teams?
Admission Webhooks können für Entwickler und DevOps-Teams eine große Herausforderung darstellen. Sie müssen nicht nur einen Webhook-Binary implementieren und warten, sondern auch sicherstellen, dass dieser immer verfügbar ist. Wenn ein Webhook zeitlich ausfällt oder nicht erreichbar ist, kann dies zu einem Ausfall des Kubernetes-Controlplanes führen. Mit den neuen Validating Admission Policies wird dieser komplexe Prozess erheblich vereinfacht, indem CEL-Ausdrücke direkt in Kubernetes-Ressourcen eingebettet werden.
Praktische Beispiele oder Anwendungsfälle
Ein einfaches Beispiel zur Einschränkung der Anzahl von Replikaten in einem Deployment könnte so aussehen:
apiVersion: admissionregistration.k8s.io/v1alpha1
kind: ValidatingAdmissionPolicy
metadata:
name: "demo-policy.example.com"
spec:
matchConstraints:
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
validations:
- expression: "object.spec.replicas <= 5"
Hier definiert das Feld expression
die CEL-Ausdruck, der zur Validierung von Admission-Anfragen verwendet wird. matchConstraints
legt fest, welche Arten von Anfragen diese ValidatingAdmissionPolicy
validieren kann.
Um die Policy an die entsprechenden Ressourcen zu binden, verwenden wir:
apiVersion: admissionregistration.k8s.io/v1alpha1
kind: ValidatingAdmissionPolicyBinding
metadata:
name: "demo-binding-test.example.com"
spec:
policyName: "demo-policy.example.com"
matchResources:
namespaceSelector:
matchExpressions:
- key: environment
operator: In
values:
- test
Diese ValidatingAdmissionPolicyBinding
-Ressource bindet die oben genannte Policy nur an Namespaces, in denen das Label environment
auf test
gesetzt ist. Sobald diese Bindung erstellt ist, beginnt der kube-apiserver, diese Admission Policy durchzusetzen.
Ein weiterer Vorteil dieser neuen Richtlinien ist die hohe Konfigurierbarkeit. Die Autoren der Richtlinien können Parameter definieren und den Geltungsbereich der Richtlinien nach Bedarf anpassen. Zum Beispiel kann die oben genannte Admission Policy so modifiziert werden:
apiVersion: admissionregistration.k8s.io/v1alpha1
kind: ValidatingAdmissionPolicy
metadata:
name: "demo-policy.example.com"
spec:
paramKind:
apiVersion: rules.example.com/v1 # Sie benötigen auch eine CustomResourceDefinition für diese API
kind: ReplicaLimit
matchConstraints:
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
validations:
- expression: "object.spec.replicas <= params.maxReplicas"
Hier definiert paramKind
die Ressourcen, die zur Konfiguration der Policy verwendet werden, und der expression
-Feld verwendet die params
-Variable, um auf die Parameterressource zuzugreifen.
Mit dieser neuen Funktionalität wird das Management von Admission Policies in Kubernetes nicht nur einfacher, sondern auch flexibler, was besonders für Cluster-Administratoren von Vorteil ist. ayedo ist stolz darauf, Kubernetes-Partner zu sein und Ihnen zu helfen, diese neuen Funktionen optimal zu nutzen.
Quelle: Kubernetes Blog