×
描述

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

对于给定的准入请求,每个绑定将导致其策略被评估 N 次,其中 N 为 1(对于不使用参数的策略/绑定),否则 N 为绑定选择的参数数量。

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

类型

对象

规范

属性 类型 描述

apiVersion

字符串

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

kind

字符串

Kind 是一个字符串值,表示此对象表示的 REST 资源。服务器可以从客户端提交请求的端点推断出这一点。无法更新。使用驼峰命名法。更多信息: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

对象

ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。

.spec

描述

ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。

类型

对象

属性 类型 描述

matchResources

对象

MatchResources 根据对象是否满足匹配条件来决定是否对对象运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)

paramRef

对象

ParamRef 描述如何找到用作策略绑定应用的规则表达式的输入的参数。

policyName

字符串

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

validationActions

数组 (字符串)

validationActions 声明如何执行引用的 ValidatingAdmissionPolicy 的验证。如果验证结果为 false,则始终根据这些操作执行。

仅当 FailurePolicy 设置为 Fail 时,才根据这些操作执行 ValidatingAdmissionPolicy 定义的失败。否则,将忽略这些失败。这包括编译错误、运行时错误和策略的错误配置。

validationActions声明为一组操作值。顺序无关紧要。validationActions不能包含相同操作的重复项。

支持的操作值如下:

“Deny”指定验证失败会导致请求被拒绝。

“Warn”指定将验证失败报告给请求客户端的HTTP Warning标头中,警告代码为299。无论允许还是拒绝准入响应,都可以发送警告。

“Audit”指定将验证失败包含在请求的已发布审计事件中。审计事件将包含一个validation.policy.admission.k8s.io/validation_failure审计注释,其值包含验证失败的详细信息,格式为JSON对象列表,每个对象具有以下字段:- message:验证失败消息字符串 - 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\"]}]"

客户端应该能够处理额外的值,忽略任何无法识别的值。

“Deny”和“Warn”不能同时使用,因为这种组合会在API响应正文和HTTP警告标头中不必要地重复验证失败。

必填。

.spec.matchResources

描述

MatchResources 根据对象是否满足匹配条件来决定是否对对象运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)

类型

对象

属性 类型 描述

excludeResourceRules

数组

excludeResourceRules描述了ValidatingAdmissionPolicy不应关心的资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)。

excludeResourceRules[]

对象

NamedRuleWithOperations是操作和资源与资源名称的元组。

matchPolicy

字符串

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/v1并发送到ValidatingAdmissionPolicy。

默认为“Equivalent”。

可能的枚举值:- "Equivalent"表示如果请求通过其他API组或版本修改规则中列出的资源,则应将请求发送到Webhook。- "Exact"表示只有当请求与给定规则完全匹配时,才应将请求发送到Webhook。

namespaceSelector

LabelSelector

NamespaceSelector根据对象的命名空间是否与选择器匹配来决定是否在对象上运行准入控制策略。如果对象本身是命名空间,则在object.metadata.labels上执行匹配。如果对象是另一个集群范围的资源,则永远不会跳过策略。

例如,要在命名空间未关联“runlevel”为“0”或“1”的任何对象上运行Webhook;您将按如下方式设置选择器:“namespaceSelector”: { "matchExpressions": [ { "key": "runlevel", "operator": "NotIn", "values": [ "0", "1" ] } ] }

如果您只想在命名空间关联“environment”为“prod”或“staging”的任何对象上运行策略;您将按如下方式设置选择器:“namespaceSelector”: { "matchExpressions": [ { "key": "environment", "operator": "In", "values": [ "prod", "staging" ] } ] }

有关标签选择器的更多示例,请参阅 https://kubernetes.ac.cn/docs/concepts/overview/working-with-objects/labels/

默认为空LabelSelector,匹配所有内容。

objectSelector

LabelSelector

objectSelector根据对象是否具有匹配的标签来决定是否运行验证。objectSelector针对将发送到cel验证的oldObjectnewObject进行评估,如果任一对象与选择器匹配,则认为匹配。空对象(在创建情况下为oldObject,在删除情况下为newObject)或无法具有标签的对象(如DeploymentRollback或PodProxyOptions对象)不被认为匹配。仅当Webhook是选择加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入Webhook。默认为空LabelSelector,匹配所有内容。

resourceRules

数组

resourceRules描述了ValidatingAdmissionPolicy匹配的资源/子资源上的哪些操作。如果策略匹配*任何*规则,则该策略关心该操作。

resourceRules[]

对象

NamedRuleWithOperations是操作和资源与资源名称的元组。

.spec.matchResources.excludeResourceRules

描述

excludeResourceRules描述了ValidatingAdmissionPolicy不应关心的资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)。

类型

数组

.spec.matchResources.excludeResourceRules[]

描述

NamedRuleWithOperations是操作和资源与资源名称的元组。

类型

对象

属性 类型 描述

apiGroups

数组 (字符串)

apiGroups是资源所属的API组。“*”表示所有组。如果存在“*”,则切片的长度必须为一。必填。

apiVersions

数组 (字符串)

apiVersions是资源所属的API版本。“*”表示所有版本。如果存在“*”,则切片的长度必须为一。必填。

operations

数组 (字符串)

operations是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT或*表示所有这些操作以及将来添加的任何其他准入操作。如果存在“*”,则切片的长度必须为一。必填。

resourceNames

数组 (字符串)

resourceNames是规则适用的名称的可选白名单。空集表示允许所有内容。

resources

数组 (字符串)

resources是此规则适用的资源列表。

例如:“pods”表示pods。“pods/log”表示pods的log子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示pods的所有子资源。“*/scale”表示所有scale子资源。“*/*”表示所有资源及其子资源。

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

根据封闭对象的不同,可能不允许使用子资源。必填。

scope

字符串

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

.spec.matchResources.resourceRules

描述

resourceRules描述了ValidatingAdmissionPolicy匹配的资源/子资源上的哪些操作。如果策略匹配*任何*规则,则该策略关心该操作。

类型

数组

.spec.matchResources.resourceRules[]

描述

NamedRuleWithOperations是操作和资源与资源名称的元组。

类型

对象

属性 类型 描述

apiGroups

数组 (字符串)

apiGroups是资源所属的API组。“*”表示所有组。如果存在“*”,则切片的长度必须为一。必填。

apiVersions

数组 (字符串)

apiVersions是资源所属的API版本。“*”表示所有版本。如果存在“*”,则切片的长度必须为一。必填。

operations

数组 (字符串)

operations是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT或*表示所有这些操作以及将来添加的任何其他准入操作。如果存在“*”,则切片的长度必须为一。必填。

resourceNames

数组 (字符串)

resourceNames是规则适用的名称的可选白名单。空集表示允许所有内容。

resources

数组 (字符串)

resources是此规则适用的资源列表。

例如:“pods”表示pods。“pods/log”表示pods的log子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示pods的所有子资源。“*/scale”表示所有scale子资源。“*/*”表示所有资源及其子资源。

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

根据封闭对象的不同,可能不允许使用子资源。必填。

scope

字符串

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

.spec.paramRef

描述

ParamRef 描述如何找到用作策略绑定应用的规则表达式的输入的参数。

类型

对象

属性 类型 描述

name

字符串

name 是被引用资源的名称。

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

可以通过设置name字段,保留selector为空,并在paramKind为命名空间范围时设置namespace,来配置用于所有准入请求的单个参数。

namespace

字符串

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

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

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

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

parameterNotFoundAction

字符串

parameterNotFoundAction控制资源存在且name或selector有效但没有参数与绑定匹配时绑定的行为。如果该值设置为Allow,则没有匹配的参数将被绑定视为成功的验证。如果设置为Deny,则没有匹配的参数将受策略的failurePolicy影响。

允许的值为AllowDeny

必需

selector

LabelSelector

selector 可用于基于标签匹配多个 param 对象。提供 selector: {} 以匹配 ParamKind 的所有资源。

如果找到多个参数,则所有参数都将使用策略表达式进行评估,并将结果进行 AND 运算。

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

API 端点

提供以下 API 端点

  • /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings

    • DELETE:删除 ValidatingAdmissionPolicyBinding 集合

    • GET:列出或监视 ValidatingAdmissionPolicyBinding 类型的对象

    • POST:创建 ValidatingAdmissionPolicyBinding

  • /apis/admissionregistration.k8s.io/v1/watch/validatingadmissionpolicybindings

    • GET:监视 ValidatingAdmissionPolicyBinding 列表的单个更改。已弃用:改为使用列表操作中的“watch”参数。

  • /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

    • DELETE:删除 ValidatingAdmissionPolicyBinding

    • GET:读取指定的 ValidatingAdmissionPolicyBinding

    • PATCH:部分更新指定的 ValidatingAdmissionPolicyBinding

    • PUT:替换指定的 ValidatingAdmissionPolicyBinding

  • /apis/admissionregistration.k8s.io/v1/watch/validatingadmissionpolicybindings/{name}

    • GET:监视 ValidatingAdmissionPolicyBinding 类型对象的更改。已弃用:改为使用列表操作中的“watch”参数,并使用“fieldSelector”参数过滤为单个项目。

/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings

HTTP 方法

DELETE

描述

删除 ValidatingAdmissionPolicyBinding 集合

表 1. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 2. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

401 - 未授权

HTTP 方法

GET

描述

列出或监视 ValidatingAdmissionPolicyBinding 类型的对象

表 3. HTTP 响应
HTTP 代码 响应体

200 - OK

ValidatingAdmissionPolicyBindingList 模式

401 - 未授权

HTTP 方法

POST

描述

创建 ValidatingAdmissionPolicyBinding

表 4. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略从对象中静默删除的任何未知字段,并将忽略解码器遇到的所有重复字段(只保留最后一个)。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,则这将使用 BadRequest 错误使请求失败。服务器返回的错误将包含遇到的所有未知和重复字段。

表 5. 请求体参数
参数 类型 描述

body

ValidatingAdmissionPolicyBinding 模式

表 6. HTTP 响应
HTTP 代码 响应体

200 - OK

ValidatingAdmissionPolicyBinding 模式

201 - 已创建

ValidatingAdmissionPolicyBinding 模式

202 - 已接受

ValidatingAdmissionPolicyBinding 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/watch/validatingadmissionpolicybindings

HTTP 方法

GET

描述

监视 ValidatingAdmissionPolicyBinding 列表的单个更改。已弃用:改为使用列表操作中的“watch”参数。

表 7. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

表 8. 全局路径参数
参数 类型 描述

name

字符串

ValidatingAdmissionPolicyBinding 的名称

HTTP 方法

DELETE

描述

删除 ValidatingAdmissionPolicyBinding

表 9. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

表 10. HTTP 响应
HTTP 代码 响应体

200 - OK

Status 模式

202 - 已接受

Status 模式

401 - 未授权

HTTP 方法

GET

描述

读取指定的 ValidatingAdmissionPolicyBinding

表 11. HTTP 响应
HTTP 代码 响应体

200 - OK

ValidatingAdmissionPolicyBinding 模式

401 - 未授权

HTTP 方法

PATCH

描述

部分更新指定的 ValidatingAdmissionPolicyBinding

表 12. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略从对象中静默删除的任何未知字段,并将忽略解码器遇到的所有重复字段(只保留最后一个)。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,则这将使用 BadRequest 错误使请求失败。服务器返回的错误将包含遇到的所有未知和重复字段。

表 13. HTTP 响应
HTTP 代码 响应体

200 - OK

ValidatingAdmissionPolicyBinding 模式

201 - 已创建

ValidatingAdmissionPolicyBinding 模式

401 - 未授权

HTTP 方法

PUT

描述

替换指定的 ValidatingAdmissionPolicyBinding

表 14. 查询参数
参数 类型 描述

dryRun

字符串

如果存在,则表示不应持久化修改。无效或无法识别的 dryRun 指令将导致错误响应,并且不会进一步处理请求。有效值为:- All:将处理所有 dry run 阶段

fieldValidation

字符串

fieldValidation 指示服务器如何处理请求 (POST/PUT/PATCH) 中包含未知或重复字段的对象。有效值为:- Ignore:这将忽略从对象中静默删除的任何未知字段,并将忽略解码器遇到的所有重复字段(只保留最后一个)。这是 v1.23 之前的默认行为。- Warn:这将通过标准警告响应标头为每个从对象中删除的未知字段和遇到的每个重复字段发送警告。如果没有任何其他错误,请求仍然会成功,并且只会持久化任何重复字段中的最后一个。这是 v1.23+ 中的默认值 - Strict:如果任何未知字段将从对象中删除,或者存在任何重复字段,则这将使用 BadRequest 错误使请求失败。服务器返回的错误将包含遇到的所有未知和重复字段。

表 15. 请求体参数
参数 类型 描述

body

ValidatingAdmissionPolicyBinding 模式

表 16. HTTP 响应
HTTP 代码 响应体

200 - OK

ValidatingAdmissionPolicyBinding 模式

201 - 已创建

ValidatingAdmissionPolicyBinding 模式

401 - 未授权

/apis/admissionregistration.k8s.io/v1/watch/validatingadmissionpolicybindings/{name}

表 17. 全局路径参数
参数 类型 描述

name

字符串

ValidatingAdmissionPolicyBinding 的名称

HTTP 方法

GET

描述

监视 ValidatingAdmissionPolicyBinding 类型对象的更改。已弃用:改为使用列表操作中的“watch”参数,并使用“fieldSelector”参数过滤为单个项目。

表 18. HTTP 响应
HTTP 代码 响应体

200 - OK

WatchEvent 模式

401 - 未授权