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.

Construa e execute uma política OPA para Admission Controller

Na seção anterior, você escreveu sua política Rego. A estrutura é parecida com:

.
├── data
│   ├── default-ns.json
│   └── other-ns.json
├── policy.rego
└── request.rego

1 directory, 4 files

Construir

Para construir:

$ opa build -t wasm -e policy/main policy.rego request.rego

Isso constrói a política Rego, com:

  • target: wasm. Você quer construir a política para o alvo wasm.

  • entrypoint: policy/main. O ponto de entrada é a regra main dentro do pacote policy.

  • policy.rego: Construa e inclua o arquivo policy.rego.

  • request.rego: Construa e inclua o arquivo request.rego.

Após a conclusão da construção, opa build gerou um arquivo bundle.tar.gz. Você pode extraí-lo:

$ tar -xf bundle.tar.gz /policy.wasm

Agora a árvore se parece com o seguinte:

.
├── bundle.tar.gz
├── data
│   ├── default-ns.json
│   └── other-ns.json
├── policy.rego
├── policy.wasm
└── request.rego

1 directory, 6 file

Você tem seu arquivo policy.wasm:

$ file policy.wasm
policy.wasm: WebAssembly (wasm) binary module version 0x1 (MVP)

Agora você o executa.

Execute:

Use kwctl para executar a política:

$ kwctl run -e opa --request-path data/other-ns.json policy.wasm | jq
{
  "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
  "allowed": true
}

Esta solicitação é aceita pela política, pois esta é a solicitação que aponta para o namespace other.

  • execution-mode: opa. As políticas Rego podem ser direcionadas ao Open Policy Agent ou ao Gatekeeper. Você deve informar kwctl que tipo de política você está executando.

  • request-path: A localização da solicitação gravada que kwctl envia a política para avaliação.

Agora tente avaliar a solicitação que cria o pod dentro do namespace default:

$ kwctl run -e opa --request-path data/default-ns.json policy.wasm | jq
{
  "uid": "1299d386-525b-4032-98ae-1949f69f9cfc",
  "allowed": false,
  "status": {
    "message": "it is forbidden to use the default namespace"
  }
}

A política está rejeitando a solicitação, dando uma razão de volta ao servidor da API que é retornada ao usuário ou consumidor da API.