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.36-dev.

Creando una nueva directiva de validación

Este tutorial cubre la creación de una directiva que valida los nombres de host de los objetos Pod.

La directiva es rechazar todos los Pods que utilicen uno o más nombres de host en la lista de denegación. Proporcionas la configuración de la directiva utilizando ajustes en tiempo de ejecución.

Para resumir, los ajustes de la directiva deberían verse así:

denied_hostnames:
  - bad-host
  - forbidden-host

La directiva rechaza la creación de este Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  hostname: bad-host
  containers:
    - name: nginx
      image: nginx:latest

Sin embargo, acepta la creación de este Pod:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  hostname: allowed-host
  containers:
    - name: nginx
      image: nginx:latest

Estructurando un nuevo proyecto de directiva

Puedes crear un nuevo proyecto de directiva utilizando el repositorio de plantilla. Selecciona el botón verde "Usar esta plantilla" cerca de la parte superior de la página y sigue el asistente de GitHub. Clona el repositorio localmente y actualiza el archivo package.json para reflejar los detalles de tu directiva:

{
  "name": "your-policy-name",
  "version": "1.0.0",
  "description": "Your policy description",
  "repository": {
    "type": "git",
    "url": "https://github.com/your-username/your-policy-name"
  }
}

Asegúrate de utilizar una vía de repositorio que coincida con tu repositorio real de GitHub.

Evaluación

Siempre que las herramientas necesarias estén en su lugar, el comando make all construye el objetivo annotated-policy.wasm. El comando make e2e ejecuta pruebas utilizando bats con kwctl.

Salida de los comandos make
make all
npx webpack --config webpack.config.cjs
asset bundled.js 5.52 KiB [compared for emit] [minimized] (name: main)
asset types.d.ts 430 bytes [compared for emit]
asset index.d.ts 11 bytes [compared for emit]
./src/index.ts 3.84 KiB [built] [code generated]
./node_modules/kubewarden-policy-sdk/dist/bundle.js 3.85 KiB [built] [code generated]
webpack 5.101.3 compiled successfully in 2280 ms
npm install
up to date, audited 400 packages in 2s
58 packages are looking for funding
  run `+npm fund+` for details

found 0 vulnerabilities
make e2e
npx webpack --config webpack.config.cjs
asset bundled.js 5.52 KiB [compared for emit] [minimized] (name: main)
asset types.d.ts 430 bytes [compared for emit]
asset index.d.ts 11 bytes [compared for emit]
./src/index.ts 3.84 KiB [built] [code generated]
./node_modules/kubewarden-policy-sdk/dist/bundle.js 3.85 KiB [built] [code generated]
webpack 5.101.3 compiled successfully in 1909 ms
bats e2e.bats
e2e.bats
 ✓ reject because hostname is on the deny list
 ✓ accept because hostname is not on the deny list
 ✓ accept because the deny list is empty
 ✓ accept because pod has no hostname set
 ✓ accept non-pod resources

5 tests, 0 failures