Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Esta é uma documentação não divulgada para Admission Controller 1.34-dev.

Migração de ValidatingAdmissionPolicy

A partir do Kubernetes v1.26, o ValidatingAdmissionPolicy fornece uma maneira de escrever políticas de admissão personalizadas no Kubernetes. As políticas são escritas com o Common Expression Language (CEL), estendidas com algumas extensões específicas do Kubernetes. A ValidatingAdmissionPolicy alcançou estabilidade no Kubernetes v1.30.

SUSE Security Admission Controller fornece uma política CEL que é capaz de executar políticas VAP do Kubernetes sem nenhuma modificação. Você pode ler mais sobre a política CEL na esta seção da documentação de Admission Controller. Este parágrafo explica os benefícios de executar políticas VAP usando Admission Controller.

Este guia explica como usar a ferramenta kwctl para migrar uma política VAP para Admission Controller.

Etapas de migração

Você deve usar a versão 1.14.0 ou posterior do kwctl para seguir este guia.

Dado um arquivo contendo esta definição YAML de um ValidatingAdmissionPolicy:

ValidatingAdmissionPolicy definição 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

E um arquivo contendo o ValidatingAdmissionPolicyBinding recurso:

ValidatingAdmissionPolicyBinding definição 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

Você pode migrar a política para Admission Controller seguindo estes passos:

kwctl comando para migração de política
$ kwctl scaffold vap \
    -p vap.yml \
    -b vap-binding.yml

O comando produz uma saída semelhante a esta:

Saída da migração
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

O comando avisa o usuário sobre o uso da latest versão da 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.

É recomendável usar uma versão específica para evitar mudanças que quebrem a compatibilidade.

Você pode fazer isso usando a --cel-policy flag, assim:

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