Ce document a été traduit à l'aide d'une technologie de traduction automatique. Bien que nous nous efforcions de fournir des traductions exactes, nous ne fournissons aucune garantie quant à l'exhaustivité, l'exactitude ou la fiabilité du contenu traduit. En cas de divergence, la version originale anglaise prévaut et fait foi.

Il s'agit d'une documentation non publiée pour Admission Controller 1.34-dev.

Migration de la stratégie ValidatingAdmissionPolicy

À partir de Kubernetes v1.26, le ValidatingAdmissionPolicy fournit un moyen d’écrire des politiques d’admission personnalisées dans Kubernetes. Les politiques sont écrites avec le Common Expression Language (CEL), étendues avec quelques extensions spécifiques à Kubernetes. La stratégie ValidatingAdmissionPolicy a atteint la stabilité dans Kubernetes v1.30.

SUSE Security Admission Controller fournit une stratégie CEL capable d’exécuter des stratégies VAP Kubernetes sans aucune modification. Vous pouvez en savoir plus sur la stratégie CEL dans cette section de la documentation de Admission Controller. Ce paragraphe explique les avantages de l’exécution des stratégies VAP en utilisant Admission Controller.

Ce guide explique comment utiliser l’outil kwctl pour migrer une stratégie VAP vers Admission Controller.

Étapes de migration

Vous devez utiliser la version 1.14.0 ou ultérieure de kwctl pour suivre ce guide.

Étant donné un fichier contenant cette définition YAML d’un ValidatingAdmissionPolicy :

ValidatingAdmissionPolicy Définition de
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

Et un fichier contenant la ValidatingAdmissionPolicyBinding ressource:

ValidatingAdmissionPolicyBinding Définition de
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

Vous pouvez migrer la stratégie vers Admission Controller en suivant ces étapes :

kwctl commande pour la migration de la stratégie
$ kwctl scaffold vap \
    -p vap.yml \
    -b vap-binding.yml

La commande produit une sortie similaire à ceci :

Sortie de la 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

La commande avertit l’utilisateur concernant l’utilisation de latest la version de la stratégie CEL :

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.

Il est recommandé d’utiliser une version spécifique pour éviter des changements incompatibles.

Vous pouvez le faire en utilisant --cel-policy l’option, comme ceci :

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