Dies ist eine unveröffentlichte Dokumentation für Admission Controller 1.37-dev.

Erstellen und führen Sie eine OPA-Richtlinie für Admission Controller aus.

Im vorherigen Abschnitt haben Sie Ihre Rego-Richtlinie geschrieben. Die Struktur sieht wie folgt aus:

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

1 directory, 4 files

Erstellen

Zum Erstellen:

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

Dies erstellt die Rego-Richtlinie mit:

  • target: wasm. Sie möchten die Richtlinie für das wasm Ziel erstellen.

  • entrypoint: policy/main. Der Einstiegspunkt ist die main Regel innerhalb des policy Pakets.

  • policy.rego: Erstellen und fügen Sie die policy.rego Datei ein.

  • request.rego: Erstellen und fügen Sie die request.rego Datei ein.

Nachdem der Build abgeschlossen ist, hat opa build eine bundle.tar.gz Datei generiert. Sie können sie extrahieren:

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

Jetzt sieht der Baum wie folgt aus:

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

1 directory, 6 file

Sie haben Ihre policy.wasm Datei:

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

Jetzt führen Sie sie aus.

Führen Sie folgendes Kommando aus:

Verwenden Sie kwctl, um die Richtlinie auszuführen:

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

Diese Anfrage wird von der Richtlinie akzeptiert, da dies die Anfrage ist, die auf den other Namespace verweist.

  • execution-mode: opa. Rego-Richtlinien können auf Open Policy Agent oder Gatekeeper abzielen. Sie müssen kwctl mitteilen, welche Art von Richtlinie Sie ausführen.

  • request-path: Der Standort der aufgezeichneten Anfrage, an die kwctl die Richtlinie zur Bewertung sendet.

Versuchen Sie nun, die Anfrage zu bewerten, die den Pod im default Namespace erstellt:

$ 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"
  }
}

Die Richtlinie lehnt die Anfrage ab und gibt einen Grund an den API-Server zurück, der an den Benutzer oder API-Konsumenten weitergeleitet wird.