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

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

构建并运行 Gatekeeper 策略

您可以以与针对 Open Policy Agent 的 Rego 策略完全相同的方式构建并运行该策略。 您的项目结构为:

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

1 directory, 3 files

构建

通过运行 opa 命令构建策略:

$ opa build -t wasm -e policy/violation policy.rego

这将构建 Rego 策略,包含:

  • target: wasm。我们希望为 wasm 目标构建该策略。

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

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

之前的命令生成了一个 bundle.tar.gz 文件。 您可以从中提取 Wasm 模块:

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

项目树如下所示:

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

1 directory, 5 files

您现在可以执行您的策略。

运行

使用 kwctl 按如下方式运行您的策略:

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

这是您在名为 other 的名称空间中创建的资源,它已被接受,正如预期的那样。

现在您可以运行一个被策略拒绝的请求:

$ kwctl run -e gatekeeper --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"
  }
}

您可以看到您的 Gatekeeper 策略拒绝了这个资源。