Regeln als Code: OPA, Kyverno und integrierte Richtlinien
Keine "Bitte benutzen Sie nicht das neueste Tag" mehr im Wiki. Es wird automatisch durchgesetzt.
Keine "Bitte benutzen Sie nicht das neueste Tag" mehr im Wiki. Es wird automatisch durchgesetzt.

Jede Organisation hat Regeln. Container dürfen nicht als Wurzel laufen. Jeder Einsatz braucht ein Eigentümer-Label. Die Bilder müssen aus unserem Register stammen. Die Produktion braucht mindestens zwei Kopien. Normalerweise leben diese Regeln in einer Wiki-Seite, und sie werden genau so befolgt wie Wiki-Seiten gelesen werden.
Die Politik als Code verwandelt diese Regeln in etwas, das ein Computer bei jeder Änderung durchsetzt, ohne dass sich jemand an sie erinnern muss.
Kubernetes hat Eintrittskontrolle: jede Erstellungs- oder Aktualisierungsanfrage kann überprüft (validiert) oder geändert (mutatiert) werden, bevor sie gespeichert wird. Die Politik-Engines stecken dort ein.
Kyverno, ein CNCF-Projekt, ermöglicht es Ihnen, Richtlinien als Kubernetes-Ressourcen zu schreiben. Wenn man eine Bereitstellung lesen kann, kann man eine Kyverno-Richtlinie lesen:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: disallow-latest-tag
spec:
validationFailureAction: Enforce
rules:
- name: require-image-tag
match:
any:
- resources:
kinds: ["Pod"]
validate:
message: "Images must use a specific version tag, not 'latest'."
pattern:
spec:
containers:
- image: "!*:latest"
Kyverno kann auch Mutation (Standardetiketten oder Sicherheitseinstellungen hinzufügen) Erstellen Ressourcen (eine Standardrichtlinie für den Netzwerkansatz in jedem neuen Namensraum erstellen) und Überprüfen Sie die Bildsignaturen.
Open Policy Agent (OPA), auch ein CNCF-Projekt, ist eine allgemeingültige Politikmaschine, die eine Sprache namens Rego. Torwächter integriert es mit Kubernetes. Rego ist sehr leistungsstark und funktioniert weit über Kubernetes hinaus (API, Terraform-Pläne, CI-Pipelines), aber es hat eine Lernkurve.
package k8srequiredlabels
violation[{"msg": msg}] {
required := {"owner", "app"}
provided := {label | input.review.object.metadata.labels[label]}
missing := required - provided
count(missing) > 0
msg := sprintf("Missing required labels: %v", [missing])
}
Kubernetes hat jetzt seinen eigenen Politikmechanismus, Validierung der Zulassungsrichtlinie, seit Version 1.30 stabil. Die Regeln sind in CEL (Common Expression Language) und läuft innerhalb des API-Servers, ohne dass zusätzliche Komponenten installiert werden müssen:
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
name: require-replicas-in-prod
spec:
matchConstraints:
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
validations:
- expression: "object.spec.replicas >= 2"
message: "Production deployments need at least 2 replicas."
(A ValidatingAdmissionPolicyBinding dann auf bestimmte Namespaces anwendet.)
Es ist perfekt für einfache Validierungsregeln. Für Mutation, Erzeugung, Bildprüfung und Berichterstattung bieten Kyverno oder Gatekeeper noch mehr. Beide Motoren setzen ebenfalls selbst CEL ein.
Eine Regel in einem Wiki ist ein Vorschlag. Eine Regel in der Aufnahmepolitik ist eine Garantie.
Ein guter Anfangssatz für die meisten Cluster:
latest Bildtags.owner, appVielleicht . cost-center.Viele davon sind in der Kyverno-Richtlinienbibliothek und der Gatekeeper-Bibliothek fertig erhältlich.
Der schnellste Weg, sich Feinde zu machen, ist, 20 Richtlinien an einem Freitag in Vollstreckungsmodus einzuschalten. Stattdessen:
AuditDer Torwächter dryrun oder warn, oder Warn/Audit Die Aktionen für ValideringAdmissionPolicy. Verstöße werden gemeldet, nichts wird blockiert.kyverno test) um die Politiken gegen Stichprobenressourcen zu betreiben.opa test für Rego-Einheitstests.Für die meisten Teams, die anfangen, Kürbis ist die einfachste: YAML-Richtlinien, eine große Bibliothek, Mutation und Bildprüfung enthalten. Verwendung Validierung der Zulassungsrichtlinie Für einfache Regeln, wo man keine andere Komponente will. Wählen Sie OPA wenn Sie eine einzige Richtliniensprache über Kubernetes, Terraform, APIs und mehr wollen.
Meine Meinung: Schreiben Sie die Regeln einmal auf, in Code, und lassen Sie das Cluster sich an sie erinnern.
Desly