Text size
Ausprobiert & getestet6 Min. Lesezeit

Regeln als Code: OPA, Kyverno und integrierte Richtlinien

Keine "Bitte benutzen Sie nicht das neueste Tag" mehr im Wiki. Es wird automatisch durchgesetzt.

Rules as code: OPA, Kyverno and built-in policies
KI-generierte Illustration

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.

Warum Regeln in den Code gehören

  • - Das stimmt. Die Regel gilt für alle, jederzeit, auch um 3 Uhr morgens.
  • Schnelle Rückmeldung. Entwickler lernen von einem Problem in dem Moment, in dem sie versuchen, es zu implementieren, mit einer klaren Botschaft, nicht Wochen später in einem Audit.
  • Versions- und Überarbeitungsarbeit. Richtlinien leben in Git, gehen durch Pull-Anfragen und haben eine Geschichte.
  • - Das ist zu testen. Sie können Tests für Ihre Richtlinien schreiben wie jeder andere Code.
  • - Das ist auditierbar. Sie können genau zeigen, welche Regeln gelten und beweisen, dass sie durchgesetzt werden.

Drei Möglichkeiten, sie in Kubernetes zu schreiben

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: Richtlinien wie Kubernetes YAML

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.

OPA Gatekeeper: Politik in Rego

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])
}

Validierung der Zulassungsrichtlinie: in Kubernetes integriert

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.

Das ist eine Politik, die ich immer hinzufüge.

Ein guter Anfangssatz für die meisten Cluster:

  • Nein, nicht latest Bildtags.
  • Bilder nur aus zugelassenen Registern.
  • Erforderliche Etiketten: owner, appVielleicht . cost-center.
  • erforderliche Anfragen nach Ressourcen auf jedem Container.
  • Keine privilegierten Container, keine Host-Netzwerkverbindung, keine Host-Pfadmontage (außerhalb von Systemnamenräumen).
  • - Führe als nicht-Root.
  • Proben für die Lebensfähigkeit und Bereitschaft auf Einsätze.
  • Unterschriftene Bilder in der Produktion.

Viele davon sind in der Kyverno-Richtlinienbibliothek und der Gatekeeper-Bibliothek fertig erhältlich.

Wir müssen uns bewegen, ohne Dinge zu brechen.

Der schnellste Weg, sich Feinde zu machen, ist, 20 Richtlinien an einem Freitag in Vollstreckungsmodus einzuschalten. Stattdessen:

  1. Start im Audit-Modus. - Das ist Kyverno. AuditDer Torwächter dryrun oder warn, oder Warn/Audit Die Aktionen für ValideringAdmissionPolicy. Verstöße werden gemeldet, nichts wird blockiert.
  2. Schauen Sie sich die Berichte an. Kyverno erstellt Richtlinienberichte, Gatekeeper registriert Verstöße. Beseitigen Sie bestehende Arbeitslasten.
  3. Kommunizieren. Sagen Sie den Teams, welche Regeln kommen, warum und wie sie befolgt werden sollen.
  4. Schrittweise durchsetzen, Regel für Regel, Namensraum für Namensraum.
  5. Erlaubt dokumentierte Ausnahmen, mit einem Eigentümer und einem Verfallsdatum.

Prüfrichtlinien

  • Kyverno hat eine CLI (kyverno test) um die Politiken gegen Stichprobenressourcen zu betreiben.
  • Die OPA hat opa test für Rego-Einheitstests.
  • Die gleichen Richtlinien in CI Die Entwickler erfahren es, bevor sie den Cluster erreichen.

Also, welcher Motor?

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