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 包含用于为 API 请求的审计事件生成审计注释的 CEL 表达式。 validations 和 auditAnnotations 不能都为空;至少需要 validations 或 auditAnnotations 中的一个。
AuditAnnotation 描述如何为 API 请求生成审计注释。
spec.auditAnnotations.key (string), required
key 指定审计注释键。ValidatingAdmissionPolicy 的审计注释键必须是唯一的。该键必须是一个合格名称 ([A-Za-z0-9][-A-Za-z0-9_.]*),长度不超过 63 个字节。
该键与 ValidatingAdmissionPolicy 的资源名称组合以构造审计注释键:“{ValidatingAdmissionPolicy 名称}/{key}”。
如果一个准入 webhook 使用与此 ValidatingAdmissionPolicy 相同的资源名称和相同的审计注释键,则注释键将相同。在这种情况下,首先使用该键写入的注释将包含在审计事件中,所有后续使用相同键的注释将被丢弃。
必需。
spec.auditAnnotations.valueExpression (string), required
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。
可能的枚举值
"Fail"表示调用 webhook 发生错误会导致准入失败。"Ignore"表示调用 webhook 发生错误将被忽略。
spec.matchConditions ([]MatchCondition)
补丁策略:在 key
name上合并映射:在合并期间将保留 key name 上的唯一值
MatchConditions 是一个必须满足的条件列表,才能验证请求。匹配条件过滤掉已经由规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。允许的最大匹配条件数量为 64 个。
如果提供了参数对象,则可以像验证表达式一样以
params句柄访问它。确切的匹配逻辑是(按顺序)
- 如果任何 matchCondition 评估为 FALSE,则跳过策略。
- 如果所有 matchCondition 评估为 TRUE,则评估策略。
- 如果任何 matchCondition 评估为错误(但没有一个是 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则跳过策略
MatchCondition 表示必须满足才能将请求发送到 webhook 的条件。
spec.matchConditions.expression (string), required
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 文档:https://kubernetes.ac.cn/docs/reference/using-api/cel/
必需。
spec.matchConditions.name (string), required
Name 是此匹配条件的标识符,用于匹配条件的策略合并,以及为日志记录目的提供标识符。一个好的名称应该描述相关的表达式。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)
原子:将在合并期间被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心哪些资源/子资源的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
NamedRuleWithOperations 是 Operations 和 Resources 与 ResourceNames 的元组。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则切片的长度必须为一。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则切片的长度必须为一。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及任何未来添加的准入操作。如果存在 '*',则切片的长度必须为一。必需。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则适用的名称的白名单。一个空集意味着允许所有内容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用的资源列表。
例如:'pods' 表示 pods。 'pods/log' 表示 pods 的 log 子资源。 '' 表示所有资源,但不包括子资源。 'pods/' 表示 pods 的所有子资源。 '/scale' 表示所有 scale 子资源。 '/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据包含对象,可能不允许子资源。必需。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。Namespace API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源才会匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
可能的枚举值
"*"表示包含所有范围。"Cluster"表示范围限制为集群范围的对象。Namespace 对象是集群范围的。"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”
可能的枚举值
"Equivalent"表示如果请求通过另一个 API 组或版本修改规则中列出的资源,则应将请求发送到 webhook。"Exact"表示仅当请求完全匹配给定的规则时,才应将请求发送到 webhook。
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)
原子:将在合并期间被替换
ResourceRules 描述了 ValidatingAdmissionPolicy 匹配哪些资源/子资源的哪些操作。如果策略匹配任何规则,则该策略关心该操作。
NamedRuleWithOperations 是 Operations 和 Resources 与 ResourceNames 的元组。
spec.matchConstraints.resourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及任何未来添加的准入操作。如果存在 '*',则切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则适用的名称的白名单。一个空集意味着允许所有内容。
spec.matchConstraints.resourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用的资源列表。
例如:'pods' 表示 pods。 'pods/log' 表示 pods 的 log 子资源。 '' 表示所有资源,但不包括子资源。 'pods/' 表示 pods 的所有子资源。 '/scale' 表示所有 scale 子资源。 '/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据包含对象,可能不允许子资源。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。Namespace API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源才会匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
可能的枚举值
"*"表示包含所有范围。"Cluster"表示范围限制为集群范围的对象。Namespace 对象是集群范围的。"Namespaced"表示范围限制为命名空间范围的对象。
spec.paramKind (ParamKind)
ParamKind 指定用于参数化此策略的资源种类。如果未设置,则此策略没有参数,并且 param CEL 变量不会提供给验证表达式。如果 ParamKind 指的是不存在的种类,则此策略定义配置错误,并且应用 FailurePolicy。如果指定了 paramKind 但 ValidatingAdmissionPolicyBinding 中的 paramRef 未设置,则 params 变量将为 null。
ParamKind 是 Group、Kind 和 Version 的元组。
spec.paramKind.apiVersion (string)
APIVersion 是资源所属的 API 组版本。格式为 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是资源所属的 API 类型。必需。
spec.validations ([]Validation)
原子:将在合并期间被替换
Validations 包含用于应用验证的 CEL 表达式。Validations 和 AuditAnnotations 不能同时为空;至少需要一个 Validations 或 AuditAnnotations。
spec.validations.expression (string), required
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 (string)
Message 表示验证失败时显示的 message。如果 Expression 包含换行符,则 message 是必需的。message 不得包含换行符。如果未设置,message 为“failed rule: {Rule}”。例如:“must be a URL with the host matching spec.host” 如果 Expression 包含换行符。Message 是必需的。message 不得包含换行符。如果未设置,message 为“failed Expression: {Expression}”。
spec.validations.messageExpression (string)
messageExpression 声明一个 CEL 表达式,该表达式评估为验证失败时返回的验证失败 message。由于 messageExpression 用作失败 message,因此必须评估为字符串。如果 validation 上同时存在 message 和 messageExpression,则在验证失败时将使用 messageExpression。如果 messageExpression 在运行时发生错误,则会记录运行时错误,并且验证失败 message 将生成,就好像未设置 messageExpression 字段一样。如果 messageExpression 评估为空字符串、仅包含空格的字符串或包含换行符的字符串,则验证失败 message 也将生成,就好像未设置 messageExpression 字段一样,并且 messageExpression 生成空字符串/仅包含空格的字符串/包含换行符的字符串的事实将被记录。messageExpression 可以访问与
expression相同的变量,但authorizer和authorizer.requestResource除外。示例:“object.x must be less than max ("+string(params.max)+")”spec.validations.reason (string)
Reason 表示此验证失败的机器可读描述。如果这是列表中第一个失败的验证,则此 reason 以及相应的 HTTP 响应代码将用于 HTTP 响应到客户端。当前支持的 reason 为:“Unauthorized”、“Forbidden”、“Invalid”、“RequestEntityTooLarge”。如果未设置,则在响应客户端时将使用 StatusReasonInvalid。
spec.variables ([]Variable)
补丁策略:在 key
name上合并映射:在合并期间将保留 key name 上的唯一值
Variables 包含可用于其他表达式组合的变量的定义。每个变量定义为命名的 CEL 表达式。此处定义的变量将在策略的其他表达式中作为
variables提供,但 MatchConditions 除外,因为 MatchConditions 在策略的其余部分之前进行评估。变量的表达式可以引用列表中更早定义的其他变量,但不能引用之后定义的变量。因此,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)
映射:在合并期间将保留键类型上的唯一值
The conditions 表示策略当前状态的最新可用观察结果。
Condition 包含此 API 资源当前状态的一个方面的详细信息。
status.conditions.lastTransitionTime (Time), required
lastTransitionTime 是条件从一个状态过渡到另一个状态的最后时间。这应该是在底层条件发生变化时的时间。如果不知道,则使用 API 字段发生变化的时间是可以接受的。
Time 是 time.Time 的包装器,支持正确地编组到 YAML 和 JSON。为时间包提供的许多工厂方法提供包装器。
status.conditions.message (string), required
message 是一个人类可读的消息,指示过渡的详细信息。这可能是一个空字符串。
status.conditions.reason (string), required
reason 包含指示条件上次转换的原因的程序化标识符。特定条件类型的生产者可以定义此字段的预期值和含义,以及这些值是否被视为受保证的 API。该值应为 CamelCase 字符串。此字段不能为空。
status.conditions.status (string), required
条件的 status,可以是 True、False 或 Unknown。
status.conditions.type (string), required
条件的类型,采用 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)
原子:将在合并期间被替换
每个表达式的类型检查警告。
ExpressionWarning 是针对特定表达式的警告信息。
status.typeChecking.expressionWarnings.fieldRef (string), required
引用表达式的字段的路径。例如,第一个验证项的表达式的引用是 "spec.validations[0].expression"
status.typeChecking.expressionWarnings.warning (string), required
以人类可读的形式提供类型检查信息的内容。警告的每一行包含表达式检查的类型,后跟编译器来自类型检查的错误。
ValidatingAdmissionPolicyList
ValidatingAdmissionPolicyList 是 ValidatingAdmissionPolicy 的列表。
items ([]ValidatingAdmissionPolicy), required
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 (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 (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 (ValidatingAdmissionPolicyBindingSpec)
ValidatingAdmissionPolicyBinding 期望行为的规范。
ValidatingAdmissionPolicyBindingSpec 是 ValidatingAdmissionPolicyBinding 的规范。
spec.matchResources (MatchResources)
MatchResources 声明与此绑定匹配并由其验证的资源。请注意,这与策略的 matchConstraints 相交,因此只有同时匹配策略的请求才能被此绑定选中。如果未设置此项,则所有匹配策略的资源都将由此绑定验证。当 resourceRules 未设置时,它不会约束资源匹配。如果资源匹配此对象的其他字段,它将被验证。请注意,这与 ValidatingAdmissionPolicy matchConstraints 不同,在 ValidatingAdmissionPolicy matchConstraints 中,resourceRules 是必需的。
MatchResources 决定是否基于请求是否满足匹配标准来运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则将被排除)
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子:将在合并期间被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心哪些资源/子资源的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
NamedRuleWithOperations 是 Operations 和 Resources 与 ResourceNames 的元组。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则切片的长度必须为一。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则切片的长度必须为一。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及任何未来添加的准入操作。如果存在 '*',则切片的长度必须为一。必需。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则适用的名称的白名单。一个空集意味着允许所有内容。
spec.matchResources.excludeResourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用的资源列表。
例如:'pods' 表示 pods。 'pods/log' 表示 pods 的 log 子资源。 '' 表示所有资源,但不包括子资源。 'pods/' 表示 pods 的所有子资源。 '/scale' 表示所有 scale 子资源。 '/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据包含对象,可能不允许子资源。必需。
spec.matchResources.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。Namespace API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源才会匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
可能的枚举值
"*"表示包含所有范围。"Cluster"表示范围限制为集群范围的对象。Namespace 对象是集群范围的。"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”
可能的枚举值
"Equivalent"表示如果请求通过另一个 API 组或版本修改规则中列出的资源,则应将请求发送到 webhook。"Exact"表示仅当请求完全匹配给定的规则时,才应将请求发送到 webhook。
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)
原子:将在合并期间被替换
ResourceRules 描述了 ValidatingAdmissionPolicy 匹配哪些资源/子资源的哪些操作。如果策略匹配任何规则,则该策略关心该操作。
NamedRuleWithOperations 是 Operations 和 Resources 与 ResourceNames 的元组。
spec.matchResources.resourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'' 是所有组。如果存在 '',则切片的长度必须为一。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'' 是所有版本。如果存在 '',则切片的长度必须为一。必需。
spec.matchResources.resourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入钩子关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 * 表示所有这些操作以及任何未来添加的准入操作。如果存在 '*',则切片的长度必须为一。必需。
spec.matchResources.resourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则适用的名称的白名单。一个空集意味着允许所有内容。
spec.matchResources.resourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用的资源列表。
例如:'pods' 表示 pods。 'pods/log' 表示 pods 的 log 子资源。 '' 表示所有资源,但不包括子资源。 'pods/' 表示 pods 的所有子资源。 '/scale' 表示所有 scale 子资源。 '/*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据包含对象,可能不允许子资源。必需。
spec.matchResources.resourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。Namespace API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源才会匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
可能的枚举值
"*"表示包含所有范围。"Cluster"表示范围限制为集群范围的对象。Namespace 对象是集群范围的。"Namespaced"表示范围限制为命名空间范围的对象。
spec.paramRef (ParamRef)
paramRef 指定用于配置准入控制策略的参数资源。它应指向绑定 ValidatingAdmissionPolicy 的 ParamKind 中指定的类型资源。如果策略指定了 ParamKind 并且 paramRef 引用的资源不存在,则此绑定被认为配置错误,并且应用 ValidatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,则忽略此字段,并且规则在没有参数的情况下进行评估。
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 可用于根据其标签匹配多个 param 对象。提供 selector: {} 以匹配 ParamKind 的所有资源。
如果找到多个参数,则使用策略表达式对所有参数进行评估,并将结果 AND 运算在一起。
必须设置
name或selector中的一个,但name和selector是互斥属性。如果设置了其中一个,则必须取消设置另一个。
spec.policyName (string)
PolicyName 引用 ValidatingAdmissionPolicy 名称,ValidatingAdmissionPolicyBinding 将绑定到该名称。如果引用的资源不存在,则此绑定将被视为无效并被忽略。必需。
spec.validationActions ([]string)
集合:合并期间将保留唯一值
validationActions 声明如何强制执行引用 ValidatingAdmissionPolicy 的验证。如果验证结果为 false,则始终根据这些操作强制执行。
只有当 ValidatingAdmissionPolicy 的 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\": \"Invalid value\", {\"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}
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
401: 未授权
get 读取指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
401: 未授权
list 列出或监视 ValidatingAdmissionPolicy 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
Parameters
allowWatchBookmarks (in query): boolean
continue (in query): string
fieldSelector (in query): string
labelSelector (in query): string
limit (in query): integer
pretty (在查询中): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
watch (in query): boolean
响应
200 (ValidatingAdmissionPolicyList): 成功
401: 未授权
create 创建一个 ValidatingAdmissionPolicy
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
Parameters
body: ValidatingAdmissionPolicy, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
201 (ValidatingAdmissionPolicy): 已创建
202 (ValidatingAdmissionPolicy): 已接受
401: 未授权
update 替换指定的 ValidatingAdmissionPolicy
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
update 替换指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
patch 部分更新指定的 ValidatingAdmissionPolicy
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
patch 部分更新指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}/status
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
响应
200 (ValidatingAdmissionPolicy): 成功
201 (ValidatingAdmissionPolicy): 已创建
401: 未授权
delete 删除一个 ValidatingAdmissionPolicy
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
ValidatingAdmissionPolicy 的名称
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (在查询中): string
propagationPolicy (in query): string
响应
200 (Status): 确定
202 (Status): 已接受
401: 未授权
deletecollection 删除 ValidatingAdmissionPolicy 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicies
Parameters
body: DeleteOptions
continue (in query): string
dryRun (在查询中): string
fieldSelector (in query): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
labelSelector (in query): string
limit (in query): integer
pretty (在查询中): string
propagationPolicy (in query): string
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
响应
200 (Status): 确定
401: 未授权
本页面是自动生成的。
如果您打算报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。