ValidatingAdmissionPolicy
apiVersion: admissionregistration.k8s.io/v1
import "k8s.io/api/admissionregistration/v1"
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy 描述了一个准入验证策略的定义,该策略接受或拒绝一个对象,而不更改它。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata (ObjectMeta)
标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata.
spec (ValidatingAdmissionPolicySpec)
ValidatingAdmissionPolicy 的期望行为的规范。
ValidatingAdmissionPolicySpec 是 AdmissionPolicy 的期望行为的规范。
spec.auditAnnotations ([]AuditAnnotation)
原子操作:在合并期间将被替换
auditAnnotations 包含 CEL 表达式,这些表达式用于为 API 请求的审计事件生成审计注解。验证和 auditAnnotations 不能都为空;至少需要一个验证或 auditAnnotations。
AuditAnnotation 描述如何为 API 请求生成审计注解。
spec.auditAnnotations.key (string), 必需
key 指定审计注解键。ValidatingAdmissionPolicy 的审计注解键必须是唯一的。键必须是限定名称 ([A-Za-z0-9][-A-Za-z0-9_.]*),长度不超过 63 字节。
该键与 ValidatingAdmissionPolicy 的资源名称组合以构造审计注解键:"{ValidatingAdmissionPolicy 名称}/{键}"。
如果准入 Webhook 使用与此 ValidatingAdmissionPolicy 相同的资源名称和相同的审计注解键,则注解键将相同。在这种情况下,第一个用该键写入的注解将包含在审计事件中,并且所有后续具有相同键的注解将被丢弃。
必需。
spec.auditAnnotations.valueExpression (string), 必需
valueExpression 表示由 CEL 评估以生成审计注解值的表达式。该表达式必须评估为字符串或空值。如果表达式评估为字符串,则审计注解将包含该字符串值。如果表达式评估为空或空字符串,则将省略审计注解。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)
补丁策略:在键
name
上进行合并Map:在合并期间将保留键 name 上的唯一值
MatchConditions 是必须满足的条件列表,才能验证请求。匹配条件会过滤已经与规则、namespaceSelector 和 objectSelector 匹配的请求。空的匹配条件列表与所有请求匹配。最多允许 64 个匹配条件。
如果提供了参数对象,可以通过
params
句柄访问它,方式与验证表达式相同。确切的匹配逻辑是(按顺序):
- 如果任何 matchCondition 的评估结果为 FALSE,则跳过该策略。
- 如果所有 matchConditions 的评估结果为 TRUE,则评估该策略。
- 如果任何 matchCondition 的评估结果为错误(但没有一个为 FALSE)
- 如果 failurePolicy=Fail,则拒绝该请求
- 如果 failurePolicy=Ignore,则跳过该策略
MatchCondition 表示一个请求发送到 Webhook 必须满足的条件。
spec.matchConditions.expression (string), 必需
Expression 表示将由 CEL 评估的表达式。必须评估为布尔值。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,并将其组织到 CEL 变量中
'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。'request' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - 一个 CEL Authorizer。可用于执行请求的主体(用户或服务帐户)的授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz'authorizer.requestResource' - 从 'authorizer' 构建并使用请求资源配置的 CEL ResourceCheck。有关 CEL 的文档:https://kubernetes.top/zh-cn/docs/reference/using-api/cel/
必需。
spec.matchConditions.name (string), 必需
Name 是此匹配条件的标识符,用于战略性合并 MatchConditions,以及为日志记录目的提供标识符。一个好的名称应该能描述相关的表达式。名称必须是由字母数字字符、'-'、'' 或 '.' 组成的限定名称,并且必须以字母数字字符开头和结尾(例如 '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)
原子操作:在合并期间将被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心的资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)
NamedRuleWithOperations 是操作和资源与资源名称的元组。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子操作:在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子操作:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子操作:在合并期间将被替换
Operations 是准入 Hook 关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 用于所有这些操作和将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
原子操作:在合并期间将被替换
ResourceNames 是该规则应用到的可选名称白名单。空集表示允许所有内容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
原子操作:在合并期间将被替换
Resources 是此规则应用到的资源列表。
例如:'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不会相互重叠。
根据包含的对象,可能不允许使用子资源。必需。
spec.matchConstraints.excludeResourceRules.scope (字符串)
scope 指定此规则的作用域。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间资源才会匹配此规则。“*”表示没有作用域限制。子资源匹配其父资源的作用域。默认值为“*”。
spec.matchConstraints.matchPolicy (字符串)
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.top/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)
原子操作:在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源上的哪些操作。如果操作匹配任何规则,则策略会关注该操作。
NamedRuleWithOperations 是操作和资源与资源名称的元组。
spec.matchConstraints.resourceRules.apiGroups ([]字符串)
原子操作:在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.apiVersions ([]字符串)
原子操作:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.operations ([]字符串)
原子操作:在合并期间将被替换
Operations 是准入 Hook 关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 用于所有这些操作和将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.resourceNames ([]字符串)
原子操作:在合并期间将被替换
ResourceNames 是该规则应用到的可选名称白名单。空集表示允许所有内容。
spec.matchConstraints.resourceRules.resources ([]字符串)
原子操作:在合并期间将被替换
Resources 是此规则应用到的资源列表。
例如:'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不会相互重叠。
根据包含的对象,可能不允许使用子资源。必需。
spec.matchConstraints.resourceRules.scope (字符串)
scope 指定此规则的作用域。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间资源才会匹配此规则。“*”表示没有作用域限制。子资源匹配其父资源的作用域。默认值为“*”。
spec.paramKind (ParamKind)
ParamKind 指定用于参数化此策略的资源类型。如果不存在,则此策略没有参数,并且不会向验证表达式提供 param CEL 变量。如果 ParamKind 指的是不存在的类型,则此策略定义配置错误,并且应用 FailurePolicy。如果在 ValidatingAdmissionPolicyBinding 中指定了 paramKind 但未设置 paramRef,则 params 变量将为 null。
spec.paramKind.apiVersion (字符串)
APIVersion 是资源所属的 API 组版本。格式为“group/version”。必需。
spec.paramKind.kind (字符串)
Kind 是资源所属的 API 类型。必需。
spec.validations ([]Validation)
原子操作:在合并期间将被替换
Validations 包含用于应用验证的 CEL 表达式。Validations 和 AuditAnnotations 不能都为空;至少需要一个 Validations 或 AuditAnnotations。
spec.validations.expression (字符串),必需
Expression 表示将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec CEL 表达式可以访问 API 请求/响应的内容,这些内容组织为 CEL 变量以及其他一些有用的变量。
- “object” - 来自传入请求的对象。对于 DELETE 请求,该值为 null。 - “oldObject” - 现有对象。对于 CREATE 请求,该值为 null。 - “request” - API 请求的属性(参考)。 - “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 RESERVED 关键字完全匹配的属性名称将转义为 '{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 (字符串)
Message 表示验证失败时显示的消息。如果 Expression 包含换行符,则必须提供消息。消息不得包含换行符。如果未设置,则消息为“failed rule: {Rule}”。例如:“must be a URL with the host matching spec.host”。如果 Expression 包含换行符,则必须提供消息。消息不得包含换行符。如果未设置,则消息为“failed Expression: {Expression}”。
spec.validations.messageExpression (字符串)
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 (字符串)
Reason 表示对为什么此验证失败的机器可读描述。如果这是列表中第一个失败的验证,则此原因以及相应的 HTTP 响应代码将用于向客户端的 HTTP 响应中。当前支持的原因有:“Unauthorized”、“Forbidden”、“Invalid”、“RequestEntityTooLarge”。如果未设置,则在给客户端的响应中使用 StatusReasonInvalid。
spec.variables ([]Variable)
补丁策略:在键
name
上进行合并Map:在合并期间将保留键 name 上的唯一值
Variables 包含可以在其他表达式组合中使用的变量的定义。每个变量都定义为命名的 CEL 表达式。此处定义的变量将在策略的其他表达式中的
variables
下可用,但 MatchConditions 除外,因为 MatchConditions 在策略的其余部分之前进行评估。变量的表达式可以引用列表中较早定义的其他变量,但不能引用后面的变量。因此,变量必须按照首次出现的顺序排序,且不能存在循环依赖。
spec.variables.expression (字符串),必需
表达式是将被评估为变量值的表达式。CEL 表达式可以访问与验证(Validation)中的 CEL 表达式相同的标识符。
spec.variables.name (字符串),必需
名称是变量的名称。该名称必须是有效的 CEL 标识符,并且在所有变量中唯一。可以通过
variables
在其他表达式中访问该变量。例如,如果名称为 “foo”,则该变量将以variables.foo
的形式可用。
status (ValidatingAdmissionPolicyStatus)
ValidatingAdmissionPolicy 的状态,包括用于确定策略是否按预期运行的警告。由系统填充。只读。
ValidatingAdmissionPolicyStatus 表示准入验证策略的状态。
status.conditions ([]Condition)
映射:在合并期间,将保留键类型上的唯一值
条件表示策略当前状态的最新可用观测结果。
Condition 包含此 API 资源当前状态的一个方面的详细信息。
status.conditions.lastTransitionTime (时间), 必需
lastTransitionTime 是条件从一种状态转换到另一种状态的最后时间。这应该是底层条件发生变化的时间。如果未知,则使用 API 字段更改的时间是可以接受的。
Time 是 time.Time 的包装器,支持正确地编组为 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。
status.conditions.message (字符串), 必需
message 是一个人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。
status.conditions.reason (字符串), 必需
reason 包含一个程序标识符,指示条件最后一次转换的原因。特定条件类型的生产者可以为此字段定义期望值和含义,以及这些值是否被视为有保证的 API。该值应为 CamelCase 字符串。此字段不能为空。
status.conditions.status (字符串), 必需
条件的状态,取值为 True、False 或 Unknown 之一。
status.conditions.type (字符串), 必需
条件的类型,使用 CamelCase 格式或 foo.example.com/CamelCase 格式。
status.conditions.observedGeneration (int64)
observedGeneration 表示设置条件时所基于的 .metadata.generation。例如,如果 .metadata.generation 当前为 12,但 .status.conditions[x].observedGeneration 为 9,则该条件与实例的当前状态不同步。
status.observedGeneration (int64)
控制器观察到的生成。
status.typeChecking (TypeChecking)
每个表达式的类型检查结果。此字段的存在表示类型检查已完成。
TypeChecking 包含 ValidatingAdmissionPolicy 中表达式的类型检查结果
status.typeChecking.expressionWarnings ([]ExpressionWarning)
原子操作:在合并期间将被替换
每个表达式的类型检查警告。
ExpressionWarning 是针对特定表达式的警告信息。
status.typeChecking.expressionWarnings.fieldRef (字符串), 必需
引用表达式的字段的路径。例如,对验证的第一个项目的表达式的引用是 “spec.validations[0].expression”。
status.typeChecking.expressionWarnings.warning (字符串), 必需
类型检查信息的内容,以人类可读的形式呈现。警告的每一行都包含表达式所检查的类型,后跟编译器的类型检查错误。
ValidatingAdmissionPolicyList
ValidatingAdmissionPolicyList 是 ValidatingAdmissionPolicy 的列表。
items ([]ValidatingAdmissionPolicy), 必需
ValidatingAdmissionPolicy 的列表。
apiVersion (字符串)
APIVersion 定义了此对象表示形式的版本化模式。服务器应将识别的模式转换为最新的内部值,并可能拒绝无法识别的值。更多信息: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 (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
ValidatingAdmissionPolicyBinding
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 资源。服务器可以从客户端提交请求的端点推断出此值。不能更新。使用 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 (ValidatingAdmissionPolicyBindingSpec)
ValidatingAdmissionPolicyBinding 的所需行为规范。
ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。
spec.matchResources (MatchResources)
MatchResources 声明哪些资源与此绑定匹配,并将由此绑定进行验证。请注意,这与策略的 matchConstraints 相交,因此只有与策略匹配的请求才能由此选择。如果未设置此项,则由策略匹配的所有资源都将由此绑定进行验证。当 resourceRules 未设置时,它不会约束资源匹配。如果一个资源与此对象的其他字段匹配,它将被验证。请注意,这与 ValidatingAdmissionPolicy matchConstraints 不同,在 ValidatingAdmissionPolicy matchConstraints 中,resourceRules 是必需的。
MatchResources 决定是否基于对象是否满足匹配条件来对对象运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子操作:在合并期间将被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心的资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则将其排除)
NamedRuleWithOperations 是操作和资源与资源名称的元组。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子操作:在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子操作:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子操作:在合并期间将被替换
Operations 是准入 Hook 关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 用于所有这些操作和将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
原子操作:在合并期间将被替换
ResourceNames 是该规则应用到的可选名称白名单。空集表示允许所有内容。
spec.matchResources.excludeResourceRules.resources ([]string)
原子操作:在合并期间将被替换
Resources 是此规则应用到的资源列表。
例如:'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不会相互重叠。
根据包含的对象,可能不允许使用子资源。必需。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定此规则的作用域。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。命名空间 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.top/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)
原子操作:在合并期间将被替换
ResourceRules 描述 ValidatingAdmissionPolicy 匹配哪些资源/子资源上的哪些操作。如果操作匹配任何规则,则策略会关注该操作。
NamedRuleWithOperations 是操作和资源与资源名称的元组。
spec.matchResources.resourceRules.apiGroups ([]string)
原子操作:在合并期间将被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子操作:在合并期间将被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.operations ([]string)
原子操作:在合并期间将被替换
Operations 是准入 Hook 关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 用于所有这些操作和将来添加的任何准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.resourceNames ([]string)
原子操作:在合并期间将被替换
ResourceNames 是该规则应用到的可选名称白名单。空集表示允许所有内容。
spec.matchResources.resourceRules.resources ([]string)
原子操作:在合并期间将被替换
Resources 是此规则应用到的资源列表。
例如:'pods' 表示 pod。'pods/log' 表示 pod 的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源之间不会相互重叠。
根据包含的对象,可能不允许使用子资源。必需。
spec.matchResources.resourceRules.scope (string)
scope 指定此规则的作用域。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间资源才会匹配此规则。“*”表示没有作用域限制。子资源匹配其父资源的作用域。默认值为“*”。
spec.paramRef (ParamRef)
paramRef 指定用于配置准入控制策略的参数资源。它应指向绑定的 ValidatingAdmissionPolicy 的 ParamKind 中指定的类型的资源。如果策略指定了 ParamKind,并且 ParamRef 引用的资源不存在,则认为此绑定配置错误,并应用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,则将忽略此字段,并且在没有参数的情况下评估规则。
ParamRef 描述了如何定位参数,以用作策略绑定应用的规则表达式的输入。
spec.paramRef.name (字符串)
name 是被引用资源的名称。
必须设置
name
或selector
之一,但name
和selector
是互斥属性。如果设置了一个,则必须取消设置另一个。可以通过设置
name
字段,将selector
留空,并在paramKind
的作用域为命名空间时设置命名空间,从而配置用于所有准入请求的单个参数。spec.paramRef.namespace (字符串)
namespace 是引用资源的命名空间。允许将参数的搜索限制在特定的命名空间中。适用于
name
和selector
字段。可以通过在策略中指定命名空间作用域的
paramKind
并将此字段留空来使用每个命名空间的参数。如果
paramKind
的作用域为集群,则必须取消设置此字段。设置此字段会导致配置错误。如果
paramKind
的作用域为命名空间,则在将此字段留空时,将使用正在评估准入的对象的命名空间。请注意,如果将此字段留空,则绑定不得匹配任何集群作用域的资源,这将导致错误。
spec.paramRef.parameterNotFoundAction (字符串)
parameterNotFoundAction
控制绑定在资源存在且名称或选择器有效,但绑定未匹配到任何参数时的行为。如果该值设置为Allow
,则未匹配的参数将被视为绑定成功验证。如果设置为Deny
,则未匹配的参数将受策略的failurePolicy
的约束。允许的值为
Allow
或Deny
必需
spec.paramRef.selector (LabelSelector)
可以使用选择器根据标签匹配多个参数对象。提供 selector: {} 以匹配 ParamKind 的所有资源。
如果找到多个参数,则将所有参数与策略表达式一起评估,并且结果进行与运算。
必须设置
name
或selector
之一,但name
和selector
是互斥属性。如果设置了一个,则必须取消设置另一个。
spec.policyName (字符串)
PolicyName 引用一个 ValidatingAdmissionPolicy 的名称,ValidatingAdmissionPolicyBinding 将绑定到该名称。如果引用的资源不存在,则此绑定将被视为无效并被忽略。 必填项。
spec.validationActions ([]string)
设置:在合并期间将保留唯一值
validationActions 声明如何强制执行引用的 ValidatingAdmissionPolicy 的验证。如果验证结果为 false,则始终根据这些操作强制执行。
仅当 FailurePolicy 设置为 Fail 时,才根据这些操作强制执行由 ValidatingAdmissionPolicy 的 FailurePolicy 定义的失败,否则将忽略这些失败。这包括编译错误、运行时错误和策略的配置错误。
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": "无效值", {"policy": "policy.example.com", {"binding": "policybinding.example.com", {"expressionIndex": "1", {"validationActions": ["Audit"]}]"
客户端应预期通过忽略任何无法识别的值来处理其他值。
“Deny” 和 “Warn” 不能一起使用,因为这种组合会不必要地在 API 响应正文和 HTTP 警告标头中重复验证失败。
必需。
操作
get
读取指定的 ValidatingAdmissionPolicy
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
401: 未授权
get
读取指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
401: 未授权
list
列出或监视 ValidatingAdmissionPolicy 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
参数
allowWatchBookmarks (在查询中): 布尔值
continue (在查询中): 字符串
fieldSelector (在查询中): 字符串
labelSelector (在查询中): 字符串
limit (在查询中): 整数
pretty (在查询中): 字符串
resourceVersion (在查询中): 字符串
resourceVersionMatch (在查询中): 字符串
sendInitialEvents (在查询中): 布尔值
timeoutSeconds (在查询中): 整数
watch (在查询中): 布尔值
响应
200 (ValidatingAdmissionPolicyList): OK
401: 未授权
create
创建一个 ValidatingAdmissionPolicy
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
参数
body: ValidatingAdmissionPolicy, 必填
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
202 (ValidatingAdmissionPolicy): 已接受
401: 未授权
update
替换指定的 ValidatingAdmissionPolicy
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy, 必填
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
update
替换指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy, 必填
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
patch
部分更新指定的 ValidatingAdmissionPolicy
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
body: Patch, 必填
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
force (在查询中): 布尔值
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
patch
部分更新指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
body: Patch, 必填
dryRun (在查询中): 字符串
fieldManager (在查询中): 字符串
fieldValidation (在查询中): 字符串
force (在查询中): 布尔值
pretty (在查询中): 字符串
响应
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
delete
删除一个 ValidatingAdmissionPolicy
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
参数
name (在路径中): 字符串, 必填
ValidatingAdmissionPolicy 的名称
body: DeleteOptions
dryRun (在查询中): 字符串
gracePeriodSeconds (在查询中): 整数
pretty (在查询中): 字符串
propagationPolicy (在查询中): 字符串
响应
200 (Status): OK
202 (Status): 已接受
401: 未授权
deletecollection
删除 ValidatingAdmissionPolicy 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
参数
body: DeleteOptions
continue (在查询中): 字符串
dryRun (在查询中): 字符串
fieldSelector (在查询中): 字符串
gracePeriodSeconds (在查询中): 整数
labelSelector (在查询中): 字符串
limit (在查询中): 整数
pretty (在查询中): 字符串
propagationPolicy (在查询中): 字符串
resourceVersion (在查询中): 字符串
resourceVersionMatch (在查询中): 字符串
sendInitialEvents (在查询中): 布尔值
timeoutSeconds (在查询中): 整数
响应
200 (Status): OK
401: 未授权
此页面是自动生成的。
如果您计划报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他位置进行。