第 6 章 ValidatingAdmissionPolicyBinding [admissionregistration.k8s.io/v1]


描述

ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。ValidatingAdmissionPolicyBinding 和参数 CRD 定义了集群管理员如何为集群配置策略。

对于给定的准入请求,每个绑定都会导致评估 N 次,其中 N 是不使用 params 的策略/绑定,否则 N 是绑定选择的参数数。

策略的 CEL 表达式必须在最大 CEL 预算下计算计算 CEL 成本。策略的每个评估都会获得独立的 CEL 成本预算。添加/删除策略、绑定或参数会影响给定(策略、绑定、参数)组合是否在其自身的 CEL 预算内。

类型
对象

6.1. 规格

属性类型描述

apiVersion

字符串

APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources

kind

字符串

kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds

metadata

ObjectMeta

标准对象元数据;更多信息 :https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。

spec

object

ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规格。

6.1.1. .spec

描述
ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规格。
类型
object
属性类型描述

matchResources

object

MatchResources 决定是否根据它是否满足匹配标准在对象上运行准入控制策略。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)

paramRef

object

ParamRef 描述了如何找到 params,以用作由策略绑定应用的规则表达式的输入。

policyName

string

policyName 引用 ValidatingAdmissionPolicyBinding 绑定的 ValidatingAdmissionPolicy 名称。如果引用的资源不存在,则此绑定被视为无效,并将会被忽略。

validationActions

数组(字符串)

validationActions 声明如何强制实施引用的 ValidatingAdmissionPolicy 的 Validations。如果验证评估为 false,则总是根据这些操作强制执行它。

只有在 FailurePolicy 被设置为 Fail 时,由 ValidatingAdmissionPolicy 的 FailurePolicy 定义的失败才会根据这些操作强制实施,否则失败会被忽略。这包括编译错误、运行时错误和策略错误配置。

validationActions 被声明为一组操作值。顺序无关紧要。验证操作可能不包含同一操作的副本。

支持的操作值有:

"deny"指定验证失败会导致请求被拒绝。

"warn"指定在 HTTP Warning 标头中向请求客户端报告验证失败,警告代码为 299。对于允许或拒绝的准入响应,可以发送警告。

"audit"指定在请求的已发布的审计事件中包含验证失败。审计事件将包含一个 validation.policy.admission.k8s.io/validation_failure audit 注解,其值包含验证失败的详情,格式为 JSON 列表,每个对象列表中带有以下字段: - 消息: 验证失败消息字符串 - policy: ValidatingAdmissionPolicy - binding 的资源名称: ValidatingAdmissionPolicyBinding - expressionIndex 的资源名称: ValidatingAdmissionPolicy - validationActions 中的失败验证的索引: 对验证失败的强制操作示例审计注解: "validation.policy.admission.k8s.io/validation_failure": "[{"message": "Invalid value", {"policy": "policy.example.com", {"binding": "policybinding.example.com", {"expressionIndex": "1", {"validationActions": ["Audit"]}]"

客户端应该通过忽略任何无法识别的值来处理额外的值。

"拒绝"和"Warn"可能无法一起使用,因为组合需要在 API 响应正文和 HTTP 警告标头中重复验证失败。

必需。

6.1.2. .spec.matchResources

描述
MatchResources 决定是否根据它是否满足匹配标准在对象上运行准入控制策略。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)
类型
object
属性类型描述

excludeResourceRules

数组

ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应关注哪些资源/子资源的操作。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)

excludeResourceRules[]

object

NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。

matchPolicy

string

matchPolicy 定义如何使用 "MatchResources" 列表来匹配传入的请求。允许的值是 "Exact" 或 "Equivalent"。

- exact :仅在与指定规则完全匹配时才匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改部署,但 "rules" 仅包含 apiGroups:["apps"], apiVersions:["v1"],resources: ["deployments"],对 apps/v1beta1 或 extensions/v1beta1 的请求不会发送到 ValidatingAdmissionPolicy。

- equivalent :如果修改规则中列出的资源,即使通过另一个 API 组或版本来匹配请求。例如,如果可通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 和 "rules" 修改部署,则只有 apiGroups:["apps"], apiVersions:["v1"],resources: ["deployments"],请求 apps/v1beta1 或 extensions/v1beta1 将转换为 apps/v1beta1,并发送到 ValidatingAdmissionPolicy。

默认为 "Equivalent"

可能枚举值:- "Equivalent" 表示如果请求通过另一个 API 组或版本修改规则中列出的资源,则应只将请求发送到 webhook。

namespaceSelector

LabelSelector

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

LabelSelector

objectSelector 决定是否根据对象是否匹配标签运行验证。objectSelector 针对发送到 cel 验证的 oldObject 和 newObject 评估,如果任何一个对象与选择器匹配,则被视为匹配。一个 null 对象(如果是 create, 或 newObject in the delete 时),或没有标签(如 DeploymentRollback 或 PodProxyOptions 对象)的对象不会被认为匹配。只有在 webhook 是 opt-in 时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空 LabelSelector,它将匹配所有内容。

resourceRules

数组

resourceRules 描述了 ValidatingAdmissionPolicy 匹配的资源/资源什么操作。如果某个操作 与任何 规则匹配,则策略会监视它。

resourceRules[]

object

NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。

6.1.3. .spec.matchResources.excludeResourceRules

描述
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应关注哪些资源/子资源的操作。排除规则优先于 include 规则(如果资源同时匹配,则会排除它)
类型
数组

6.1.4. .spec.matchResources.excludeResourceRules[]

描述
NamedRuleWithOperations 是 Operations 和 ResourceNames 的元组。
类型
object
属性类型描述

apiGroups

数组(字符串)

apiGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则片段的长度必须是一。必需。

apiVersions

数组(字符串)

APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则片段的长度必须是一。必需。

操作

数组(字符串)

操作是准入 hook 为所有操作以及添加的任何准入操作( CREATE、UPDATE、DELETE、CONNECT 或 *)的操作。如果 '*' 存在,则片段的长度必须是一。必需。

resourceNames

数组(字符串)

resourceNames 是一个可选的规则应用到的名称白名单。空集表示所有都会被允许。

resources

数组(字符串)

resources 是一组这个规则应用到的资源列表。

例如: 'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。' ' 表示所有资源,但不是子资源。'pods/' 表示所有 pod 子资源。'/scale' 表示所有 scale 子资源。'Suffix' 表示所有资源及其子资源。

如果存在通配符,验证规则将确保资源不会相互重叠。

根据封闭对象,可能无法允许子资源。必需。

scope

字符串

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

数组(字符串)

apiGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则片段的长度必须是一。必需。

apiVersions

数组(字符串)

APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则片段的长度必须是一。必需。

操作

数组(字符串)

操作是准入 hook 为所有操作以及添加的任何准入操作( CREATE、UPDATE、DELETE、CONNECT 或 *)的操作。如果 '*' 存在,则片段的长度必须是一。必需。

resourceNames

数组(字符串)

resourceNames 是一个可选的规则应用到的名称白名单。空集表示所有都会被允许。

resources

数组(字符串)

resources 是一组这个规则应用到的资源列表。

例如: 'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。' ' 表示所有资源,但不是子资源。'pods/' 表示所有 pod 子资源。'/scale' 表示所有 scale 子资源。'Suffix' 表示所有资源及其子资源。

如果存在通配符,验证规则将确保资源不会相互重叠。

根据封闭对象,可能无法允许子资源。必需。

scope

字符串

scope 指定此规则的范围。有效值为 "Cluster", "Namespaced", 和 "" "Cluster" 表示只有集群范围的资源与此规则匹配。命名空间 API 对象是集群范围的。"namespaced" 表示只有命名空间的资源将与此规则匹配。"" 表示没有范围限制。子资源与其父资源的范围匹配。默认为 "*"。

6.1.7. .spec.paramRef

描述
ParamRef 描述了如何找到 params,以用作由策略绑定应用的规则表达式的输入。
类型
object
属性类型描述

name

string

name 是被引用的资源的名称。

必须设置 nameselector 之一,但 nameselector 是互斥的属性。如果设置了 1,则必须取消设置另一个。

可以通过设置 name 字段、将 选择器 留空,如果 paramKind 为命名空间范围的,则可以配置用于所有准入请求的单个参数。

namespace

string

namespace 是引用资源的命名空间。允许将搜索限制在特定命名空间中。适用于 nameselector 字段。

通过在策略中指定命名空间范围的 paramKind 并将此字段留空,可以使用 per-namespace 参数。

- 如果 paramKind 是集群范围的,则此字段必须未设置。设置此字段会导致配置错误。

- 如果 paramKind 是命名空间范围,则当此字段未设置时,将使用为准入评估的对象命名空间。请注意,如果此留空,绑定不得与任何集群范围的资源匹配,这会导致错误。

parameterNotFoundAction

string

parameterNotFoundAction 控制资源存在时绑定的行为,以及名称或选择器有效,但没有与绑定匹配的参数。如果值设为 Allow,则不会将匹配的参数视为成功通过绑定验证。如果设置为 Deny,则不匹配的参数将受到策略的 failurePolicy 的影响。

允许的值是 AllowDeny

必填

selector

LabelSelector

选择器可用于根据标签匹配多个 param 对象。provide selector: {} 以匹配 ParamKind 的所有资源。

如果找到多个参数,它们都会通过策略表达式进行评估,结果则会被同时评估。

必须设置 nameselector 之一,但 nameselector 是互斥的属性。如果设置了 1,则必须取消设置另一个。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.