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.

Construir y ejecutar una política OPA para Admission Controller

En la sección anterior escribiste tu política Rego. La estructura se ve como:

.
├── data
│   ├── default-ns.json
│   └── other-ns.json
├── policy.rego
└── request.rego

1 directory, 4 files

Construir

Para construir:

$ opa build -t wasm -e policy/main policy.rego request.rego

Esto construye la directiva de Rego, con:

  • target: wasm. Quieres construir la política para el objetivo wasm.

  • entrypoint: policy/main. El punto de entrada es la regla main dentro del paquete policy.

  • policy.rego: Construir e incluir el archivo policy.rego.

  • request.rego: Construir e incluir el archivo request.rego.

Después de que la construcción se complete, opa build ha generado un archivo bundle.tar.gz. Puedes extraerlo:

$ tar -xf bundle.tar.gz /policy.wasm

Ahora el árbol se ve como el siguiente:

.
├── bundle.tar.gz
├── data
│   ├── default-ns.json
│   └── other-ns.json
├── policy.rego
├── policy.wasm
└── request.rego

1 directory, 6 file

Tienes tu archivo policy.wasm:

$ file policy.wasm
policy.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)

Ahora lo ejecutas.

Ejecute:

Usa kwctl para ejecutar la política:

$ kwctl run -e opa --request-path data/other-ns.json policy.wasm | jq
{
  "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
  "allowed": true
}

Esta solicitud es aceptada por la política, ya que esta es la solicitud que apunta al espacio de nombres other.

  • execution-mode: opa. Las políticas Rego pueden estar dirigidas a Open Policy Agent o Gatekeeper. Debes decirle a kwctl qué tipo de política estás ejecutando.

  • request-path: La ubicación de la solicitud registrada a la que kwctl envía la política para su evaluación.

Ahora intenta evaluar la solicitud que crea el pod dentro del espacio de nombres default:

$ kwctl run -e opa --request-path data/default-ns.json policy.wasm | jq
{
  "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
  "allowed": false,
  "status": {
    "message": "it is forbidden to use the default namespace"
  }
}

La política está rechazando la solicitud, dando una razón de vuelta al servidor API que se devuelve al usuario o consumidor de la API.