第 6 章 ValidatingAdmissionPolicyBinding [admissionregistration.k8s.io/v1]
- 描述
ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。ValidatingAdmissionPolicyBinding 和参数 CRD 定义了集群管理员如何为集群配置策略。
对于给定的准入请求,每个绑定都会导致评估 N 次,其中 N 是不使用 params 的策略/绑定,否则 N 是绑定选择的参数数。
策略的 CEL 表达式必须在最大 CEL 预算下计算计算 CEL 成本。策略的每个评估都会获得独立的 CEL 成本预算。添加/删除策略、绑定或参数会影响给定(策略、绑定、参数)组合是否在其自身的 CEL 预算内。
- 类型
-
对象
6.1. 规格
属性 | 类型 | 描述 |
---|---|---|
|
| APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 标准对象元数据;更多信息 :https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。 | |
|
| ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规格。 |
6.1.1. .spec
- 描述
- ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规格。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| MatchResources 决定是否根据它是否满足匹配标准在对象上运行准入控制策略。排除规则优先于 include 规则(如果资源同时匹配,则会排除它) |
|
| ParamRef 描述了如何找到 params,以用作由策略绑定应用的规则表达式的输入。 |
|
| policyName 引用 ValidatingAdmissionPolicyBinding 绑定的 ValidatingAdmissionPolicy 名称。如果引用的资源不存在,则此绑定被视为无效,并将会被忽略。 |
|
| validationActions 声明如何强制实施引用的 ValidatingAdmissionPolicy 的 Validations。如果验证评估为 false,则总是根据这些操作强制执行它。 只有在 FailurePolicy 被设置为 Fail 时,由 ValidatingAdmissionPolicy 的 FailurePolicy 定义的失败才会根据这些操作强制实施,否则失败会被忽略。这包括编译错误、运行时错误和策略错误配置。 validationActions 被声明为一组操作值。顺序无关紧要。验证操作可能不包含同一操作的副本。 支持的操作值有: "deny"指定验证失败会导致请求被拒绝。 "warn"指定在 HTTP Warning 标头中向请求客户端报告验证失败,警告代码为 299。对于允许或拒绝的准入响应,可以发送警告。
"audit"指定在请求的已发布的审计事件中包含验证失败。审计事件将包含一个 客户端应该通过忽略任何无法识别的值来处理额外的值。 "拒绝"和"Warn"可能无法一起使用,因为组合需要在 API 响应正文和 HTTP 警告标头中重复验证失败。 必需。 |
6.1.2. .spec.matchResources
- 描述
- MatchResources 决定是否根据它是否满足匹配标准在对象上运行准入控制策略。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应关注哪些资源/子资源的操作。排除规则优先于 include 规则(如果资源同时匹配,则会排除它) |
|
| NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。 |
|
| matchPolicy 定义如何使用 "MatchResources" 列表来匹配传入的请求。允许的值是 "Exact" 或 "Equivalent"。
- exact :仅在与指定规则完全匹配时才匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但 "rules" 仅包含
- equivalent :如果修改规则中列出的资源,即使通过另一个 API 组或版本来匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 和 "rules" 修改部署,则只有 默认为 "Equivalent"
可能枚举值:- |
| namespaceSelector 决定是否根据该对象的命名空间与选择器匹配来在对象上运行准入控制策略。如果对象本身是命名空间,则在 object.metadata.labels 上执行匹配。如果对象是另一个集群范围的资源,则永远不会跳过策略。 例如,要在命名空间没有与 "0" 或 "1" 的 "runlevel" 关联的对象上运行 webhook;您将设置选择器,如下所示: "namespaceSelector": { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] } 如果您希望仅在任何命名空间与 "prod" 或 "staging" 关联的对象上运行策略;您将选择器设置为如下所示: "namespaceSelector": { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] } 有关标签选择器的更多信息,请参阅 https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/。 默认为空 LabelSelector,它将匹配所有内容。 | |
| objectSelector 决定是否根据对象是否匹配标签运行验证。objectSelector 针对发送到 cel 验证的 oldObject 和 newObject 评估,如果任何一个对象与选择器匹配,则被视为匹配。一个 null 对象(如果是 create, 或 newObject in the delete 时),或没有标签(如 DeploymentRollback 或 PodProxyOptions 对象)的对象不会被认为匹配。只有在 webhook 是 opt-in 时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它将匹配所有内容。 | |
|
| resourceRules 描述了 ValidatingAdmissionPolicy 匹配的资源/资源什么操作。如果某个操作 与任何 规则匹配,则策略会监视它。 |
|
| NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。 |
6.1.3. .spec.matchResources.excludeResourceRules
- 描述
- ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应关注哪些资源/子资源的操作。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)
- 类型
-
数组
6.1.4. .spec.matchResources.excludeResourceRules[]
- 描述
- NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| apiGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则片段的长度必须是一。必需。 |
|
| APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则片段的长度必须是一。必需。 |
|
| 操作是准入 hook 为所有操作以及添加的任何准入操作( CREATE、UPDATE、DELETE、CONNECT 或 *)的操作。如果 '*' 存在,则片段的长度必须是一。必需。 |
|
| resourceNames 是一个可选的规则应用到的名称白名单。空集表示所有都会被允许。 |
|
| resources 是一组这个规则应用到的资源列表。 例如: 'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。' ' 表示所有资源,但不是子资源。'pods/' 表示所有 pod 子资源。'/scale' 表示所有 scale 子资源。'Suffix' 表示所有资源及其子资源。 如果存在通配符,验证规则将确保资源不会相互重叠。 根据封闭对象,可能无法允许子资源。必需。 |
|
| scope 指定此规则的范围。有效值为 "Cluster", "Namespaced", 和 "" "Cluster" 表示只有集群范围的资源与此规则匹配。命名空间 API 对象是集群范围的。"namespaced" 表示只有命名空间的资源将与此规则匹配。"" 表示没有范围限制。子资源与其父资源的范围匹配。默认为 "*"。 |
6.1.5. .spec.matchResources.resourceRules
- 描述
- resourceRules 描述了 ValidatingAdmissionPolicy 匹配的资源/资源什么操作。如果某个操作 与任何 规则匹配,则策略会监视它。
- 类型
-
数组
6.1.6. .spec.matchResources.resourceRules[]
- 描述
- NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| apiGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则片段的长度必须是一。必需。 |
|
| APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则片段的长度必须是一。必需。 |
|
| 操作是准入 hook 为所有操作以及添加的任何准入操作( CREATE、UPDATE、DELETE、CONNECT 或 *)的操作。如果 '*' 存在,则片段的长度必须是一。必需。 |
|
| resourceNames 是一个可选的规则应用到的名称白名单。空集表示所有都会被允许。 |
|
| resources 是一组这个规则应用到的资源列表。 例如: 'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。' ' 表示所有资源,但不是子资源。'pods/' 表示所有 pod 子资源。'/scale' 表示所有 scale 子资源。'Suffix' 表示所有资源及其子资源。 如果存在通配符,验证规则将确保资源不会相互重叠。 根据封闭对象,可能无法允许子资源。必需。 |
|
| scope 指定此规则的范围。有效值为 "Cluster", "Namespaced", 和 "" "Cluster" 表示只有集群范围的资源与此规则匹配。命名空间 API 对象是集群范围的。"namespaced" 表示只有命名空间的资源将与此规则匹配。"" 表示没有范围限制。子资源与其父资源的范围匹配。默认为 "*"。 |
6.1.7. .spec.paramRef
- 描述
- ParamRef 描述了如何找到 params,以用作由策略绑定应用的规则表达式的输入。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| name 是被引用的资源的名称。
必须设置
可以通过设置 |
|
|
namespace 是引用资源的命名空间。允许将搜索限制在特定命名空间中。适用于
通过在策略中指定命名空间范围的
- 如果
- 如果 |
|
|
允许的值是 必填 |
| 选择器可用于根据标签匹配多个 param 对象。provide selector: {} 以匹配 ParamKind 的所有资源。 如果找到多个参数,它们都会通过策略表达式进行评估,结果则会被同时评估。
必须设置 |