|
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. |
Creando una nueva política de validación
Este tutorial cubre la creación de una política que valida las etiquetas de los objetos Pod.
La política es rechazar todos los Pods que utilicen una o más etiquetas en la lista de denegación. La política también valida ciertas etiquetas utilizando una expresión regular proporcionada por el usuario.
Para resumir, la configuración de la política debería verse así:
# List of labels that cannot be used
denied_labels:
- foo
- bar
# Labels that are validated with user-defined regular expressions
constrained_labels:
priority: "[123]"
cost-center: "^cc-\d+"
La política rechaza la creación de este Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
foo: hello world
spec:
containers:
- name: nginx
image: nginx:latest
También rechaza la creación de este Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
cost-center: cc-marketing
spec:
containers:
- name: nginx
image: nginx:latest
Puedes utilizar la configuración de la política para obligar a usar una especificación de etiqueta, independientemente del contenido:
constrained_labels:
mandatory-label: ".*" # <- this label must be present, we don't care about its value
Estructurando un nuevo proyecto de política
Puedes crear un nuevo proyecto de política 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 establece la directiva module en el archivo go.mod para que se vea así:
module <path to your repository>
|
Una política real utilizaría una vía de repositorio, como |
Evaluación
Siempre que las herramientas necesarias estén en su lugar, un comando make test utiliza Docker para descargar una imagen del compilador TinyGo utilizándola para construir y probar la plantilla de política.
El comando make por defecto construye el objetivo policy.wasm. Luego make test ejecuta las pruebas de Go definidas.
El comando make e2e-tests ejecuta pruebas utilizando bats dentro de un clúster Admission Controller.
Después de clonar el go-policy-template, ejecutar estos comandos verifica que tienes las herramientas necesarias para el tutorial.
Salida de los comandos make
make test
docker run \
--rm \
-e GOFLAGS="-buildvcs=false" \
-v /home/jhk/projects/suse/tmp/go-kw-demo:/src \
-w /src tinygo/tinygo:0.30.0 \
tinygo build -o policy.wasm -target=wasi -no-debug .
Unable to find image 'tinygo/tinygo:0.30.0' locally
0.30.0: Pulling from tinygo/tinygo
9aaefb8797c4: Pull complete
24ab7ca26e01: Pull complete
ca4ea8be6361: Pull complete
50380d0859d2: Pull complete
4f4fb700ef54: Pull complete
ea0ddd497f04: Pull complete
01ba28116afb: Pull complete
Digest: sha256:5cbf5e50aec3a00fcff8bb4ae070a07eea8198187a97b21dff6d873d2274ce7a
Status: Downloaded newer image for tinygo/tinygo:0.30.0
go test -v
=== RUN TestParsingSettingsWithNoValueProvided
--- PASS: TestParsingSettingsWithNoValueProvided (0.00s)
=== RUN TestIsNameDenied
--- PASS: TestIsNameDenied (0.00s)
=== RUN TestEmptySettingsLeadsToApproval
NATIVE: |{"level":"debug","message":"validating pod object","name":"test-pod","namespace":"default"}
|
--- PASS: TestEmptySettingsLeadsToApproval (0.00s)
=== RUN TestApproval
NATIVE: |{"level":"debug","message":"validating pod object","name":"test-pod","namespace":"default"}
|
--- PASS: TestApproval (0.00s)
=== RUN TestApproveFixture
NATIVE: |{"level":"debug","message":"validating pod object","name":"test-pod","namespace":"default"}
|
--- PASS: TestApproveFixture (0.00s)
=== RUN TestRejectionBecauseNameIsDenied
NATIVE: |{"level":"debug","message":"validating pod object","name":"test-pod","namespace":"default"}
|
NATIVE: |{"level":"info","message":"rejecting pod object","name":"test-pod","denied_names":"foo,test-pod"}
|
--- PASS: TestRejectionBecauseNameIsDenied (0.00s)
PASS
ok github.com/kubewarden/go-policy-template 0.004s
y
make e2e-tests
bats e2e.bats
e2e.bats
✓ reject because name is on deny list
✓ accept because name is not on the deny list
✓ accept because the deny list is empty
3 tests, 0 failures