1

在开放策略代理 ( https://www.openpolicyagent.org/ )

关于 Kubernetes,取决于使用的引擎:

或者

定义验证规则有不同的方法:

似乎 OPA 约束框架将其定义为violationhttps ://github.com/open-policy-agent/frameworks/tree/master/constraint#rule-schema

那么这背后的确切“故事”是什么,为什么不同引擎之间不一致?

笔记:

4

1 回答 1

2

Plain OPA 对您如何选择命名规则没有意见。使用deny只是本教程中的约定。真正的 Kubernetes 录取审查响应将如下所示:

{
  "kind": "AdmissionReview",
  "apiVersion": "admission.k8s.io/v1beta1",
  "response": {
    "allowed": false,
    "status": {
      "reason": "container image refers to illegal registry (must be hooli.com)"
    }
  }
}

因此,无论您选择命名规则,响应都需要转换为上述响应,然后再发送回 Kubernetes API 服务器。如果您在 Kubernetes 入门文档的详细准入控制流程部分向下滚动一点,您将看到此转换是如何在system.main规则中完成的:

package system

import data.kubernetes.admission

main = {
  "apiVersion": "admission.k8s.io/v1beta1",
  "kind": "AdmissionReview",
  "response": response,
}

default response = {"allowed": true}

response = {
    "allowed": false,
    "status": {
        "reason": reason,
    },
} {
    reason = concat(", ", admission.deny)
    reason != ""
}

请特别注意“原因”属性是如何通过连接在 中找到的所有字符串来构建的admission.deny

reason = concat(", ", admission.deny)

如果您更愿意violation使用普通 OPA 或其他规则名称,您可以在此处更改它。

于 2021-05-04T20:15:31.293 回答