MutatingAdmissionPolicy v1beta1
apiVersion: admissionregistration.k8s.io/v1beta1
import "k8s.io/api/admissionregistration/v1beta1"
MutatingAdmissionPolicy
MutatingAdmissionPolicy 描述了定义一个准入变更策略,该策略变更进入准入链的对象。
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicy
metadata (ObjectMeta)
标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata。
spec (MutatingAdmissionPolicySpec)
MutatingAdmissionPolicy 期望行为的规范。
MutatingAdmissionPolicySpec 是准入策略期望行为的规范。
spec.failurePolicy (string)
failurePolicy 定义了如何处理准入策略的失败。失败可能来自 CEL 表达式解析错误、类型检查错误、运行时错误以及无效或错误配置的策略定义或绑定。
如果 paramKind 引用了不存在的 Kind,则策略无效。如果 paramRef.name 引用了不存在的资源,则绑定无效。
failurePolicy 不定义如何处理评估为 false 的验证。
允许的值为 Ignore 或 Fail。默认值为 Fail。
spec.matchConditions ([]MatchCondition)
补丁策略:在 key
name上合并映射:在合并期间将保留 key name 上的唯一值
matchConditions 是一个必须满足才能将请求发送到 webhook 的条件列表。匹配条件过滤掉已经由 matchConstraints 匹配的请求。空的 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 ResourceCheck,并配置请求资源。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 指定此策略设计用于验证哪些资源。MutatingAdmissionPolicy 仅在匹配所有约束时才关心请求。但是,为了防止集群进入无法通过 API 恢复的不稳定状态,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允许 CREATE、UPDATE 和 CONNECT 操作。禁止匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。
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:仅当请求完全匹配指定的规则时才匹配。例如,如果 deployments 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,但“rules”仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。Equivalent:如果修改了规则中列出的资源,即使通过另一个 API 组或版本,也匹配请求。例如,如果 deployments 可以通过 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 进行评估,如果任一对象匹配选择器,则认为匹配。空对象(CREATE 情况下为 oldObject,DELETE 情况下为 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.mutations ([]Mutation)
原子:将在合并期间被替换
mutations 包含对匹配对象执行的操作。mutations 不能为空;需要至少一个 mutation。mutations 按顺序评估,并根据 reinvocationPolicy 重新调用。策略的 mutations 针对此策略的每个绑定进行调用,mutations 的重新调用是基于绑定的。
Mutation 指定用于应用 Mutation 的 CEL 表达式。
spec.mutations.patchType (string), required
patchType 指示使用的补丁策略。允许的值为“ApplyConfiguration”和“JSONPatch”。必需。
可能的枚举值
"ApplyConfiguration"ApplyConfiguration 表示 mutation 正在使用 apply configuration 来 mutation 对象。"JSONPatch"JSONPatch 表示对象通过 JSON Patch 进行 mutation。
spec.mutations.applyConfiguration (ApplyConfiguration)
applyConfiguration 定义对象的期望配置值。使用 结构化合并差异将配置应用于准入对象。使用 CEL 表达式创建 apply configuration。
ApplyConfiguration 定义对象的期望配置值。
spec.mutations.applyConfiguration.expression (string)
expression 将由 CEL 评估以创建 apply configuration。参考:https://github.com/google/cel-spec
Apply configurations 使用对象初始化在 CEL 中声明。例如,此 CEL 表达式返回一个 apply configuration 以设置单个字段
Object{ spec: Object.spec{ serviceAccountName: "example" } }Apply configurations 不能修改原子结构、映射或数组,因为存在意外删除未包含在 apply configuration 中的值的风险。
CEL 表达式可以访问创建 apply configurations 所需的对象类型
- 'Object' - 资源对象的 CEL 类型。- 'Object.<fieldName>' - 对象字段的 CEL 类型(例如 'Object.spec')- 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 嵌套字段的 CEL 类型(例如 'Object.spec.containers')
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_.-/]*的属性名称。必需。
spec.mutations.jsonPatch (JSONPatch)
jsonPatch 定义一个 JSON patch 操作,以对对象执行修改。使用 CEL 表达式创建 JSON patch。
spec.mutations.jsonPatch.expression (string)
expression 将由 CEL 评估以创建 JSON patch。参考:https://github.com/google/cel-spec
expression 必须返回一个 JSONPatch 值的数组。
例如,这个 CEL 表达式返回一个 JSON patch,用于有条件地修改一个值
[ JSONPatch{op: "test", path: "/spec/example", value: "Red"}, JSONPatch{op: "replace", path: "/spec/example", value: "Green"} ]要定义 patch 值中的对象,请使用 Object 类型。例如
[ JSONPatch{ op: "add", path: "/spec/selector", value: Object.spec.selector{matchLabels: {"environment": "test"}} } ]要将包含 '/' 和 '~' 的字符串用作 JSONPatch 路径键,请使用 "jsonpatch.escapeKey"。例如
[ JSONPatch{ op: "add", path: "/metadata/labels/" + jsonpatch.escapeKey("example.com/environment"), value: "test" }, ]CEL 表达式可以访问创建 JSON patch 和对象所需的类型
- 'JSONPatch' - JSON Patch 操作的 CEL 类型。JSONPatch 具有 'op'、'from'、'path' 和 'value' 字段。有关更多详细信息,请参阅 JSON patch。'value' 字段可以设置为以下任何一种:string、integer、array、map 或 object。如果设置了,则 'path' 和 'from' 字段必须设置为一个 JSON pointer 字符串,其中可以使用 CEL 函数 'jsonpatch.escapeKey()' 来转义包含 '/' 和 '~' 的路径键。
- 'Object' - 资源对象的 CEL 类型。- 'Object.<fieldName>' - 对象字段的 CEL 类型(例如 'Object.spec')- 'Object.<fieldName1>.<fieldName2>...<fieldNameN>` - 嵌套字段的 CEL 类型(例如 'Object.spec.containers')
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,并配置为请求资源。
CEL 表达式可以访问 Kubernetes CEL 函数库 以及
- 'jsonpatch.escapeKey' - 执行 JSONPatch 键转义。'~' 和 '/' 分别转义为 '~0' 和 `~1'。
只能访问形式为
[a-zA-Z_.-/][a-zA-Z0-9_.-/]*的属性名称。必需。
spec.paramKind (ParamKind)
paramKind 指定用于参数化此策略的资源的类型。如果未设置,则此策略没有参数,并且验证表达式不会提供 param CEL 变量。如果 paramKind 引用一个不存在的类型,则此策略定义配置错误,并应用 FailurePolicy。如果指定了 paramKind 但 MutatingAdmissionPolicyBinding 中未设置 paramRef,则 params 变量将为 null。
ParamKind 是 Group、Kind 和 Version 的元组。
spec.paramKind.apiVersion (string)
APIVersion 是资源所属的 API 组版本。格式为 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是资源所属的 API 类型。必需。
spec.reinvocationPolicy (string)
reinvocationPolicy 指示在单个准入评估中,mutation 是否可以针对单个 MutatingAdmissionPolicyBinding 被多次调用。允许的值为 "Never" 和 "IfNeeded"。
Never: 这些 mutation 将不会在单个准入评估中针对每个 binding 被调用超过一次。
IfNeeded: 这些 mutation 可能会在单个准入请求中针对每个 binding 被调用多次,并且相对于其他准入插件、准入 webhook、此策略的 binding 和准入策略,没有保证顺序。当 mutation 在此 mutation 被调用后更改对象时,才会重新调用 mutation。必需。
可能的枚举值
"IfNeeded"表示如果被准入的对象在初始 mutation 调用后被其他准入插件修改,则 mutation 可能会在准入评估过程中至少被调用一次额外的次数。"Never"表示 mutation 在单个准入评估中不得被调用超过一次。
spec.variables ([]Variable)
原子:将在合并期间被替换
variables 包含可以在其他表达式组合中使用的变量的定义。每个变量都定义为命名的 CEL 表达式。策略中其他表达式(matchConditions 除外)中将可以使用此处定义的变量,因为 matchConditions 在策略的其余部分之前进行评估。
变量的表达式可以引用列表中前面定义的其他变量,但不能引用后面的变量。因此,变量必须按首次出现顺序排序且无循环。
Variable 是用于组合的变量的定义。变量定义为命名的表达式。
spec.variables.expression (string), 必需
Expression 是将评估为变量值的表达式。CEL 表达式可以访问与 Validation 中的 CEL 表达式相同的标识符。
spec.variables.name (string), 必需
Name 是变量的名称。名称必须是有效的 CEL 标识符,并且在所有变量中是唯一的。可以通过
variables在其他表达式中访问该变量。例如,如果名称为 "foo",则该变量将作为variables.foo提供。
MutatingAdmissionPolicyBinding
MutatingAdmissionPolicyBinding 将 MutatingAdmissionPolicy 与参数化资源绑定。MutatingAdmissionPolicyBinding 和可选的参数资源一起定义了集群管理员配置集群策略的方式。
对于给定的准入请求,每个 binding 将导致其策略被评估 N 次,其中 N 对于不使用 params 的策略/binding 为 1,否则 N 是 binding 选择的参数数量。每次评估都受到 运行时成本预算 的约束。
添加/删除策略、binding 或 params 不会影响给定 (policy, binding, param) 组合是否在其自身的 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 (MutatingAdmissionPolicyBindingSpec)
MutatingAdmissionPolicyBinding 期望行为的规范。
MutatingAdmissionPolicyBindingSpec 是 MutatingAdmissionPolicyBinding 的规范。
spec.matchResources (MatchResources)
matchResources 限制哪些资源与此 binding 匹配,以及哪些资源可以被其修改。请注意,如果 matchResources 匹配一个资源,则该资源还必须匹配策略的 matchConstraints 和 matchConditions 才能被修改。当 matchResources 未设置时,它不会约束资源匹配,并且只有策略的 matchConstraints 和 matchConditions 必须匹配才能修改资源。此外,matchResources.resourceRules 是可选的,并且在未设置时不会约束匹配。请注意,这与 MutatingAdmissionPolicy matchConstraints 不同,在 MutatingAdmissionPolicy matchConstraints 中,resourceRules 是必需的。允许 CREATE、UPDATE 和 CONNECT 操作。不允许匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。
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:仅当请求完全匹配指定的规则时才匹配。例如,如果 deployments 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,但“rules”仅包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。Equivalent:如果修改了规则中列出的资源,即使通过另一个 API 组或版本,也匹配请求。例如,如果 deployments 可以通过 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 进行评估,如果任一对象匹配选择器,则认为匹配。空对象(CREATE 情况下为 oldObject,DELETE 情况下为 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 指定用于配置准入控制策略的参数资源。它应指向类型由绑定 MutatingAdmissionPolicy 的 spec.ParamKind 指定的资源。如果策略指定了 ParamKind 并且 paramRef 引用的资源不存在,则此 binding 被认为配置错误,并应用 MutatingAdmissionPolicy 的 FailurePolicy。如果策略没有指定 ParamKind,则此字段将被忽略,并且规则将在没有 param 的情况下进行评估。
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控制当资源存在,并且名称或选择器有效,但没有与 binding 匹配的参数时,binding 的行为。如果该值为Allow,则没有匹配的参数将被视为 binding 的成功验证。如果设置为Deny,则没有匹配的参数将受到策略的failurePolicy的影响。允许的值为
Allow或Deny必需
spec.paramRef.selector (LabelSelector)
selector 可用于根据其标签匹配多个 param 对象。提供 selector: {} 以匹配 ParamKind 的所有资源。
如果找到多个参数,则使用策略表达式对所有参数进行评估,并将结果 AND 运算在一起。
必须设置
name或selector中的一个,但name和selector是互斥属性。如果设置了其中一个,则必须取消设置另一个。
spec.policyName (string)
policyName 引用 MutatingAdmissionPolicy 的名称,MutatingAdmissionPolicyBinding 与其绑定。如果引用的资源不存在,则此 binding 被认为无效,将被忽略。必需。
MutatingAdmissionPolicyList
MutatingAdmissionPolicyList 是 MutatingAdmissionPolicy 的列表。
items ([]MutatingAdmissionPolicy), required
ValidatingAdmissionPolicy 列表。
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 (ListMeta)
标准列表元数据。更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
操作
get 读取指定的 MutatingAdmissionPolicy
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
MutatingAdmissionPolicy 的名称
pretty (在查询中): string
响应
200 (MutatingAdmissionPolicy): OK
401: 未授权
list 列出或监视 MutatingAdmissionPolicy 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
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 (MutatingAdmissionPolicyList): OK
401: 未授权
create 创建一个 MutatingAdmissionPolicy
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
Parameters
body: MutatingAdmissionPolicy, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (MutatingAdmissionPolicy): OK
201 (MutatingAdmissionPolicy): Created
202 (MutatingAdmissionPolicy): Accepted
401: 未授权
update 替换指定的 MutatingAdmissionPolicy
HTTP 请求
PUT /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
MutatingAdmissionPolicy 的名称
body: MutatingAdmissionPolicy, required
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
pretty (在查询中): string
响应
200 (MutatingAdmissionPolicy): OK
201 (MutatingAdmissionPolicy): Created
401: 未授权
patch 部分更新指定的 MutatingAdmissionPolicy
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
MutatingAdmissionPolicy 的名称
body: Patch, 必需
dryRun (在查询中): string
fieldManager (在查询中): string
fieldValidation (在查询中): string
force (in query): boolean
pretty (在查询中): string
响应
200 (MutatingAdmissionPolicy): OK
201 (MutatingAdmissionPolicy): Created
401: 未授权
delete 删除一个 MutatingAdmissionPolicy
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies/{name}
Parameters
name (在路径中): string, 必需
MutatingAdmissionPolicy 的名称
body: DeleteOptions
dryRun (在查询中): string
gracePeriodSeconds (in query): integer
ignoreStoreReadErrorWithClusterBreakingPotential (in query): boolean
pretty (在查询中): string
propagationPolicy (in query): string
响应
200 (Status): 确定
202 (Status): 已接受
401: 未授权
deletecollection 删除 MutatingAdmissionPolicy 的集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1beta1/mutatingadmissionpolicies
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 项目的其他地方进行。