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.

Escribir directivas en Go

El soporte de Go para WebAssembly está evolucionando rápidamente. Esta página fue revisada por última vez en diciembre de 2023.

El compilador oficial de Go puede producir binarios de WebAssembly, para ejecución fuera de un navegador, desde la versión v1.21.

Hay otro compilador de Go que puede construir binarios de WebAssembly utilizables por SUSE Security Admission Controller. Este proyecto de compilador es TinyGo:

TinyGo lleva el lenguaje de programación Go a sistemas embebidos y a la web moderna creando un nuevo compilador basado en LLVM.

Puedes compilar y ejecutar programas de TinyGo en más de 94 placas de microcontroladores diferentes, como la BBC micro:bit y el Arduino Uno.

TinyGo también puede producir código WebAssembly (Wasm) que es muy compacto en tamaño. Puedes compilar programas para navegadores web, así como para entornos de computación en servidor y en el borde que soportan la familia de interfaces del Sistema de Interfaces WebAssembly (WASI).

El proyecto Admission Controller actualmente sugiere usar TinyGo por dos razones:

  • los binarios son más pequeños

  • soporte para waPC por la capacidad de exportar funciones al tiempo de ejecución

Limitaciones de TinyGo

TinyGo aún no soporta todas las características de Go, consulta la página de soporte del lenguaje TinyGo para ver el estado actual del proyecto. Actualmente, su mayor limitación es la falta de un paquete reflect totalmente compatible. Esto significa que los tipos de API de Go de Kubernetes oficiales (por ejemplo: k8s.io/api/core/v1) no se compilan.

Las directivas Admission Controller necesitan procesar datos JSON como la configuración de directivas y la solicitud recibida por Kubernetes.

A pesar de las limitaciones actuales de TinyGo, sigue siendo fácil escribir directivas de validación Admission Controller con él.

Herramientas

Escribir directivas Admission Controller requiere una versión de TinyGo mayor que v0.28.1. Sin embargo, utiliza la última versión para obtener los mejores resultados.

Usar versiones antiguas de TinyGo resulta en errores de tiempo de ejecución debido al soporte limitado para la reflexión de Go.

Estas bibliotecas de Go son útiles al escribir una directiva Admission Controller:

  • Admission Controller Go SDK: Proporciona estructuras y funciones que reducen la cantidad de código necesario. También proporciona ayudantes de prueba.

  • tipos de Go de Kubernetes: Los tipos de Go oficiales de Kubernetes no se pueden usar con TinyGo. Este módulo proporciona todos los tipos de Kubernetes de una manera compatible con TinyGo.

  • gjson: Esto proporciona un lenguaje de consulta para una navegación rápida de documentos JSON y recuperación de datos. Esta biblioteca no utiliza el paquete encoding/json proporcionado por el stdlib de Go, por lo tanto, es utilizable con TinyGo.

  • mapset: Proporciona una implementación en Go de la estructura de datos Set. Esta biblioteca reduce la cantidad de código a escribir, ya que operaciones como Set union, intersection, difference son operaciones comunes en directivas Admission Controller.

Por último, el proyecto Admission Controller proporciona un proyecto de directiva Go de plantilla que puedes usar para crear directivas Go Admission Controller.

Obteniendo dependencias de TinyGo

La forma más fácil de obtener TinyGo es utilizando las imágenes de contenedor de sentido ascendente. Las versiones oficiales están aquí, mientras que las compilaciones de la rama de desarrollo se envían automáticamente aquí.

Si es necesario, consulta la página de introducción de TinyGo para más información.

Requisitos previos del tutorial

Durante este tutorial necesitas estas herramientas en tu máquina de desarrollo:

  • docker u otro motor de contenedor: se utiliza para construir la directiva de WebAssembly. Estarás utilizando el compilador incluido en la imagen de contenedor oficial de TinyGo.

  • bats: se utiliza para escribir las pruebas y automatizar su ejecución.

  • kwctl: Herramienta CLI proporcionada por Admission Controller para ejecutar sus directivas fuera de Kubernetes, entre otras acciones. Está cubierto en esta sección de la documentación.