Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Esta é uma documentação não divulgada para Admission Controller 1.34-dev.

Escrevendo políticas em Go

O suporte do Go para WebAssembly está evoluindo rapidamente. Esta página foi revisada pela última vez em dezembro de 2023.

O compilador oficial do Go pode produzir binários WebAssembly, para execução fora de um navegador, desde a versão v1.21.

Há outro compilador Go que pode construir binários WebAssembly utilizáveis por SUSE Security Admission Controller. Este projeto de compilador é TinyGo:

TinyGo traz a linguagem de programação Go para sistemas embarcados e para a web moderna, criando um novo compilador baseado em LLVM.

Você pode compilar e executar programas TinyGo em mais de 94 placas de microcontroladores diferentes, como o BBC micro:bit e o Arduino Uno.

TinyGo também pode produzir código WebAssembly (Wasm) que é muito compacto em tamanho. Você pode compilar programas para navegadores da web, bem como para ambientes de servidor e computação distribuída que suportam a família de interfaces WebAssembly System Interface (WASI).

O projeto Admission Controller atualmente sugere o uso do TinyGo por duas razões:

  • os binários são menores

  • suporte para waPC pela capacidade de exportar funções para o runtime

Limitações do TinyGo

O TinyGo ainda não suporta todos os recursos do Go, veja a página de suporte à linguagem TinyGo para ver o status atual do projeto. Atualmente, sua maior limitação é a falta de um pacote reflect totalmente suportado. Isso significa que os tipos oficiais de API Go do Kubernetes (por exemplo: k8s.io/api/core/v1) não compilam.

Admission Controller políticas precisam processar dados JSON, como configurações de políticas e a solicitação recebida pelo Kubernetes.

Apesar das limitações atuais do TinyGo, ainda é fácil escrever Admission Controller políticas de validação com ele.

Ferramentas

Escrever Admission Controller políticas requer uma versão do TinyGo superior a v0.28.1. No entanto, use a versão mais recente para obter os melhores resultados.

Usar versões mais antigas do TinyGo resulta em erros de tempo de execução devido ao suporte limitado para reflexão em Go.

Essas bibliotecas Go são úteis ao escrever uma Admission Controller política:

  • Admission Controller Go SDK: Fornece estruturas e funções que reduzem a quantidade de código necessário. Também fornece auxiliares para testes.

  • tipos Go do Kubernetes: Os tipos Go oficiais do Kubernetes não podem ser usados com o TinyGo. Este módulo fornece todos os Tipos do Kubernetes de uma maneira amigável ao TinyGo.

  • gjson: Isso fornece uma linguagem de consulta para navegação rápida de documentos JSON e recuperação de dados. Esta biblioteca não usa o pacote encoding/json fornecido pelo stdlib do Go, portanto, é utilizável com o TinyGo.

  • mapset: Fornece uma implementação em Go da estrutura de dados Set. Esta biblioteca reduz a quantidade de código a ser escrito, pois operações como Set union, intersection, difference são operações comuns em políticas Admission Controller.

Por fim, o Admission Controller projeto fornece um projeto de política Go template que você pode usar para criar políticas Go Admission Controller.

Obtendo dependências do TinyGo

A maneira mais fácil de obter o TinyGo é usando as imagens de contêiner upstream. As versões oficiais estão aqui, enquanto as compilações da branch de desenvolvimento são automaticamente enviadas aqui.

Se necessário, experimente a página de introdução ao TinyGo para mais informações.

Pré-requisitos do tutorial

Durante este tutorial, você precisará dessas ferramentas em sua máquina de desenvolvimento:

  • docker ou outro mecanismo de contêiner: usado para construir a política WebAssembly. Você usará o compilador incluído na imagem de contêiner oficial do TinyGo.

  • bats: usado para escrever os testes e automatizar sua execução.

  • kwctl: Ferramenta CLI fornecida por Admission Controller para executar suas políticas fora do Kubernetes, entre outras ações. Está coberto na esta seção da documentação.