本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

这是尚未发布的文档。 Admission Controller 1.34-dev.

构建并运行 Admission Controller 的 OPA 策略

在上一节中,您编写了您的 Rego 策略。 结构如下:

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

1 directory, 4 files

构建

要构建:

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

这将构建 Rego 策略,包含:

  • target: wasm。 您想为 wasm 目标构建策略。

  • entrypoint: policy/main。 入口点是 main 软件包中的 policy 规则。

  • policy.rego: 构建并包含 policy.rego 文件。

  • request.rego: 构建并包含 request.rego 文件。

构建完成后,opa build 生成了 bundle.tar.gz 文件。 您可以提取它:

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

现在树的结构如下:

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

1 directory, 6 file

您的 policy.wasm 文件:

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

现在您运行它。

运行

使用 kwctl 运行策略:

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

此请求被策略接受,因为这是指向 other 名称空间的请求。

  • execution-mode: opa。 Rego 策略可以针对 Open Policy Agent 或 Gatekeeper。 您必须告诉 kwctl 您正在运行什么类型的策略。

  • request-path: 这是 kwctl 发送请求至策略进行评估的记录位置。

现在尝试评估在 default 名称空间内创建 pod 的请求:

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

该策略拒绝了该请求,并向 API 服务器反馈原因,后者会将其返回给用户或 API 消费者。