Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Esta es documentación inédita para Admission Controller 1.34-dev.

Migración de ValidatingAdmissionPolicy

A partir de Kubernetes v1.26, el ValidatingAdmissionPolicy proporciona una forma de escribir políticas de admisión personalizadas en Kubernetes. Las políticas se escriben con el Common Expression Language (CEL), ampliadas con algunas extensiones específicas de Kubernetes. ValidatingAdmissionPolicy alcanzó la estabilidad en Kubernetes v1.30.

SUSE Security Admission Controller proporciona una política CEL que es capaz de ejecutar políticas VAP de Kubernetes sin ninguna modificación. Puedes leer más sobre la política CEL en esta sección de la documentación de Admission Controller. Este párrafo explica los beneficios de ejecutar políticas VAP utilizando Admission Controller.

Esta guía explica cómo usar la herramienta kwctl para migrar una política VAP a Admission Controller.

Pasos de migración

Debes usar la versión 1.14.0 o posterior de kwctl para seguir esta guía.

Dado un archivo que contiene esta definición YAML de un ValidatingAdmissionPolicy:

Definición de ValidatingAdmissionPolicy
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

Y un archivo que contiene el recurso ValidatingAdmissionPolicyBinding:

Definición de ValidatingAdmissionPolicyBinding
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

Puedes migrar la política a Admission Controller siguiendo estos pasos:

Comando kwctl para la migración de la política
$ kwctl scaffold vap \
    -p vap.yml \
    -b vap-binding.yml

El comando produce una salida similar a esta:

Salida de la migración
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

El comando advierte al usuario sobre el uso de la versión latest de la política 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.

Se recomienda utilizar una versión específica para evitar cambios disruptivos.

Puedes hacerlo utilizando la opción --cel-policy, así:

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