ValidatingAdmissionPolicy v1beta1
apiVersion: admissionregistration.k8s.io/v1beta1
import "k8s.io/api/admissionregistration/v1beta1"
ValidatingAdmissionPolicy
ValidatingAdmissionPolicy 描述了接受或拒绝对象而不进行修改的准入验证策略的定义。
apiVersion: admissionregistration.k8s.io/v1beta1
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), 必需
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 不定义如何处理评估为假的验证。
当 failurePolicy 设置为 Fail 时,ValidatingAdmissionPolicyBinding validationActions 定义了如何强制执行失败。
允许的值为 Ignore 或 Fail。默认值为 Fail。
spec.matchConditions ([]MatchCondition)
修补策略:按键
name
合并映射:在合并期间将保留键名称上的唯一值
MatchConditions 是必须满足才能验证请求的一组条件。匹配条件筛选掉已由规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。允许的最大匹配条件数为 64 个。
如果提供参数对象,则可以通过与验证表达式相同的方式通过
params
处理程序访问它。确切的匹配逻辑是(按顺序):
- 如果任何 matchCondition 评估为 FALSE,则跳过该策略。
- 如果所有 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' - 准入请求的属性(/pkg/apis/admission/types.go#AdmissionRequest)。'authorizer' - CEL 授权器。可用于对请求的委托人(用户或服务帐户)执行授权检查。请参阅 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)
原子:将在合并期间被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心的哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则排除它)
NamedRuleWithOperations 是具有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入挂钩关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 代表所有这些操作以及将来添加的任何其他准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.excludeResourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则应用于的名称的可选白名单。空集表示允许所有内容。
spec.matchConstraints.excludeResourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用于的一组资源。
例如:'pods' 表示吊舱。'pods/log' 表示吊舱的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示吊舱的所有子资源。'* /scale' 表示所有缩放子资源。' */*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据封闭对象,子资源可能不被允许。必需。
spec.matchConstraints.excludeResourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*” “Cluster” 表示只有集群范围的资源将匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源将匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
spec.matchConstraints.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/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)
原子:将在合并期间被替换
ResourceRules 描述了 ValidatingAdmissionPolicy 匹配的资源/子资源上的哪些操作。 如果策略与 *任何* 规则匹配,则该策略会关心该操作。
NamedRuleWithOperations 是具有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchConstraints.resourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入挂钩关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 代表所有这些操作以及将来添加的任何其他准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchConstraints.resourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则应用于的名称的可选白名单。空集表示允许所有内容。
spec.matchConstraints.resourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用于的一组资源。
例如:'pods' 表示吊舱。'pods/log' 表示吊舱的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示吊舱的所有子资源。'* /scale' 表示所有缩放子资源。' */*' 表示所有资源及其子资源。
如果存在通配符,则验证规则将确保资源不会相互重叠。
根据封闭对象,子资源可能不被允许。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*” “Cluster” 表示只有集群范围的资源将匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源将匹配此规则。“*”表示没有范围限制。子资源匹配其父资源的范围。默认值为“*”。
spec.paramKind (ParamKind)
ParamKind 指定用于参数化此策略的资源类型。 如果缺失,则此策略没有参数,并且不会将 param CEL 变量提供给验证表达式。 如果 ParamKind 指的是不存在的类型,则此策略定义配置错误,并且将应用 FailurePolicy。 如果指定了 paramKind 但在 ValidatingAdmissionPolicyBinding 中未设置 paramRef,则 params 变量将为 null。
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 评估的表达式。 ref: 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}"。 例如 "必须是主机与 spec.host 匹配的 URL" 如果 Expression 包含换行符。 消息是必需的。 消息不得包含换行符。 如果未设置,则消息为 "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 必须小于最大值 ("+string(params.max)+")"。spec.validations.reason (string)
Reason 表示对为什么此验证失败的机器可读描述。 如果这是列表中第一个失败的验证,则此原因以及相应的 HTTP 响应代码将用于发送给客户端的 HTTP 响应中。 当前支持的原因有:"Unauthorized"、"Forbidden"、"Invalid"、"RequestEntityTooLarge"。 如果未设置,则在响应客户端时使用 StatusReasonInvalid。
spec.variables ([]Variable)
修补策略:按键
name
合并映射:在合并期间将保留键名称上的唯一值
Variables 包含可用于组合其他表达式的变量定义。 每个变量都定义为一个命名的 CEL 表达式。 这里定义的变量将在策略的其他表达式(MatchConditions 除外)的
variables
下可用,因为 MatchConditions 在策略的其余部分之前评估。变量的表达式可以引用列表中前面定义的其他变量,但不能引用后面的变量。 因此,必须按第一次出现顺序对 Variables 进行排序,并且必须是无环的。
Variable 是用于组合的变量定义。 变量定义为一个命名表达式。
spec.variables.expression (string), required
Expression 是将作为变量的值评估的表达式。 CEL 表达式可以访问与 Validation 中的 CEL 表达式相同的标识符。
spec.variables.name (string), required
Name 是变量的名称。 名称必须是有效的 CEL 标识符,并且在所有变量中必须唯一。 可以通过
variables
在其他表达式中访问该变量。 例如,如果名称为 "foo",则可以通过variables.foo
访问该变量。
status (ValidatingAdmissionPolicyStatus)
ValidatingAdmissionPolicy 的状态,包括有助于确定策略是否按预期方式运行的警告。 由系统填充。 只读。
ValidatingAdmissionPolicyStatus 表示准入验证策略的状态。
status.conditions ([]Condition)
Map: 在合并期间将保留键类型上的唯一值
条件表示对策略当前状态的最新可用观察结果。
Condition 包含有关此 API 资源当前状态的某个方面的详细信息。
status.conditions.lastTransitionTime (Time), required
lastTransitionTime 是条件从一种状态转换为另一种状态的最后时间。 这应该是在基础条件发生变化时。 如果不知道,则使用 API 字段发生变化的时间是可以接受的。
Time 是 time.Time 的包装器,它支持正确地序列化为 YAML 和 JSON。 包装器是为 time 包提供的许多工厂方法提供的。
status.conditions.message (string), required
message 是一个人类可读的消息,指示有关转换的详细信息。 这可能是一个空字符串。
status.conditions.reason (string), required
reason 包含一个程序化标识符,指示条件最后转换的原因。 特定条件类型的生产者可以为该字段定义预期值和含义,以及值是否被视为保证的 API。 该值应该是一个驼峰式大小写字符串。 该字段不能为空。
status.conditions.status (string), required
条件的状态,为 True、False、Unknown 之一。
status.conditions.type (string), required
条件的类型,以驼峰式大小写或 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 (string), required
引用表达式的字段的路径。例如,对验证列表第一个项目的表达式的引用是 "spec.validations[0].expression"
status.typeChecking.expressionWarnings.warning (string), required
类型检查信息的以人类可读形式表示的内容。警告的每一行都包含要检查的表达式类型,以及编译器的类型检查错误。
ValidatingAdmissionPolicyList
ValidatingAdmissionPolicyList 是 ValidatingAdmissionPolicy 的列表。
apiVersion (string)
APIVersion 定义了此对象表示的版本化模式。服务器应该将识别的模式转换为最新的内部值,并且可能拒绝无法识别的值。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
items ([]ValidatingAdmissionPolicy)
ValidatingAdmissionPolicy 列表。
kind (string)
Kind 是一个字符串值,表示此对象代表的 REST 资源。服务器可能会从客户端提交请求的端点推断出这一点。不可更新。以驼峰式命名。更多信息: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 资源。服务器可能会从客户端提交请求的端点推断出这一点。不可更新。以驼峰式命名。更多信息: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 不同,后者需要 resourceRules。
MatchResources 决定是否根据对象是否满足匹配条件来运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则排除它)
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子:将在合并期间被替换
ExcludeResourceRules 描述了 ValidatingAdmissionPolicy 不应该关心的哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则排除它)
NamedRuleWithOperations 是具有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入挂钩关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 代表所有这些操作以及将来添加的任何其他准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.excludeResourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则应用于的名称的可选白名单。空集表示允许所有内容。
spec.matchResources.excludeResourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用于的一组资源。
例如:'pods' 表示吊舱。'pods/log' 表示吊舱的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示吊舱的所有子资源。'* /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 修改部署,但“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”。
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 是具有 ResourceNames 的 Operations 和 Resources 的元组。
spec.matchResources.resourceRules.apiGroups ([]string)
原子:将在合并期间被替换
APIGroups 是资源所属的 API 组。'*' 是所有组。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子:将在合并期间被替换
APIVersions 是资源所属的 API 版本。'*' 是所有版本。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.operations ([]string)
原子:将在合并期间被替换
Operations 是准入挂钩关心的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 代表所有这些操作以及将来添加的任何其他准入操作。如果存在 '*',则切片的长度必须为 1。必需。
spec.matchResources.resourceRules.resourceNames ([]string)
原子:将在合并期间被替换
ResourceNames 是规则应用于的名称的可选白名单。空集表示允许所有内容。
spec.matchResources.resourceRules.resources ([]string)
原子:将在合并期间被替换
Resources 是此规则应用于的一组资源。
例如:'pods' 表示吊舱。'pods/log' 表示吊舱的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示吊舱的所有子资源。'* /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 (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
Required
spec.paramRef.selector (LabelSelector)
selector 可用于根据标签匹配多个参数对象。提供 selector: {} 以匹配所有 ParamKind 的资源。
如果找到多个参数,则使用策略表达式对它们都进行评估,并将结果进行 AND 运算。
name
或selector
中必须设置一个,但name
和selector
是互斥的属性。如果设置了一个,则另一个必须未设置。
spec.policyName (string)
PolicyName 引用 ValidatingAdmissionPolicyBinding 绑定到的 ValidatingAdmissionPolicy 名称。如果所引用的资源不存在,则此绑定被认为无效,并将被忽略 Required。
spec.validationActions ([]string)
Set: 合并期间将保留唯一值
validationActions 声明如何强制执行所引用 ValidatingAdmissionPolicy 的验证。如果验证评估为 false,则始终根据这些操作强制执行。
仅当 FailurePolicy 设置为 Fail 时,ValidatingAdmissionPolicy 的 FailurePolicy 定义的故障才会根据这些操作强制执行,否则故障将被忽略。这包括编译错误、运行时错误和策略的错误配置。
validationActions 声明为操作值的集合。顺序无关紧要。validationActions 不能包含相同操作的重复项。
支持的操作值是
"Deny" 指定验证失败会导致请求被拒绝。
"Warn" 指定验证失败将报告给请求客户端,并在 HTTP 警告标头中,警告代码为 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 警告标头中不必要地重复了验证失败。
必需。
Operations
get
读取指定的 ValidatingAdmissionPolicy
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
401: Unauthorized
get
读取指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}/status
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
401: Unauthorized
list
列出或观察 ValidatingAdmissionPolicy 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies
Parameters
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(查询中):布尔值
Response
200 (ValidatingAdmissionPolicyList): OK
401: Unauthorized
create
创建一个 ValidatingAdmissionPolicy
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies
Parameters
body: ValidatingAdmissionPolicy,必需
dryRun(查询中):字符串
fieldManager(查询中):字符串
fieldValidation(查询中):字符串
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
202 (ValidatingAdmissionPolicy): 已接受
401: Unauthorized
update
替换指定的 ValidatingAdmissionPolicy
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy,必需
dryRun(查询中):字符串
fieldManager(查询中):字符串
fieldValidation(查询中):字符串
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: Unauthorized
update
替换指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}/status
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
body: ValidatingAdmissionPolicy,必需
dryRun(查询中):字符串
fieldManager(查询中):字符串
fieldValidation(查询中):字符串
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: Unauthorized
patch
部分更新指定的 ValidatingAdmissionPolicy
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
body: Patch,必需
dryRun(查询中):字符串
fieldManager(查询中):字符串
fieldValidation(查询中):字符串
force(查询中):布尔值
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: Unauthorized
patch
部分更新指定 ValidatingAdmissionPolicy 的状态
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}/status
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
body: Patch,必需
dryRun(查询中):字符串
fieldManager(查询中):字符串
fieldValidation(查询中):字符串
force(查询中):布尔值
pretty (in query): string
Response
200 (ValidatingAdmissionPolicy): OK
201 (ValidatingAdmissionPolicy): 已创建
401: Unauthorized
delete
删除一个 ValidatingAdmissionPolicy
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies/{name}
Parameters
name (in path): string, required
ValidatingAdmissionPolicy 的名称
body: DeleteOptions
dryRun(查询中):字符串
gracePeriodSeconds(查询中):整数
pretty (in query): string
propagationPolicy(查询中):字符串
Response
200 (Status): OK
202 (Status): 已接受
401: Unauthorized
deletecollection
删除 ValidatingAdmissionPolicy 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1beta1/validatingadmissionpolicies
Parameters
body: DeleteOptions
continue (in query): string
dryRun(查询中):字符串
fieldSelector (in query): string
gracePeriodSeconds(查询中):整数
labelSelector (in query): string
limit (in query): integer
pretty (in query): string
propagationPolicy(查询中):字符串
resourceVersion (in query): string
resourceVersionMatch (in query): string
sendInitialEvents (in query): boolean
timeoutSeconds (in query): integer
Response
200 (Status): OK
401: Unauthorized
此页面是自动生成的。
如果您计划报告此页面上的问题,请在您的问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目中的其他地方进行。