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.

Distribuyendo una política de OPA con SUSE Security Admission Controller

Has escrito, construido y ejecutado tu política de Rego. Ahora es el momento de distribuir la política.

Las políticas deben ser anotadas, para que puedan ejecutarse en el policy-server. El policy-server es la parte que ejecuta las políticas, cuando se ejecuta en un clúster de Kubernetes.

Anotando la directiva

Anotar una política es un proceso que enriquece los metadatos de la política con información relevante. Información como autoría, licencia, ubicación del código fuente, reglas, que describen qué tipo de recursos entiende y evalúa esta política.

Para anotar tu política necesitas escribir un archivo metadata.yaml:

rules:
- apiGroups: [""]
  apiVersions: ["*"]
  resources: ["*"]
  operations: ["CREATE"]
mutating: false
contextAware: false
executionMode: opa
annotations:
  io.kubewarden.policy.title: no-default-namespace
  io.kubewarden.policy.version: 0.1.0 # should match the OCI tag
  io.kubewarden.policy.description: This policy will reject any resource created inside the default namespace
  io.kubewarden.policy.author: The SUSE Security Admission Controller Authors
  io.kubewarden.policy.url: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.source: https://github.com/kubewarden/some-policy
  io.kubewarden.policy.license: Apache-2.0
  io.kubewarden.policy.usage: |
      This policy is just an example.

      You can write interesting descriptions about the policy here.

Puedes ver varios detalles:

  • Reglas: Qué recursos tiene como objetivo esta política.

  • Mutando: Si esta política está mutando. En este caso, solo está validando.

  • Consciente del contexto: Si esta política requiere contexto del clúster para evaluar la solicitud.

  • Modo de ejecución: Dado que esta es una política de Rego, es obligatorio especificar qué modo de ejecución espera, opa o gatekeeper. Esta política está escrita en el estilo opa, devolviendo un objeto AdmissionReview completo.

  • Anotaciones: Metadatos almacenados en la propia política.

Adelante, anota tu política:

$ kwctl annotate policy.wasm --metadata-path metadata.yaml --output-path annotated-policy.wasm

Ahora puedes inspeccionar la política ejecutando kwctl inspect annotated-policy.wasm.

Enviando la directiva

Ahora que la política está anotada, puedes subirla a un registro OCI.

$ kwctl push annotated-policy.wasm registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
Policy successfully pushed

Tu política de Rego, dirigida al marco OPA, tiene todo lo que necesita para ser ampliada en producción, creando un ClusterAdmissionPolicy. También puedes preparar eso. Primero necesitas descargar la política en el almacén local kwctl:

$ kwctl pull registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1
pulling policy...

Crea un ClusterAdmissionPolicy a partir de ella. Esta operación tiene en cuenta los metadatos que tiene sobre la política:

$ kwctl manifest registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1 --type ClusterAdmissionPolicy
---
apiVersion: policies.kubewarden.io/v1alpha2
kind: ClusterAdmissionPolicy
metadata:
  name: generated-policy
spec:
  module: "registry://registry.my-company.com/kubewarden/no-default-namespace:v0.0.1"
  settings: {}
  rules:
    - apiGroups:
        - ""
      apiVersions:
        - "*"
      resources:
        - "*"
      operations:
        - CREATE
  mutating: false

Ahora puedes usar este ClusterAdmissionPolicy como base para dirigirte a los recursos que deseas, o desplegar en Kubernetes tal como está.