MutatingAdmissionPolicyBinding v1alpha1 (变更准入策略绑定 v1alpha1)

MutatingAdmissionPolicyBinding 将 MutatingAdmissionPolicy 与参数化资源进行绑定。

apiVersion: admissionregistration.k8s.io/v1alpha1

import "k8s.io/api/admissionregistration/v1alpha1"

MutatingAdmissionPolicyBinding (变更准入策略绑定)

MutatingAdmissionPolicyBinding 将 MutatingAdmissionPolicy 与参数化资源进行绑定。MutatingAdmissionPolicyBinding 和可选的参数资源共同定义了集群管理员如何为集群配置策略。

对于给定的准入请求,每个绑定都会导致其策略被评估 N 次,其中 N 对于不使用参数的策略/绑定为 1,否则 N 是由该绑定选择的参数数量。每次评估都受到 运行时成本预算的限制。

添加/移除策略、绑定或参数不会影响给定的(策略、绑定、参数)组合是否在其自身的 CEL 预算范围内。


  • apiVersion: admissionregistration.k8s.io/v1alpha1

  • kind: MutatingAdmissionPolicyBinding

  • 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 不同,MutatingAdmissionPolicy 的 resourceRules 是必需的。允许的操作包括 CREATE、UPDATE 和 CONNECT。不允许匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。

      MatchResources 根据对象是否符合匹配条件来决定是否在该对象上运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)

      • spec.matchResources.excludeResourceRules ([]NamedRuleWithOperations)

        原子操作:合并时将被替换

        ExcludeResourceRules 描述了策略不应关心哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)

        NamedRuleWithOperations 是包含操作、资源和资源名的元组。

        • 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' 指代 pods。'pods/log' 指代 pods 的 log 子资源。'*' 指代所有资源,但不包括子资源。'pods/*' 指代 pods 的所有子资源。'*/scale' 指代所有 scale 子资源。'*/*' 指代所有资源及其子资源。

          如果存在通配符,验证规则将确保资源之间不重叠。

          根据包含对象,可能不允许使用子资源。必需。

        • spec.matchResources.excludeResourceRules.scope (string)

          scope 指定此规则的作用域。有效值包括 "Cluster"、"Namespaced" 和 ""。 "Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象属于集群范围。 "Namespaced" 表示只有命名空间范围的资源会匹配此规则。 "" 表示没有作用域限制。子资源匹配其父资源的作用域。默认为 "*"。

      • spec.matchResources.matchPolicy (string)

        matchPolicy 定义了如何使用 "MatchResources" 列表来匹配传入请求。允许的值为 "Exact" 或 "Equivalent"。

        • Exact:仅当请求与指定的规则完全匹配时才匹配该请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,但 "rules" 只包含 `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`,则准入策略不考虑对 apps/v1beta1 或 extensions/v1beta1 API 组的请求。

        • Equivalent:如果请求修改了规则中列出的资源,即使是通过另一个 API 组或版本进行修改,也会匹配该请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且 "rules" 只包含 `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`,则准入策略**会**考虑对 apps/v1beta1 或 extensions/v1beta1 API 组发出的请求。API Server 必要时会将请求转换为匹配的资源 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 进行评估,如果任一对象匹配选择器,则视为匹配。空对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是可选加入时才使用对象选择器,因为最终用户可能通过设置标签来跳过准入 webhook。默认为空 LabelSelector,它匹配一切。

      • spec.matchResources.resourceRules ([]NamedRuleWithOperations)

        原子操作:合并时将被替换

        ResourceRules 描述了准入策略匹配哪些资源/子资源上的哪些操作。如果策略匹配 任何 Rule,则策略会关心该操作。

        NamedRuleWithOperations 是包含操作、资源和资源名的元组。

        • 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' 指代 pods。'pods/log' 指代 pods 的 log 子资源。'*' 指代所有资源,但不包括子资源。'pods/*' 指代 pods 的所有子资源。'*/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 是被引用资源的名称。

        nameselector 是互斥属性。如果设置了其中一个,则必须取消设置另一个。

      • spec.paramRef.namespace (string)

        namespace 是引用资源的命名空间。允许将参数搜索限制在特定命名空间。适用于 nameselector 字段。

        通过在策略中指定命名空间范围的 paramKind 并将此字段留空,可以使用按命名空间的参数。

        • 如果 paramKind 是集群范围的,此字段必须取消设置。设置此字段会导致配置错误。

        • 如果 paramKind 是命名空间范围的,当此字段留空时,将使用正在评估准入的对象的命名空间。请注意,如果此字段留空,则绑定不能匹配任何集群范围的资源,否则会导致错误。

      • spec.paramRef.parameterNotFoundAction (string)

        parameterNotFoundAction 控制当资源存在、name 或 selector 有效,但绑定未匹配到任何参数时,绑定的行为。如果值设置为 Allow,则没有匹配到的参数将被绑定视为成功的验证。如果设置为 Deny,则没有匹配到的参数将不受策略的 failurePolicy 约束。

        允许的值为 AllowDeny,默认为 Deny

      • spec.paramRef.selector (LabelSelector,标签选择器)

        selector 可用于根据标签匹配多个参数对象。提供 selector: {} 以匹配 ParamKind 的所有资源。

        如果找到多个参数,它们都将使用策略表达式进行评估,并且结果将进行逻辑 AND 运算。

        必须设置 nameselector 中的一个,但 nameselector 是互斥属性。如果设置了其中一个,则必须取消设置另一个。

    • spec.policyName (string)

      policyName 引用了 MutatingAdmissionPolicy 的名称,MutatingAdmissionPolicyBinding 将绑定到该策略。如果引用的资源不存在,此绑定被视为无效并将被忽略。必需。

MutatingAdmissionPolicy (变更准入策略)

MutatingAdmissionPolicy 描述了准入变更策略的定义,该策略在对象进入准入链时对其进行变更。


  • 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 (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 是请求要被验证必须满足的条件列表。匹配条件会过滤掉已被 matchConstraints 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。

      如果提供了参数对象,可以通过 params 句柄访问它,方式与验证表达式相同。

      精确的匹配逻辑(按顺序)是:

      1. 如果任何 matchCondition 评估结果为 FALSE,则跳过该策略。
      2. 如果所有 matchCondition 评估结果为 TRUE,则评估该策略。
      3. 如果任何 matchCondition 评估结果为错误(但没有 FALSE)
        • 如果 failurePolicy=Fail,则拒绝请求
        • 如果 failurePolicy=Ignore,则跳过该策略

      **

      • spec.matchConditions.expression (string),必需

        Expression 表示将由 CEL 评估的表达式。必须评估为布尔值。CEL 表达式可以访问 AdmissionRequest 和 Authorizer 的内容,这些内容被组织成 CEL 变量

        'object' - 来自传入请求的对象。对于 DELETE 请求,此值为 null。'oldObject' - 现有对象。对于 CREATE 请求,此值为 null。'request' - 准入请求的属性(参考)。'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),必需

        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 指定了此策略旨在验证哪些资源。如果请求匹配 所有 Constraint,则 MutatingAdmissionPolicy 会关心该请求。但是,为了防止集群陷入无法通过 API 恢复的不稳定状态,MutatingAdmissionPolicy 不能匹配 MutatingAdmissionPolicy 和 MutatingAdmissionPolicyBinding。允许的操作包括 CREATE、UPDATE 和 CONNECT。不允许匹配 DELETE 操作。'*' 匹配 CREATE、UPDATE 和 CONNECT。必需。

      MatchResources 根据对象是否符合匹配条件来决定是否在该对象上运行准入控制策略。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)

      • spec.matchConstraints.excludeResourceRules ([]NamedRuleWithOperations)

        原子操作:合并时将被替换

        ExcludeResourceRules 描述了策略不应关心哪些资源/子资源上的哪些操作。排除规则优先于包含规则(如果资源同时匹配两者,则被排除)

        NamedRuleWithOperations 是包含操作、资源和资源名的元组。

        • 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' 指代 pods。'pods/log' 指代 pods 的 log 子资源。'*' 指代所有资源,但不包括子资源。'pods/*' 指代 pods 的所有子资源。'*/scale' 指代所有 scale 子资源。'*/*' 指代所有资源及其子资源。

          如果存在通配符,验证规则将确保资源之间不重叠。

          根据包含对象,可能不允许使用子资源。必需。

        • spec.matchConstraints.excludeResourceRules.scope (string)

          scope 指定此规则的作用域。有效值包括 "Cluster"、"Namespaced" 和 ""。 "Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象属于集群范围。 "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 API 组的请求。

        • Equivalent:如果请求修改了规则中列出的资源,即使是通过另一个 API 组或版本进行修改,也会匹配该请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且 "rules" 只包含 `apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"]`,则准入策略**会**考虑对 apps/v1beta1 或 extensions/v1beta1 API 组发出的请求。API Server 必要时会将请求转换为匹配的资源 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 进行评估,如果任一对象匹配选择器,则视为匹配。空对象(创建时的 oldObject 或删除时的 newObject)或无法具有标签的对象(例如 DeploymentRollback 或 PodProxyOptions 对象)不被视为匹配。仅当 webhook 是可选加入时才使用对象选择器,因为最终用户可能通过设置标签来跳过准入 webhook。默认为空 LabelSelector,它匹配一切。

      • spec.matchConstraints.resourceRules ([]NamedRuleWithOperations)

        原子操作:合并时将被替换

        ResourceRules 描述了准入策略匹配哪些资源/子资源上的哪些操作。如果策略匹配 任何 Rule,则策略会关心该操作。

        NamedRuleWithOperations 是包含操作、资源和资源名的元组。

        • 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' 指代 pods。'pods/log' 指代 pods 的 log 子资源。'*' 指代所有资源,但不包括子资源。'pods/*' 指代 pods 的所有子资源。'*/scale' 指代所有 scale 子资源。'*/*' 指代所有资源及其子资源。

          如果存在通配符,验证规则将确保资源之间不重叠。

          根据包含对象,可能不允许使用子资源。必需。

        • spec.matchConstraints.resourceRules.scope (string)

          scope 指定此规则的作用域。有效值包括 "Cluster"、"Namespaced" 和 ""。 "Cluster" 表示只有集群范围的资源会匹配此规则。Namespace API 对象属于集群范围。 "Namespaced" 表示只有命名空间范围的资源会匹配此规则。 "" 表示没有作用域限制。子资源匹配其父资源的作用域。默认为 "*"。

    • spec.mutations ([]Mutation)

      原子操作:合并时将被替换

      mutations 包含对匹配对象执行的操作。mutations 不能为空;至少需要一个变更操作。mutations 按顺序评估,并根据 reinvocationPolicy 进行重新调用。策略的 mutations 会为该策略的每个绑定调用,并且 mutations 的重新调用是基于每个绑定进行的。

      Mutation 指定用于应用变更的 CEL 表达式。

      • spec.mutations.patchType (string),必需

        patchType 指示使用的补丁策略。允许的值为 "ApplyConfiguration" 和 "JSONPatch"。必需。

      • spec.mutations.applyConfiguration (ApplyConfiguration)

        applyConfiguration 定义了对象的期望配置值。配置使用 结构化合并差异 应用到准入对象。使用 CEL 表达式创建 apply 配置。

        ApplyConfiguration 定义了对象的期望配置值。

        • spec.mutations.applyConfiguration.expression (string)

          expression 将由 CEL 评估以创建 apply 配置。参考:https://github.com/google/cel-spec

          Apply 配置在 CEL 中使用对象初始化声明。例如,此 CEL 表达式返回一个用于设置单个字段的 apply 配置

          Object{
            spec: Object.spec{
              serviceAccountName: "example"
            }
          }
          

          Apply 配置不得修改原子结构体、map 或数组,因为存在意外删除 apply 配置中未包含的值的风险。

          CEL 表达式可以访问创建 apply 配置所需的对象类型

          • '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 Authorizer。可用于对请求的主体(用户或服务帐户)执行授权检查。请参阅 https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
          • 'authorizer.requestResource' - 从 'authorizer' 构建并使用请求资源配置的 CEL ResourceCheck。

          apiVersionkindmetadata.namemetadata.generateName 始终可以从对象的根访问。其他元数据属性无法访问。

          只有形式为 [a-zA-Z_.-/][a-zA-Z0-9_.-/]* 的属性名称可以访问。必需。

      • spec.mutations.jsonPatch (JSONPatch)

        jsonPatch 定义了一个 JSON patch 操作,用于对对象执行变更。使用 CEL 表达式创建 JSON patch。

        JSONPatch 定义了一个 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"}
            ]
          

          要为补丁值定义对象,请使用 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。如果设置了 'value' 字段,则 '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 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 引用了不存在的 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 调用后更改了对象时,才会重新调用 mutations。必需。

    • spec.variables ([]Variable)

      原子操作:合并时将被替换

      variables 包含可在其他表达式组合中使用的变量定义。每个变量都定义为一个命名 CEL 表达式。此处定义的变量将在策略的其他表达式中的 variables 下可用,但 matchConditions 除外,因为 matchConditions 在策略的其余部分之前评估。

      变量的表达式可以引用列表中较早定义的其他变量,但不能引用后面的变量。因此,变量必须按首次出现的顺序排序且不能形成循环。

      Variable 是用于组合的变量定义。

      • spec.variables.expression (string),必需

        Expression 是将作为变量值进行评估的表达式。此 CEL 表达式可以访问与 Validation 中 CEL 表达式相同的标识符。

      • spec.variables.name (string),必需

        Name 是变量的名称。名称必须是有效的 CEL 标识符,并且在所有变量中唯一。可以在其他表达式中通过 variables 访问该变量。例如,如果名称为 "foo",则该变量将作为 variables.foo 可用。

MutatingAdmissionPolicyBindingList (MutatingAdmissionPolicyBinding 列表)

MutatingAdmissionPolicyBindingList 是 MutatingAdmissionPolicyBinding 的列表。


操作 (Operations)


get 读取指定的 MutatingAdmissionPolicyBinding

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

参数

  • name (路径中): 字符串,必需

    MutatingAdmissionPolicyBinding 的名称

  • pretty (查询参数中): 字符串

    美观输出

响应

200 (MutatingAdmissionPolicyBinding): 正常 (OK)

401: 未授权 (Unauthorized)

list 列出或监视 MutatingAdmissionPolicyBinding 类型的对象

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

参数

响应

200 (MutatingAdmissionPolicyBindingList): 正常 (OK)

401: 未授权 (Unauthorized)

create 创建一个 MutatingAdmissionPolicyBinding

HTTP 请求

POST /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

参数

响应

200 (MutatingAdmissionPolicyBinding): 正常 (OK)

201 (MutatingAdmissionPolicyBinding): 已创建 (Created)

202 (MutatingAdmissionPolicyBinding): 已接受 (Accepted)

401: 未授权 (Unauthorized)

update 替换指定的 MutatingAdmissionPolicyBinding

HTTP 请求

PUT /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

参数

响应

200 (MutatingAdmissionPolicyBinding): 正常 (OK)

201 (MutatingAdmissionPolicyBinding): 已创建 (Created)

401: 未授权 (Unauthorized)

patch 部分更新指定的 MutatingAdmissionPolicyBinding

HTTP 请求

PATCH /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

参数

  • name (路径中): 字符串,必需

    MutatingAdmissionPolicyBinding 的名称

  • body: Patch, 必需

  • dryRun (查询参数中): 字符串

    dryRun

  • fieldManager (查询参数中): 字符串

    fieldManager

  • fieldValidation (查询参数中): 字符串

    fieldValidation

  • force (查询参数中): 布尔值

    force

  • pretty (查询参数中): 字符串

    美观输出

响应

200 (MutatingAdmissionPolicyBinding): 正常 (OK)

201 (MutatingAdmissionPolicyBinding): 已创建 (Created)

401: 未授权 (Unauthorized)

delete 删除一个 MutatingAdmissionPolicyBinding

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings/{name}

参数

响应

200 (Status): 正常 (OK)

202 (Status): 已接受 (Accepted)

401: 未授权 (Unauthorized)

deletecollection 删除 MutatingAdmissionPolicyBinding 集合

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1alpha1/mutatingadmissionpolicybindings

参数

响应

200 (Status): 正常 (OK)

401: 未授权 (Unauthorized)

此页面是自动生成的。

如果您计划报告此页面存在的问题,请在问题描述中提及此页面是自动生成的。修复可能需要在 Kubernetes 项目的其他地方进行。

最后修改时间 2025 年 4 月 24 日 上午 9:14 PST: v1.33 的 Markdown API 参考 (b84ec30bbb)