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

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

编写原始策略

原始策略是可以评估任意 JSON 文档的策略。 有关原始策略的更多信息,请参阅raw policies页面。

示例

如果您完成了本教程的 validation 页面,以下示例应该很熟悉。

请记得通过在 raw 配置中的 policyType 字段中使用 metadata.yml 来标记该策略。 有关更多信息,请参阅metadata规范。

Validation

您将编写一个接受以下格式请求的策略:

{
  "request": {
    "user": "alice",
    "action": "read",
    "resource": "products"
  }
}

它验证只有 admin 用户可以删除资源。

首先使用 OPA policy template 来搭建一个策略。

首先,您需要将 policy.rego 文件更改为如下所示:

package validation

deny[msg] {
    input.request.action == "delete"
    input.request.user != "admin"
    msg := sprintf("user %v is not allowed to delete resources", [input.request.user])
}

utility/policy.rego 模块需要修改以去除特定于 Kubernetes 的代码:

package policy

import data.validation

main = {
    "response": response,
}

# OPA policy responses need the uid field to be set.
# If the request doesn't contain a uid, set it to an empty string.
default uid = ""

uid = input.request.uid

response = {
    "uid": uid,
    "allowed": false,
    "status": {"message": reason},
} {
    reason = concat(", ", validation.deny)
    reason != ""
} else = {
    "uid": uid,
    "allowed": true,
} {
    true
}