MutatingAdmissionPolicy v1alpha1
apiVersion: admissionregistration.k8s.io/v1alpha1
import "k8s.io/api/admissionregistration/v1alpha1"
MutatingAdmissionPolicy
MutatingAdmissionPolicy 描述了准入变动策略的定义,该策略用于变动进入准入链的对象。
apiVersion: admissionregistration.k8s.io/v1alpha1
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)
Patch 策略:基于键
name
进行合并Map:合并时将保留键 name 的唯一值
matchConditions 是请求必须满足的条件列表才能进行验证。匹配条件(matchConditions)会对 matchConstraints 已匹配的请求进行过滤。空的 matchConditions 列表表示匹配所有请求。最多允许 64 个匹配条件。
如果提供了参数对象,可以通过
params
句柄访问它,访问方式与验证表达式相同。精确匹配逻辑(按顺序)如下:
- 如果任何 matchCondition 求值为 FALSE,则跳过策略。
- 如果所有 matchConditions 求值为 TRUE,则评估策略。
- 如果任何 matchCondition 求值为错误(但没有求值为 FALSE)
- 如果 failurePolicy=Fail,则拒绝请求
- 如果 failurePolicy=Ignore,则跳过策略
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 指定了此策略旨在验证哪些资源。MutatingAdmissionPolicy 关心请求的前提是该请求匹配 所有 的 Constraints。但是,为了防止集群进入无法通过 API 恢复的不稳定状态,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允许 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。
MatchResources 根据对象是否满足匹配条件来决定是否在其上运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合并时将被替换
ExcludeResourceRules 描述了策略不应关注哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
NamedRuleWithOperations 是 Operations 和 Resources 以及 ResourceNames 的元组。
spec.matchConstraints.excludeResourceRules.apiGroups ([]string)
原子性:在合并时将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必需。
spec.matchConstraints.excludeResourceRules.apiVersions ([]string)
原子性:在合并时将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必需。
spec.matchConstraints.excludeResourceRules.operations ([]string)
原子性:在合并时将被替换
Operations 是准入 Hook 关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作和未来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必需。
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 (string)
scope 指定此规则的作用域。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群作用域的资源会匹配此规则。Namespace API 对象是集群作用域的。"Namespaced" 表示只有命名空间作用域的资源会匹配此规则。 "*" 表示没有作用域限制。子资源与其父资源的作用域一致。默认为 "*"。
spec.matchConstraints.matchPolicy (string)
matchPolicy 定义了如何使用 "MatchResources" 列表来匹配入站请求。允许的值为 "Exact" 或 "Equivalent"。
Exact:仅当请求与指定的规则完全匹配时才匹配。例如,如果 Deployment 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,但 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则准入策略不会考虑对 apps/v1beta1 或 extensions/v1beta1 API 组的请求。Equivalent:如果请求修改了 rules 中列出的资源,即使通过另一个 API 组或版本修改,也会匹配。例如,如果 Deployment 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,并且 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则准入策略 会 考虑对 apps/v1beta1 或 extensions/v1beta1 API 组的请求。如有必要,API 服务器会将请求转换为匹配的资源 API。
默认为 "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 进行评估,如果其中任何一个对象与选择器匹配,则视为匹配。null 对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 Webhook 是可选加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空的 LabelSelector,它匹配所有内容。
spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)
原子性:在合并时将被替换
ResourceRules 描述了准入策略匹配哪些资源/子资源上的哪些操作。如果操作匹配 任何 Rule,则策略会关注该操作。
NamedRuleWithOperations 是 Operations 和 Resources 以及 ResourceNames 的元组。
spec.matchConstraints.resourceRules.apiGroups ([]string)
原子性:在合并时将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.apiVersions ([]string)
原子性:在合并时将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.operations ([]string)
原子性:在合并时将被替换
Operations 是准入 Hook 关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作和未来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必需。
spec.matchConstraints.resourceRules.resourceNames ([]string)
原子性:在合并时将被替换
ResourceNames 是此规则适用名称的可选白名单。空集合表示允许所有内容。
spec.matchConstraints.resourceRules.resources ([]string)
原子性:在合并时将被替换
Resources 是此规则适用的资源列表。
例如:'pods' 表示 Pod。'pods/log' 表示 Pod 的日志子资源。'*' 表示所有资源,但不包括子资源。'pods/*' 表示 Pod 的所有子资源。'*/scale' 表示所有 scale 子资源。'*/*' 表示所有资源及其子资源。
如果存在通配符,验证规则将确保资源彼此不重叠。
根据包含对象,子资源可能不允许。必需。
spec.matchConstraints.resourceRules.scope (string)
scope 指定此规则的作用域。有效值为 "Cluster"、"Namespaced" 和 "*"。"Cluster" 表示只有集群作用域的资源会匹配此规则。Namespace API 对象是集群作用域的。"Namespaced" 表示只有命名空间作用域的资源会匹配此规则。 "*" 表示没有作用域限制。子资源与其父资源的作用域一致。默认为 "*"。
spec.mutations ([]Mutation)
原子性:在合并时将被替换
mutations 包含对匹配对象执行的操作。mutations 不能为空;至少需要一个 mutation。mutation 按顺序评估,并根据 reinvocationPolicy 重新调用。策略的 mutations 会针对此策略的每个绑定调用,并且 mutation 的重新调用是基于每个绑定进行的。
Mutation 指定用于应用 Mutation 的 CEL 表达式。
spec.mutations.patchType (string),必需
patchType 指示使用的 Patch 策略。允许的值为 "ApplyConfiguration" 和 "JSONPatch"。必需。
spec.mutations.applyConfiguration (ApplyConfiguration)
applyConfiguration 定义了对象的期望配置值。配置使用 结构化合并差异 (structured merge diff) 应用到准入对象。使用 CEL 表达式创建 apply configuration。
ApplyConfiguration 定义了对象的期望配置值。
spec.mutations.applyConfiguration.expression (string)
expression 将由 CEL 评估以创建 apply configuration。参考:https://github.com/google/cel-spec
Apply configuration 在 CEL 中使用对象初始化声明。例如,此 CEL 表达式返回一个用于设置单个字段的 apply configuration
Object{ spec: Object.spec{ serviceAccountName: "example" } }
Apply configuration 不得修改原子结构体、Map 或数组,因为存在意外删除 apply configuration 中未包含的值的风险。
CEL 表达式可以访问创建 apply configuration 所需的对象类型
- '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' - 组合变量的 Map,从其名称到其延迟评估的值。例如,名为 'foo' 的变量可以访问为 'variables.foo'。
- 'authorizer' - 一个 CEL 授权器。可用于对请求的主体(用户或服务账号)执行授权检查。请参阅 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' 字段可以设置为以下任一类型:字符串、整数、数组、Map 或对象。如果设置,'path' 和 'from' 字段必须设置为 JSON Pointer 字符串,其中可以使用 'jsonpatch.escapeKey()' CEL 函数转义包含 '/' 和 '~' 的路径键。
- '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' - 组合变量的 Map,从其名称到其延迟评估的值。例如,名为 'foo' 的变量可以访问为 'variables.foo'。
- 'authorizer' - 一个 CEL 授权器。可用于对请求的主体(用户或服务账号)执行授权检查。请参阅 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 引用了不存在的 Kind,则此策略定义配置错误,将应用 FailurePolicy。如果在 MutatingAdmissionPolicyBinding 中指定了 paramKind 但未设置 paramRef,则 params 变量将为 null。
ParamKind 是 Group、Kind 和 Version 的元组。
spec.paramKind.apiVersion (string)
APIVersion 是资源所属的 API 组版本。格式为 "group/version"。必需。
spec.paramKind.kind (string)
Kind 是资源所属的 API Kind。必需。
spec.reinvocationPolicy (string)
reinvocationPolicy 指示在单个准入评估中,是否可以在每个 MutatingAdmissionPolicyBinding 中多次调用 mutations。允许的值为 "Never" 和 "IfNeeded"。
Never:在单个准入评估中,每个绑定不会多次调用这些 mutations。
IfNeeded:对于单个准入请求,每个绑定可能会多次调用这些 mutations,并且与其他准入插件、准入 Webhook、此策略的绑定和准入策略之间没有顺序保证。仅当 mutations 在此 mutation 调用后更改对象时,才会重新调用 mutations。必需。
spec.variables ([]Variable)
原子性:在合并时将被替换
variables 包含可在其他表达式组合中使用的变量定义。每个变量都定义为一个命名的 CEL 表达式。此处定义的变量将在策略的其他表达式(除了 matchConditions,因为 matchConditions 在策略其余部分之前评估)中的
variables
下可用。变量的表达式可以引用列表中较早定义的其他变量,但不能引用后面的变量。因此,变量必须按首次出现的顺序排序且无环。
spec.variables.expression (string),必需
Expression 是将作为变量值进行评估的表达式。CEL 表达式可以访问与 Validation 中的 CEL 表达式相同的标识符。
spec.variables.name (string),必需
Name 是变量的名称。该名称必须是有效的 CEL 标识符,并且在所有变量中是唯一的。该变量可以在其他表达式中通过
variables
访问。例如,如果名称是 "foo",则变量将可用为variables.foo
MutatingAdmissionPolicyBinding
MutatingAdmissionPolicyBinding 将 MutatingAdmissionPolicy 与参数化资源绑定。MutatingAdmissionPolicyBinding 和可选的参数资源共同定义了集群管理员如何为集群配置策略。
对于给定的准入请求,每个绑定都会导致其策略被评估 N 次,其中对于不使用参数的策略/绑定,N 为 1,否则 N 为绑定选择的参数数量。每次评估都受到 运行时成本预算 的限制。
添加/移除策略、绑定或参数不会影响给定的(策略、绑定、参数)组合是否在其自身的 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 (MutatingAdmissionPolicyBindingSpec)
MutatingAdmissionPolicyBinding 期望行为的规约。
MutatingAdmissionPolicyBindingSpec 是 MutatingAdmissionPolicyBinding 的规约。
spec.matchResources (MatchResources)
matchResources 限制了哪些资源匹配此绑定,并可能被其变动。请注意,如果 matchResources 匹配某个资源,则该资源还必须匹配策略的 matchConstraints 和 matchConditions,然后才能被变动。当 matchResources 未设置时,它不约束资源匹配,资源要被变动只需匹配策略的 matchConstraints 和 matchConditions。此外,matchResources.resourceRules 是可选的,未设置时不约束匹配。请注意,这与 MutatingAdmissionPolicy 的 matchConstraints 不同,后者要求 resourceRules。允许 CREATE、UPDATE 和 CONNECT 操作。DELETE 操作可能不被匹配。'*' 匹配 CREATE、UPDATE 和 CONNECT。
MatchResources 根据对象是否满足匹配条件来决定是否在其上运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)
原子性:在合并时将被替换
ExcludeResourceRules 描述了策略不应关注哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则会被排除)
NamedRuleWithOperations 是 Operations 和 Resources 以及 ResourceNames 的元组。
spec.matchResources.excludeResourceRules.apiGroups ([]string)
原子性:在合并时将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必需。
spec.matchResources.excludeResourceRules.apiVersions ([]string)
原子性:在合并时将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必需。
spec.matchResources.excludeResourceRules.operations ([]string)
原子性:在合并时将被替换
Operations 是准入 Hook 关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作和未来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必需。
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" 表示只有集群作用域的资源会匹配此规则。Namespace API 对象是集群作用域的。"Namespaced" 表示只有命名空间作用域的资源会匹配此规则。 "*" 表示没有作用域限制。子资源与其父资源的作用域一致。默认为 "*"。
spec.matchResources.matchPolicy (string)
matchPolicy 定义了如何使用 "MatchResources" 列表来匹配入站请求。允许的值为 "Exact" 或 "Equivalent"。
Exact:仅当请求与指定的规则完全匹配时才匹配。例如,如果 Deployment 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,但 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则准入策略不会考虑对 apps/v1beta1 或 extensions/v1beta1 API 组的请求。Equivalent:如果请求修改了 rules 中列出的资源,即使通过另一个 API 组或版本修改,也会匹配。例如,如果 Deployment 可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 进行修改,并且 "rules" 只包含
apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]
,则准入策略 会 考虑对 apps/v1beta1 或 extensions/v1beta1 API 组的请求。如有必要,API 服务器会将请求转换为匹配的资源 API。
默认为 "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 进行评估,如果其中任何一个对象与选择器匹配,则视为匹配。null 对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 Webhook 是可选加入时才使用对象选择器,因为最终用户可以通过设置标签来跳过准入 Webhook。默认为空的 LabelSelector,它匹配所有内容。
spec.matchResources.resourceRules ([]NamedRuleWithOperations)
原子性:在合并时将被替换
ResourceRules 描述了准入策略匹配哪些资源/子资源上的哪些操作。如果操作匹配 任何 Rule,则策略会关注该操作。
NamedRuleWithOperations 是 Operations 和 Resources 以及 ResourceNames 的元组。
spec.matchResources.resourceRules.apiGroups ([]string)
原子性:在合并时将被替换
APIGroups 是资源所属的 API 组。'*' 表示所有组。如果存在 '*',切片的长度必须为一。必需。
spec.matchResources.resourceRules.apiVersions ([]string)
原子性:在合并时将被替换
APIVersions 是资源所属的 API 版本。'*' 表示所有版本。如果存在 '*',切片的长度必须为一。必需。
spec.matchResources.resourceRules.operations ([]string)
原子性:在合并时将被替换
Operations 是准入 Hook 关注的操作 - CREATE、UPDATE、DELETE、CONNECT 或 '*' 表示所有这些操作和未来添加的任何准入操作。如果存在 '*',切片的长度必须为一。必需。
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" 表示只有集群作用域的资源会匹配此规则。Namespace API 对象是集群作用域的。"Namespaced" 表示只有命名空间作用域的资源会匹配此规则。 "*" 表示没有作用域限制。子资源与其父资源的作用域一致。默认为 "*"。
spec.paramRef (ParamRef)
paramRef 指定用于配置准入控制策略的参数资源。它应该指向一个资源,该资源的类型由绑定的 MutatingAdmissionPolicy 的 spec.ParamKind 指定。如果策略指定了 ParamKind 并且 ParamRef 引用的资源不存在,则此绑定被视为配置错误,将应用 MutatingAdmissionPolicy 的 FailurePolicy。如果策略未指定 ParamKind,则忽略此字段,并在没有参数的情况下评估规则。
ParamRef 描述了如何定位用作策略绑定应用规则表达式输入的参数。
spec.paramRef.name (string)
name
是被引用资源的名称。name
和selector
是互斥属性。如果设置了其中一个,则另一个必须未设置。spec.paramRef.namespace (string)
namespace 是被引用资源的命名空间。允许将参数搜索限制在特定的命名空间。适用于
name
和selector
字段。通过在策略中指定命名空间作用域的
paramKind
并将此字段留空,可以使用每个命名空间的参数。如果
paramKind
是集群作用域的,则此字段 MUST 未设置。设置此字段将导致配置错误。如果
paramKind
是命名空间作用域的,当此字段留空时,将使用正在评估准入的对象的命名空间。请注意,如果此字段留空,则绑定不得匹配任何集群作用域的资源,否则将导致错误。
spec.paramRef.parameterNotFoundAction (string)
parameterNotFoundAction
控制绑定在资源存在、name 或 selector 有效但没有参数与绑定匹配时的行为。如果该值设置为Allow
,则没有匹配的参数将被绑定视为成功验证。如果设置为Deny
,则没有匹配的参数将受制于策略的failurePolicy
。允许的值为
Allow
或Deny
。默认为Deny
spec.paramRef.selector (LabelSelector)
selector 可用于根据标签匹配多个参数对象。提供 selector: {} 可匹配 ParamKind 的所有资源。
如果找到多个参数,它们都将与策略表达式一起评估,并且结果将进行 AND 运算。
name
或selector
必须设置一个,但name
和selector
是互斥属性。如果设置了其中一个,则另一个必须未设置。
spec.policyName (string)
policyName 引用 MutatingAdmissionPolicy 的名称,MutatingAdmissionPolicyBinding 将绑定到此名称。如果引用的资源不存在,则此绑定被视为无效并将被忽略。必需。
MutatingAdmissionPolicyList
MutatingAdmissionPolicyList 是 MutatingAdmissionPolicy 的列表。
items ([]MutatingAdmissionPolicy),必需
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
操作
get
读取指定的 MutatingAdmissionPolicy
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies/{name}
参数
name (路径参数): string,必需
MutatingAdmissionPolicy 的名称
pretty (查询参数): string
响应
200 (MutatingAdmissionPolicy): OK
401: 未授权
list
列出或监视 MutatingAdmissionPolicy 类型的对象
HTTP 请求
GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies
参数
allowWatchBookmarks (查询参数): boolean
continue (查询参数): string
fieldSelector (查询参数): string
labelSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
sendInitialEvents (查询参数): boolean
timeoutSeconds (查询参数): integer
watch (查询参数): boolean
响应
200 (MutatingAdmissionPolicyList): OK
401: 未授权
create
创建一个 MutatingAdmissionPolicy
HTTP 请求
POST /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies
参数
body: MutatingAdmissionPolicy,必需
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/v1alpha1/mutatingadmissionpolicies/{name}
参数
name (路径参数): string,必需
MutatingAdmissionPolicy 的名称
body: MutatingAdmissionPolicy,必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
pretty (查询参数): string
响应
200 (MutatingAdmissionPolicy): OK
201 (MutatingAdmissionPolicy): Created
401: 未授权
patch
部分更新指定的 MutatingAdmissionPolicy
HTTP 请求
PATCH /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies/{name}
参数
name (路径参数): string,必需
MutatingAdmissionPolicy 的名称
body: Patch,必需
dryRun (查询参数): string
fieldManager (查询参数): string
fieldValidation (查询参数): string
force (查询参数): boolean
pretty (查询参数): string
响应
200 (MutatingAdmissionPolicy): OK
201 (MutatingAdmissionPolicy): Created
401: 未授权
delete
删除一个 MutatingAdmissionPolicy
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies/{name}
参数
name (路径参数): string,必需
MutatingAdmissionPolicy 的名称
请求体: DeleteOptions
dryRun (查询参数): string
gracePeriodSeconds (在 query 中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中): boolean
pretty (查询参数): string
propagationPolicy (在 query 中): string
响应
200 (Status): OK
202 (Status): Accepted
401: 未授权
deletecollection
删除 MutatingAdmissionPolicy 集合
HTTP 请求
DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicies
参数
请求体: DeleteOptions
continue (查询参数): string
dryRun (查询参数): string
fieldSelector (查询参数): string
gracePeriodSeconds (在 query 中): integer
ignoreStoreReadErrorWithClusterBreakingPotential (在 query 中): boolean
labelSelector (查询参数): string
limit (查询参数): integer
pretty (查询参数): string
propagationPolicy (在 query 中): string
resourceVersion (查询参数): string
resourceVersionMatch (查询参数): string
sendInitialEvents (查询参数): boolean
timeoutSeconds (查询参数): integer
响应
200 (Status): OK
401: 未授权
本页面是自动生成的。
如果您打算报告此页面的问题,请在您的问题描述中提及该页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。