|
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. |
WASI
La Interfaz del Sistema WebAssembly (WASI) es un estándar de WebAssembly que proporciona un conjunto de interfaces que permiten la ejecución de WebAssembly fuera del navegador.
|
Los autores que escriben directivas regulares nunca deben usar interfaces de sistema WASI simples para escribir directivas. Esta página es para SUSE Security Admission Controller mantenedores o autores de directivas de bajo nivel que quieren experimentar con plataformas de WASM de vanguardia. |
Usando WASI, puedes tener un módulo de WebAssembly que interactúe con primitivas del sistema como STDOUT, STDERR, STDIN, variables de entorno y más.
Muchos de los compiladores utilizados para compilar directivas de Admission Controller producen módulos de WebAssembly que apuntan a interfaces de WASI.
Sin embargo, las directivas de Admission Controller utilizan el proyecto waPC para implementar comunicación bidireccional entre la directiva y el tiempo de ejecución de la directiva (kwctl o policy-server). Admission ControllerEl uso del protocolo de comunicación se describe aquí.
Hay casos especiales en los que el proyecto waPC aún no puede ser utilizado. En estas circunstancias, puedes escribir una directiva utilizando las interfaces proporcionadas por WASI.
|
Admission Controller admite políticas de WASI desde la versión Admission Controller 1.7.0 en adelante. |
limitaciones
No deberías usar directivas WASI en circunstancias normales porque tienen un rendimiento inferior en tiempo de evaluación en comparación con las de waPC/Rego.
|
La comunicación bidireccional entre la directiva y el host se puede lograr, pero requiere cambios que deben hacerse dentro del SDK del lenguaje. Esto es necesario para usar capacidades del host y para escribir directivas conscientes del contexto. Actualmente, solo los SDK de Admission Controller Go y JavaScript/TypeScript los exponen a directivas WASI. Si esto es de tu interés, por favor, ponte en contacto. Entonces podemos priorizar el esfuerzo. |
Casos de uso
La única razón para escribir una directiva "plain WASI" es cuando no puedes utilizar el mecanismo de comunicación waPC.
Actualmente, (a partir de junio de 2023), la única buena razón para hacer esto es al utilizar el compilador oficial de Go para producir un módulo WebAssembly.
A partir de la versión 1.21, el compilador oficial de Go es capaz de producir módulos WebAssembly que apuntan a la interfaz WASI. Sin embargo, estos módulos aún no pueden exportar funciones al tiempo de ejecución de WebAssembly. Esta limitación, registrada en este problema dedicado, impide la adopción del protocolo waPC.
El equipo del proyecto Admission Controller aconseja que escribas Admission Controller directivas de Go utilizando el compilador TinyGo, como se describe aquí.
Protocolo de comunicación
Esta sección describe cómo escribir una directiva WASI sencilla.
Necesitas escribir el código como un programa CLI regular. El programa debe aceptar los siguientes subcomandos:
-
validate: este comando es invocado por el motor de directivas para evaluar una solicitud de admisión. -
validate-settings: este comando es invocado por el motor de directivas para validar la configuración de la directiva.
En ambos casos, los datos a validar se proporcionan a través de STDIN. La directiva debe proporcionar la respuesta a través de STDOUT. Puedes utilizar STDERR para mensajes de depuración o errores.
Validación
La validación de una solicitud ocurre al invocar el programa CLI de la directiva utilizando el subcomando validate.
STDIN debe contener un documento JSON que describa un objeto ValidationRequest.
La directiva debe escribir en STDOUT un documento JSON que contenga un objeto ValidationResponse.
Tanto el objeto ValidationRequest como el objeto ValidationResponse están descritos aquí.
Mutación
Las directivas de mutación funcionan de la misma manera que las de validación.
El programa CLI de la directiva se invoca utilizando el subcomando validate.
STDIN debe contener un documento JSON que describa un objeto ValidationRequest.
La directiva debe escribir en STDOUT un documento JSON que contenga un objeto ValidationResponse.
Tanto el objeto ValidationRequest como el objeto ValidationResponse están descritos aquí.
Cuando se necesita una mutación, el objeto ValidationResponse debe tener una clave, mutated_object, que contenga el objeto a crear.
Este proceso está descrito aquí.
Context-aware
Solo es compatible a través del SDK de Go por ahora. El SDK de Go expone las capacidades conscientes del contexto como de costumbre, para más información ver aquí.
Como ejemplo de una directiva consciente del contexto de WASI Go, ver la directiva-de-prueba-consciente-del-contexto-go-wasi.
Validación de configuraciones
La directiva debe proporcionar un subcomando llamado validate-settings.
Este comando se utiliza para validar las configuraciones proporcionadas por el usuario.
El programa debe recibir en STDIN un objeto JSON que contenga las configuraciones proporcionadas por el usuario.
Luego las valida y escribe un objeto SettingsValidationResponse en STDOUT.
El formato del SettingsValidationResponse y el proceso de validación de configuraciones está descrito aquí.
Metadatos de la directiva
Cada directiva Admission Controller debe ser anotada a través del comando kwctl annotate.
Los metadatos de la directiva de una directiva WASI sencilla deben tener este valor:
executionMode: wasi
Proyecto de plantilla
Este repositorio de GitHub contiene una plantilla de una directiva basada en Go utilizando el protocolo WASI.