ValidatingAdmissionPolicyBinding
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicyBinding
ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。ValidatingAdmissionPolicyBinding 和参数 CRD 一起定义了集群管理员如何为集群配置策略。
对于给定的准入请求,每个绑定都会导致其策略被评估 N 次,其中 N 对于不使用参数的策略/绑定来说是 1,否则 N 是由该绑定选择的参数数量。
策略的 CEL 表达式计算出的 CEL 成本必须低于最大 CEL 预算。策略的每次评估都被赋予一个独立的 CEL 成本预算。添加/移除策略、绑定或参数不会影响给定的(策略、绑定、参数)组合是否在其自身的 CEL 预算范围内。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata (ObjectMeta)
标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (ValidatingAdmissionPolicyBindingSpec)
ValidatingAdmissionPolicyBinding 的期望行为规范。
ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。
spec.matchResources (MatchResources)
MatchResources 声明哪些资源与此绑定匹配并将被其验证。注意,这与策略的 matchConstraints 相交,因此只有策略匹配的请求才能被此绑定选中。如果此字段未设置,则策略匹配的所有资源都将由此绑定验证。当 resourceRules 未设置时,它不限制资源匹配。如果资源被此对象的其他字段匹配,它将被验证。注意,这与 ValidatingAdmissionPolicy 的 matchConstraints 不同,ValidatingAdmissionPolicy 的 matchConstraints 要求 resourceRules。
MatchResources 根据对象是否满足匹配条件来决定是否对其运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
Atomic: 在合并期间将被替换
ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不应该关注哪些资源/子资源的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
NamedRuleWithOperations 是一个包含 Operation 和 Resources 的元组,带有 ResourceNames。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
Atomic: 在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
Atomic: 在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.excludeResourceRules.operations ([]string)
Atomic: 在合并期间将被替换
Operations 是准入钩子关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
Atomic: 在合并期间将被替换
ResourceNames 是规则适用的名称的可选白名单。空集表示允许所有内容。
spec.matchResources.excludeResourceRules.resources ([]string)
Atomic: 在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指的是 Pods。'pods/log' 指的是 Pods 的 log 子资源。'*' 指的是所有资源,但不包括子资源。'pods/*' 指的是 Pods 的所有子资源。'*/scale' 指的是所有 scale 子资源。'*/*' 指的是所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不相互重叠。
根据包含的对象,子资源可能不被允许。必填。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"*" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.matchResources.matchPolicy (string)
matchPolicy 定义了如何使用 "MatchResources" 列表来匹配传入请求。允许的值为 "Exact" 或 "Equivalent"。
Exact:仅当请求与指定的规则完全匹配时才匹配。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,但 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则发送到 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。Equivalent:如果请求修改了规则中列出的资源,即使是通过另一个 API 组或版本,也会匹配。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则发送到 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 ValidatingAdmissionPolicy。
默认为 "Equivalent"
spec.matchResources.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,它匹配所有内容。
spec.matchResources.objectSelector (LabelSelector)
ObjectSelector 根据对象是否具有匹配的标签来决定是否运行验证。objectSelector 会针对发送到 CEL 验证的 oldObject 和 newObject 进行评估,并且如果其中任何一个对象与选择器匹配,则认为匹配。一个空对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是可选加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。默认为空的 LabelSelector,它匹配所有内容。
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
Atomic: 在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源的哪些操作。如果操作匹配 任何 规则,则策略会关注该操作。
NamedRuleWithOperations 是一个包含 Operation 和 Resources 的元组,带有 ResourceNames。
spec.matchResources.resourceRules.apiGroups ([]string)
Atomic: 在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.resourceRules.apiVersions ([]string)
Atomic: 在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.resourceRules.operations ([]string)
Atomic: 在合并期间将被替换
Operations 是准入钩子关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必填。
spec.matchResources.resourceRules.resourceNames ([]string)
Atomic: 在合并期间将被替换
ResourceNames 是规则适用的名称的可选白名单。空集表示允许所有内容。
spec.matchResources.resourceRules.resources ([]string)
Atomic: 在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指的是 Pods。'pods/log' 指的是 Pods 的 log 子资源。'*' 指的是所有资源,但不包括子资源。'pods/*' 指的是 Pods 的所有子资源。'*/scale' 指的是所有 scale 子资源。'*/*' 指的是所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不相互重叠。
根据包含的对象,子资源可能不被允许。必填。
spec.matchResources.resourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"*" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.paramRef (ParamRef)
paramRef 指定用于配置准入控制策略的参数资源。它应该指向绑定 ValidatingAdmissionPolicy 的 ParamKind 中指定的类型的资源。如果策略指定了 ParamKind,并且 ParamRef 引用的资源不存在,则此绑定被视为配置错误,将应用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,则此字段将被忽略,并且规则将在没有参数的情况下进行评估。
ParamRef 描述了如何定位用作策略绑定应用的规则表达式输入的参数。
spec.paramRef.name (string)
name 是被引用资源的名称。
name
或selector
必须设置其中一个,但name
和selector
是互斥属性。如果设置了其中一个,则另一个必须未设置。通过设置
name
字段、留空selector
,并在paramKind
是命名空间范围时设置命名空间,可以为一个参数配置所有准入请求。spec.paramRef.namespace (string)
namespace 是被引用资源的命名空间。允许将参数搜索限制到特定的命名空间。适用于
name
和selector
字段。通过在策略中指定命名空间范围的
paramKind
并留空此字段,可以使用按命名空间划分的参数。如果
paramKind
是集群范围的,则此字段必须未设置。设置此字段会导致配置错误。如果
paramKind
是命名空间范围的,当此字段留空时,将使用正在评估进行准入的对象所在的命名空间。请注意,如果此字段留空,则绑定不得匹配任何集群范围的资源,否则将导致错误。
spec.paramRef.parameterNotFoundAction (string)
parameterNotFoundAction
控制当资源存在且名称或选择器有效,但没有与绑定匹配的参数时的绑定行为。如果该值设置为Allow
,则没有匹配的参数将被绑定视为成功验证。如果设置为Deny
,则没有匹配的参数将受策略的failurePolicy
约束。允许的值为
Allow
或Deny
必填
spec.paramRef.selector (LabelSelector)
selector 可以用于根据标签匹配多个参数对象。提供 selector: {} 以匹配 ParamKind 的所有资源。
如果找到多个参数,它们都将使用策略表达式进行评估,并将结果进行逻辑与运算。
name
或selector
必须设置其中一个,但name
和selector
是互斥属性。如果设置了其中一个,则另一个必须未设置。
spec.policyName (string)
PolicyName 引用 ValidatingAdmissionPolicyBinding 绑定的 ValidatingAdmissionPolicy 名称。如果引用的资源不存在,此绑定被视为无效并将被忽略。必填。
spec.validationActions ([]string)
Set: 合并期间将保留唯一值
validationActions 声明如何强制执行被引用 ValidatingAdmissionPolicy 的验证。如果验证评估为 false,则始终根据这些操作强制执行。
ValidatingAdmissionPolicy 的 FailurePolicy 定义的失败仅当 FailurePolicy 设置为 Fail 时才根据这些操作强制执行,否则失败将被忽略。这包括编译错误、运行时错误以及策略的配置错误。
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 warning 头部中重复验证失败信息。
必填。
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy 描述了准入验证策略的定义,该策略接受或拒绝对象而不改变它。
apiVersion (string)
APIVersion 定义了此对象表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
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 (ValidatingAdmissionPolicySpec)
ValidatingAdmissionPolicy 的期望行为规范。
ValidatingAdmissionPolicySpec 是 AdmissionPolicy 期望行为的规范。
spec.auditAnnotations ([]AuditAnnotation)
Atomic: 在合并期间将被替换
auditAnnotations 包含用于为 API 请求的审计事件生成审计注解的 CEL 表达式。validations 和 auditAnnotations 不能同时为空;validations 或 auditAnnotations 中至少需要一个。
AuditAnnotation 描述了如何为 API 请求生成审计注解。
spec.auditAnnotations.key (string),必填
key 指定审计注解的键。ValidatingAdmissionPolicy 的审计注解键必须唯一。键必须是合格名称 ([A-Za-z0-9][-A-Za-z0-9_.]*),长度不超过 63 字节。
键与 ValidatingAdmissionPolicy 的资源名称结合,构建一个审计注解键:"{ValidatingAdmissionPolicy name}/{key}"。
如果准入 webhook 使用与此 ValidatingAdmissionPolicy 相同的资源名称和相同的审计注解键,则注解键将是相同的。在这种情况下,第一个使用该键写入的注解将包含在审计事件中,所有后续使用相同键的注解都将被丢弃。
必填。
spec.auditAnnotations.valueExpression (string),必填
valueExpression 表示由 CEL 评估以生成审计注解值的表达式。该表达式必须评估为字符串或 null 值。如果表达式评估为字符串,则审计注解包含该字符串值。如果表达式评估为 null 或空字符串,则将省略审计注解。valueExpression 的长度不能超过 5kb。如果 valueExpression 的结果长度超过 10kb,则将被截断为 10kb。
如果多个 ValidatingAdmissionPolicyBinding 资源匹配一个 API 请求,则将为每个绑定评估 valueExpression。valueExpressions 生成的所有唯一值将通过逗号分隔列表连接在一起。
必填。
spec.failurePolicy (string)
failurePolicy 定义了如何处理准入策略的失败。失败可能来自 CEL 表达式解析错误、类型检查错误、运行时错误以及无效或配置错误的策略定义或绑定。
如果 spec.paramKind 引用了不存在的 Kind,则策略无效。如果 spec.paramRef.name 引用了不存在的资源,则绑定无效。
failurePolicy 不定义如何处理评估为 false 的验证。
当 failurePolicy 设置为 Fail 时,ValidatingAdmissionPolicyBinding validationActions 定义了如何强制执行失败。
允许的值为 Ignore 或 Fail。默认为 Fail。
spec.matchConditions ([]MatchCondition)
Patch 策略:基于键
name
合并Map: 合并期间将保留键 name 上的唯一值
MatchConditions 是请求要被验证必须满足的条件列表。匹配条件过滤已经由规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。
如果提供了参数对象,可以通过
params
句柄访问它,方式与验证表达式相同。精确匹配逻辑如下(按顺序)
- 如果 ANY matchCondition 评估为 FALSE,则跳过策略。
- 如果 ALL matchConditions 评估为 TRUE,则评估策略。
- 如果任何 matchCondition 评估为错误(但没有一个评估为 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则跳过策略
MatchCondition 表示请求发送到 webhook 必须满足的条件。
spec.matchConditions.expression (string),必填
Expression 表示将由 CEL 评估的表达式。必须评估为 bool 类型。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,组织成 CEL 变量
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。'request' - 准入请求的属性(ref)。'authorizer' - 一个 CEL Authorizer。可用于对请求的主体(用户或服务账号)执行授权检查。参见 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz。'authorizer.requestResource' - 一个由 'authorizer' 构建并配置了请求资源的 CEL ResourceCheck。CEL 文档:https://kubernetes.ac.cn/docs/reference/using-api/cel/
必填。
spec.matchConditions.name (string),必填
Name 是此匹配条件的标识符,用于 MatchConditions 的战略合并,也用于提供日志记录的标识符。一个好的名称应该描述相关的表达式。Name 必须是合格名称,由字母数字字符、'-'、'_' 或 '.' 组成,并且必须以字母数字字符开头和结尾(例如 'MyName'、'my.name' 或 '123-abc',用于验证的正则表达式是 '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]'),带有可选的 DNS 子域前缀和 '/'(例如 'example.com/MyName')。
必填。
spec.matchConstraints (MatchResources)
MatchConstraints 指定此策略旨在验证哪些资源。如果请求匹配 所有 约束,则 AdmissionPolicy 会关注该请求。然而,为了防止集群陷入无法通过 API 恢复的不稳定状态,ValidatingAdmissionPolicy 不能匹配 ValidatingAdmissionPolicy 和 ValidatingAdmissionPolicyBinding。必填。
MatchResources 根据对象是否满足匹配条件来决定是否对其运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
Atomic: 在合并期间将被替换
ExcludeResourceRules 描述 ValidatingAdmissionPolicy 不应该关注哪些资源/子资源的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)
NamedRuleWithOperations 是一个包含 Operation 和 Resources 的元组,带有 ResourceNames。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
Atomic: 在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
Atomic: 在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.excludeResourceRules.operations ([]string)
Atomic: 在合并期间将被替换
Operations 是准入钩子关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
Atomic: 在合并期间将被替换
ResourceNames 是规则适用的名称的可选白名单。空集表示允许所有内容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
Atomic: 在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指的是 Pods。'pods/log' 指的是 Pods 的 log 子资源。'*' 指的是所有资源,但不包括子资源。'pods/*' 指的是 Pods 的所有子资源。'*/scale' 指的是所有 scale 子资源。'*/*' 指的是所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不相互重叠。
根据包含的对象,子资源可能不被允许。必填。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"*" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.matchConstraints.matchPolicy (string)
matchPolicy 定义了如何使用 "MatchResources" 列表来匹配传入请求。允许的值为 "Exact" 或 "Equivalent"。
Exact:仅当请求与指定的规则完全匹配时才匹配。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,但 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则发送到 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。Equivalent:如果请求修改了规则中列出的资源,即使是通过另一个 API 组或版本,也会匹配。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则发送到 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 ValidatingAdmissionPolicy。
默认为 "Equivalent"
spec.matchConstraints.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,它匹配所有内容。
spec.matchConstraints.objectSelector (LabelSelector)
ObjectSelector 根据对象是否具有匹配的标签来决定是否运行验证。objectSelector 会针对发送到 CEL 验证的 oldObject 和 newObject 进行评估,并且如果其中任何一个对象与选择器匹配,则认为匹配。一个空对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是可选加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 webhook。默认为空的 LabelSelector,它匹配所有内容。
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
Atomic: 在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源的哪些操作。如果操作匹配 任何 规则,则策略会关注该操作。
NamedRuleWithOperations 是一个包含 Operation 和 Resources 的元组,带有 ResourceNames。
spec.matchConstraints.resourceRules.apiGroups ([]string)
Atomic: 在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.resourceRules.apiVersions ([]string)
Atomic: 在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.resourceRules.operations ([]string)
Atomic: 在合并期间将被替换
Operations 是准入钩子关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作以及将来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必填。
spec.matchConstraints.resourceRules.resourceNames ([]string)
Atomic: 在合并期间将被替换
ResourceNames 是规则适用的名称的可选白名单。空集表示允许所有内容。
spec.matchConstraints.resourceRules.resources ([]string)
Atomic: 在合并期间将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 指的是 Pods。'pods/log' 指的是 Pods 的 log 子资源。'*' 指的是所有资源,但不包括子资源。'pods/*' 指的是 Pods 的所有子资源。'*/scale' 指的是所有 scale 子资源。'*/*' 指的是所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不相互重叠。
根据包含的对象,子资源可能不被允许。必填。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此规则的范围。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象是集群范围的。"Namespaced" 表示只有命名空间范围的资源会匹配此规则。"*" 表示没有范围限制。子资源匹配其父资源的范围。默认值为 "*"。
spec.paramKind (ParamKind)
ParamKind 指定用于参数化此策略的资源类型。如果不存在,则此策略没有参数,也不会向验证表达式提供 param CEL 变量。如果 ParamKind 指的是不存在的类型,则此策略定义配置错误,将应用 FailurePolicy。如果在 ValidatingAdmissionPolicyBinding 中指定了 paramKind 但 paramRef 未设置,则 params 变量将为 null。
ParamKind 是一个包含 Group Kind 和 Version 的元组。
spec.paramKind.apiVersion (string)
APIVersion 是资源所属的 API 组版本。格式为 "group/version"。必填。
spec.paramKind.kind (string)
Kind 是资源所属的 API 类型。必填。
spec.validations ([]Validation)
Atomic: 在合并期间将被替换
Validations 包含用于应用验证的 CEL 表达式。Validations 和 AuditAnnotations 不能同时为空;Validations 或 AuditAnnotations 中至少需要一个。
spec.validations.expression (string),必填
Expression 表示将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec CEL 表达式可以访问 API 请求/响应的内容,组织成 CEL 变量以及一些其他有用的变量
- 'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。- 'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。- 'request' - API 请求的属性(ref)。- 'params' - 正在评估的策略绑定引用的参数资源。仅当策略具有 ParamKind 时填充。- 'namespaceObject' - 传入对象所属的命名空间对象。对于集群范围的资源,该值为 null。- 'variables' - 组合变量的映射,从名称到其延迟评估的值。例如,名为 'foo' 的变量可以作为 'variables.foo' 访问。
- 'authorizer' - 一个 CEL Authorizer。可用于对请求的主体(用户或服务账号)执行授权检查。参见 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
- 'authorizer.requestResource' - 一个由 'authorizer' 构建并配置了请求资源的 CEL ResourceCheck。
apiVersion
、kind
、metadata.name
和metadata.generateName
始终可以从对象的根部访问。其他元数据属性无法访问。只有形式为
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*
的属性名称可以访问。可访问属性名称在表达式中访问时,根据以下规则进行转义:- '' 转义为 'underscores' - '.' 转义为 'dot' - '-' 转义为 'dash' - '/' 转义为 'slash' - 与 CEL 保留关键字完全匹配的属性名称转义为 '{keyword}__'. 关键字包括:"true", "false", "null", "in", "as", "break", "const", "continue", "else", "for", "function", "if", "import", "let", "loop", "package", "namespace", "return"。示例- 访问名为 "namespace" 的属性的表达式:{"Expression": "object.namespace > 0"}
- 访问名为 "x-prop" 的属性的表达式:{"Expression": "object.x__dash__prop > 0"}
- 访问名为 "redact__d" 的属性的表达式:{"Expression": "object.redact__underscores__d > 0"}
列表类型为 'set' 或 'map' 的数组的相等性忽略元素顺序,即 [1, 2] == [2, 1]。x-kubernetes-list-type 数组的连接使用列表类型的语义。
- 'set':
X + Y
执行一个并集操作,其中保留X
中所有元素的数组位置,并追加Y
中非相交的元素,同时保留它们的偏序。 - 'map':
X + Y
执行一个合并操作,其中保留X
中所有键的数组位置,但当X
和Y
的键集相交时,值会被Y
中的值覆盖。Y
中具有非相交键的元素会被追加,同时保留它们的偏序。必需。
spec.validations.message (string)
Message 表示验证失败时显示的消息。如果 Expression 包含换行符,则此消息为必需。消息不得包含换行符。如果未设置,消息为 "failed rule: {Rule}"。例如:"must be a URL with the host matching spec.host"。如果 Expression 包含换行符,Message 为必需。消息不得包含换行符。如果未设置,消息为 "failed Expression: {Expression}"。
spec.validations.messageExpression (string)
messageExpression 声明一个 CEL 表达式,该表达式计算结果为此规则失败时返回的验证失败消息。由于 messageExpression 用作失败消息,其计算结果必须为字符串。如果验证中同时存在 message 和 messageExpression,则在验证失败时将使用 messageExpression。如果 messageExpression 导致运行时错误,则会记录运行时错误,并且产生的验证失败消息如同 messageExpression 字段未设置一样。如果 messageExpression 计算结果为空字符串、仅包含空格的字符串或包含换行符的字符串,则产生的验证失败消息也将如同 messageExpression 字段未设置一样,并且会记录 messageExpression 产生了空字符串/仅包含空格的字符串/包含换行符的字符串这一事实。messageExpression 可以访问与
expression
相同的所有变量,但 'authorizer' 和 'authorizer.requestResource' 除外。示例:"object.x must be less than max ("+string(params.max)+")"spec.validations.reason (string)
Reason 表示此验证失败原因的机器可读描述。如果这是列表中第一个失败的验证,则此原因以及相应的 HTTP 响应码将在对客户端的 HTTP 响应中使用。当前支持的原因包括:"Unauthorized"、"Forbidden"、"Invalid"、"RequestEntityTooLarge"。如果未设置,则在对客户端的响应中使用 StatusReasonInvalid。
spec.variables ([]Variable)
Patch 策略:基于键
name
合并Map: 合并期间将保留键 name 上的唯一值
Variables 包含变量定义,这些变量可用于组成其他表达式。每个变量都被定义为一个命名的 CEL 表达式。此处定义的变量将在策略的其他表达式(MatchConditions 除外,因为 MatchConditions 在策略的其余部分之前进行评估)中的
variables
下可用。变量的表达式可以引用列表中较早定义的其他变量,但不能引用在其后定义的变量。因此,Variables 必须按首次出现的顺序排序且无环。
Variable 是用于组合的变量定义。变量被定义为一个命名表达式。
spec.variables.expression (string),必需
Expression 是将作为变量值进行评估的表达式。此 CEL 表达式可以访问与 Validation 中的 CEL 表达式相同的标识符。
spec.variables.name (string),必需
Name 是变量的名称。名称必须是有效的 CEL 标识符,并且在所有变量中是唯一的。可以在其他表达式中通过
variables
访问此变量。例如,如果名称是 "foo",则该变量将作为variables.foo
可用。
status (ValidatingAdmissionPolicyStatus)
ValidatingAdmissionPolicy 的状态,包括有助于确定策略行为是否符合预期的方式的警告。由系统填充。只读。
ValidatingAdmissionPolicyStatus 表示准入验证策略的状态。
status.conditions ([]Condition)
Map: 合并时将保留键类型上的唯一值
Conditions 表示策略当前状态的最新可用观察结果。
Condition 包含此 API Resource 当前状态某一方面详细信息。
status.conditions.lastTransitionTime (Time),必需
lastTransitionTime 是条件上次从一个状态转换为另一个状态的时间。这应该是基础条件发生变化的时候。如果不知道,则使用 API 字段发生变化的时间也是可以接受的。
Time 是 time.Time 的一个封装,支持正确地序列化为 YAML 和 JSON。提供了对 time 包许多工厂方法的封装。
status.conditions.message (string),必需
message 是人类可读的消息,指示关于转换的详细信息。这可能是一个空字符串。
status.conditions.reason (string),必需
reason 包含一个程序化标识符,指示条件上次转换的原因。特定条件类型的生产者可以为此字段定义预期值和含义,以及这些值是否被视为有保证的 API。该值应为 CamelCase 字符串。此字段不能为空。
status.conditions.status (string),必需
condition 的状态,为 True、False、Unknown 之一。
status.conditions.type (string),必需
condition 的类型,为 CamelCase 或 foo.example.com/CamelCase 格式。
status.conditions.observedGeneration (int64)
observedGeneration 表示设置该条件所依据的 .metadata.generation。例如,如果 .metadata.generation 当前为 12,但 .status.conditions[x].observedGeneration 为 9,则该条件相对于实例当前状态已过期。
status.observedGeneration (int64)
控制器观察到的 generation。
status.typeChecking (TypeChecking)
各表达式的类型检查结果。此字段的存在表示类型检查已完成。
TypeChecking 包含对 ValidatingAdmissionPolicy 中表达式进行类型检查的结果
status.typeChecking.expressionWarnings ([]ExpressionWarning)
Atomic: 在合并期间将被替换
各表达式的类型检查警告。
ExpressionWarning 是针对特定表达式的警告信息。
status.typeChecking.expressionWarnings.fieldRef (string),必需
引用表达式的字段路径。例如,对 validations 的第一个项的表达式引用是 "spec.validations[0].expression"。
status.typeChecking.expressionWarnings.warning (string),必需
类型检查信息的人类可读形式内容。警告的每一行都包含表达式所对照检查的类型,后跟来自编译器的类型检查错误。
ValidatingAdmissionPolicyBindingList
ValidatingAdmissionPolicyBindingList 是 ValidatingAdmissionPolicyBinding 的列表。
items ([]ValidatingAdmissionPolicyBinding),必需
PolicyBinding 列表。
apiVersion (string)
APIVersion 定义了此对象表示的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind (string)
Kind 是一个字符串值,表示此对象代表的 REST 资源。服务器可以从客户端提交请求的端点推断出此值。不可更新。采用驼峰命名法(CamelCase)。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
操作
get
读取指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (in path): string,必需
ValidatingAdmissionPolicyBinding 的名称
pretty (in query): string
响应
200 (ValidatingAdmissionPolicyBinding): OK (成功)
401: Unauthorized (未授权)
list
列出或观察类型为 ValidatingAdmissionPolicyBinding 的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
响应
200 (ValidatingAdmissionPolicyBindingList): OK (成功)
401: Unauthorized (未授权)
create
创建一个 ValidatingAdmissionPolicyBinding
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
body: ValidatingAdmissionPolicyBinding,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
200 (ValidatingAdmissionPolicyBinding): OK (成功)
201 (ValidatingAdmissionPolicyBinding): Created (已创建)
202 (ValidatingAdmissionPolicyBinding): Accepted (已接受)
401: Unauthorized (未授权)
update
替换指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (in path): string,必需
ValidatingAdmissionPolicyBinding 的名称
body: ValidatingAdmissionPolicyBinding,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
pretty (in query): string
响应
200 (ValidatingAdmissionPolicyBinding): OK (成功)
201 (ValidatingAdmissionPolicyBinding): Created (已创建)
401: Unauthorized (未授权)
patch
部分更新指定的 ValidatingAdmissionPolicyBinding
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (in path): string,必需
ValidatingAdmissionPolicyBinding 的名称
body: Patch,必需
dryRun (in query): string
fieldManager (in query): string
fieldValidation (in query): string
force (in query): boolean
pretty (in query): string
响应
200 (ValidatingAdmissionPolicyBinding): OK (成功)
201 (ValidatingAdmissionPolicyBinding): Created (已创建)
401: Unauthorized (未授权)
delete
删除一个 ValidatingAdmissionPolicyBinding
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}
参数
name (in path): string,必需
ValidatingAdmissionPolicyBinding 的名称
body: DeleteOptions
dryRun (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (in query): string
propagationPolicy (in query): string
响应
200 (Status): OK (成功)
202 (Status): Accepted (已接受)
401: Unauthorized (未授权)
deletecollection
删除 ValidatingAdmissionPolicyBinding 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings
参数
body: DeleteOptions
continue (in query): string
dryRun (in query): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
响应
200 (Status): OK (成功)
401: Unauthorized (未授权)
本页面是自动生成的。
如果您打算报告此页面问题,请在问题描述中说明该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。