Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.34-dev.

Migration der ValidatingAdmissionPolicy

Ab Kubernetes v1.26 bietet die ValidatingAdmissionPolicy eine Möglichkeit, benutzerdefinierte Zulassungsrichtlinien in Kubernetes zu schreiben. Die Richtlinien werden mit dem Common Expression Language (CEL) geschrieben, erweitert um einige Kubernetes-spezifische Erweiterungen. Die ValidatingAdmissionPolicy erreichte Stabilität in Kubernetes v1.30.

SUSE Security Admission Controller bietet eine CEL-Richtlinie, die in der Lage ist, Kubernetes VAP-Richtlinien ohne Änderungen auszuführen. Sie können mehr über die CEL-Richtlinie in diesem Abschnitt der Dokumentation von Admission Controller lesen. Dieser Absatz erklärt die Vorteile der Ausführung von VAP-Richtlinien mit Admission Controller.

Dieser Leitfaden erklärt, wie Sie das kwctl-Tool verwenden, um eine VAP-Richtlinie zu Admission Controller zu migrieren.

Migrationsschritte

Sie müssen die Version 1.14.0 oder höher von kwctl verwenden, um diesem Leitfaden zu folgen.

Gegeben ist eine Datei, die diese YAML-Definition eines ValidatingAdmissionPolicy enthält:

ValidatingAdmissionPolicy Definition
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: "force-liveness-probe"
spec:
  failurePolicy: Fail
  variables:
    - name: containers_without_liveness_probe
      expression: |
        object.spec.template.spec.containers.filter(c, !has(c.livenessProbe)).map(c, c.name)
  matchConstraints:
    resourceRules:
      - apiGroups: ["apps"]
        apiVersions: ["v1"]
        operations: ["CREATE", "UPDATE"]
        resources: ["deployments"]
  validations:
    - expression: |
        size(variables.containers_without_liveness_probe) == 0
      messageExpression: |
        'These containers are missing a liveness probe: ' + variables.containers_without_liveness_probe.join(' ')
      reason: Invalid

Und eine Datei, die die ValidatingAdmissionPolicyBinding-Ressource enthält:

ValidatingAdmissionPolicyBinding Definition
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
  name: "kw-scaffold-demo"
spec:
  policyName: "force-liveness-probe"
  validationActions: [Deny]
  matchResources:
    namespaceSelector:
      matchLabels:
        docs.kubewarden.io/vap-migration: enabled

Sie können die Richtlinie zu Admission Controller migrieren, indem Sie diese Schritte befolgen:

kwctl Befehl zur Richtlinienmigration
$ kwctl scaffold vap \
    -p vap.yml \
    -b vap-binding.yml

Der Befehl erzeugt eine Ausgabe, die dieser ähnelt:

Ausgabe der Migration
apiVersion: policies.kubewarden.io/v1
kind: ClusterAdmissionPolicy
metadata:
  name: kw-scaffold-demo
spec:
  module: ghcr.io/kubewarden/policies/cel-policy:latest
  settings:
    failurePolicy: Fail
    variables:
      - expression: |
          object.spec.template.spec.containers.filter(c, !has(c.livenessProbe)).map(c, c.name)
        name: containers_without_liveness_probe
    validations:
      - expression: |
          size(variables.containers_without_liveness_probe) == 0
        messageExpression: |
          'These containers are missing a liveness probe: ' + variables.containers_without_liveness_probe.join(' ')
        reason: Invalid
  rules:
    - apiGroups:
        - apps
      apiVersions:
        - v1
      resources:
        - deployments
      operations:
        - CREATE
        - UPDATE
  mutating: false
  namespaceSelector:
    matchLabels:
      docs.kubewarden.io/vap-migration: enabled

Der Befehl warnt den Benutzer vor der Verwendung der latest-Version der CEL-Richtlinie:

024-06-24T16:00:16.516062Z  WARN kwctl::scaffold:
  Using the 'latest' version of the CEL policy could lead to unexpected behavior.
  It is recommended to use a specific version to avoid breaking changes.

Es wird empfohlen, eine spezifische Version zu verwenden, um inkompatible Änderungen zu vermeiden.

Sie können dies mit dem --cel-policy-Schalter wie folgt tun:

$ kwctl scaffold vap \
    --cel-policy ghcr.io/kubewarden/policies/cel-policy:v1.0.1 \
    -p vap.yml \
    -b vap-binding.yml