ValidatingAdmissionPolicyBinding

ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。

apiVersion: admissionregistration.k8s.io/v1

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

ValidatingAdmissionPolicyBinding

ValidatingAdmissionPolicyBinding 将 ValidatingAdmissionPolicy 与参数化资源绑定。ValidatingAdmissionPolicyBinding 和参数 CRD 一起定义了集群管理员如何配置集群的策略。

对于给定的准入请求,每个绑定将导致其策略被评估 N 次,其中对于不使用参数的策略/绑定,N 为 1,否则 N 是绑定选择的参数的数量。

策略的 CEL 表达式必须具有低于最大 CEL 预算的计算 CEL 成本。每次策略评估都具有独立的 CEL 成本预算。添加/删除策略、绑定或参数不会影响给定的(策略、绑定、参数)组合是否在其自身的 CEL 预算内。


  • apiVersion: admissionregistration.k8s.io/v1

  • kind: ValidatingAdmissionPolicyBinding

  • 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 是操作和资源与资源名称的元组。

        • 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”表示 pod。“pods/log”表示 pod 的日志子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示 pod 的所有子资源。“*/scale”表示所有 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 修改 deployments,但“rules”仅包括 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。

        • Equivalent:如果修改规则中列出的资源,即使通过另一个 API 组或版本,也匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且“rules”仅包括 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 ValidatingAdmissionPolicy。

        默认为“Equivalent”

      • 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/zh-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 是操作和资源与资源名称的元组。

        • 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”表示 pod。“pods/log”表示 pod 的日志子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示 pod 的所有子资源。“*/scale”表示所有 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 是被引用资源的名称。

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

        可以通过设置 name 字段,将 selector 留空,并在 paramKind 是命名空间作用域时设置命名空间来配置用于所有准入请求的单个参数。

      • spec.paramRef.namespace (string)

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

        可以通过在策略中指定命名空间作用域的 paramKind 并将此字段留空来使用每个命名空间的参数。

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

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

      • spec.paramRef.parameterNotFoundAction (string)

        parameterNotFoundAction 控制当资源存在,并且名称或选择器有效,但绑定没有匹配的参数时,绑定的行为。如果该值设置为 Allow,则没有匹配的参数将被绑定视为成功验证。如果设置为 Deny,则没有匹配的参数将受策略的 failurePolicy 的约束。

        允许的值为 AllowDeny

        必需

      • spec.paramRef.selector (LabelSelector)

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

        如果找到多个参数,则将所有参数与策略表达式一起评估,并将结果进行 AND 运算。

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

    • spec.policyName (string)

      PolicyName 引用 ValidatingAdmissionPolicyBinding 绑定到的 ValidatingAdmissionPolicy 名称。如果引用的资源不存在,则此绑定被认为是无效的,并且将被忽略。必需。

    • spec.validationActions ([]string)

      设置:在合并期间将保留唯一值

      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 警告标头中都重复了验证失败。

      必需。

ValidatingAdmissionPolicy

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 (ObjectMeta)

    标准对象元数据;更多信息:https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata

  • spec (ValidatingAdmissionPolicySpec)

    ValidatingAdmissionPolicy 的期望行为的规范。

    ValidatingAdmissionPolicySpec 是 AdmissionPolicy 的期望行为的规范。

    • spec.auditAnnotations ([]AuditAnnotation)

      原子:将在合并期间被替换

      auditAnnotations 包含 CEL 表达式,这些表达式用于为 API 请求的审计事件生成审计注释。验证和 auditAnnotations 可能都不能为空;至少需要一个验证或 auditAnnotations。

      AuditAnnotation 描述如何为 API 请求生成审计注释。

      • spec.auditAnnotations.key (string), 必需

        key 指定审计注释键。ValidatingAdmissionPolicy 的审计注释键必须是唯一的。键必须是限定名称 ([A-Za-z0-9][-A-Za-z0-9_.]*),长度不超过 63 个字节。

        该键与 ValidatingAdmissionPolicy 的资源名称组合以构造审计注释键:“{ValidatingAdmissionPolicy name}/{key}”。

        如果准入 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 未定义如何处理评估为 false 的验证。

      当 failurePolicy 设置为 Fail 时,ValidatingAdmissionPolicyBinding 的 validationActions 定义如何强制执行失败。

      允许的值为 Ignore 或 Fail。默认为 Fail。

    • spec.matchConditions ([]MatchCondition)

      补丁策略:在键 name 上合并

      Map:在合并期间,将保留键 name 上的唯一值

      MatchConditions 是一个必须满足的条件列表,才能验证请求。匹配条件会过滤掉已通过规则、namespaceSelector 和 objectSelector 匹配的请求。空的 matchConditions 列表匹配所有请求。最多允许 64 个匹配条件。

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

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

      1. 如果任何 matchCondition 评估为 FALSE,则跳过该策略。
      2. 如果所有 matchConditions 评估为 TRUE,则评估该策略。
      3. 如果任何 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 是此匹配条件的标识符,用于匹配条件的策略合并,并为日志记录提供标识符。一个好的名称应该描述相关表达式。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 是操作和资源与资源名称的元组。

        • 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”表示 pod。“pods/log”表示 pod 的日志子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示 pod 的所有子资源。“*/scale”表示所有 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 修改 deployments,但“rules”仅包括 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将不会发送到 ValidatingAdmissionPolicy。

        • Equivalent:如果修改规则中列出的资源,即使通过另一个 API 组或版本,也匹配请求。例如,如果可以通过 apps/v1、apps/v1beta1 和 extensions/v1beta1 修改 deployments,并且“rules”仅包括 apiGroups:["apps"], apiVersions:["v1"], resources: ["deployments"],则对 apps/v1beta1 或 extensions/v1beta1 的请求将被转换为 apps/v1 并发送到 ValidatingAdmissionPolicy。

        默认为“Equivalent”

      • 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/zh-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 是操作和资源与资源名称的元组。

        • 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”表示 pod。“pods/log”表示 pod 的日志子资源。“*”表示所有资源,但不包括子资源。“pods/*”表示 pod 的所有子资源。“*/scale”表示所有 scale 子资源。“*/*”表示所有资源及其子资源。

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

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

        • spec.matchConstraints.resourceRules.scope (string)

          scope 指定此规则的范围。有效值为“Cluster”、“Namespaced”和“*”。“Cluster”表示只有集群范围的资源才会匹配此规则。命名空间 API 对象是集群范围的。“Namespaced”表示只有命名空间范围的资源才会匹配此规则。“*”表示没有范围限制。子资源与父资源的范围相匹配。默认为“*”。

    • spec.paramKind (ParamKind)

      ParamKind 指定用于参数化此策略的资源类型。如果不存在,则此策略没有参数,并且不会向验证表达式提供 param CEL 变量。如果 ParamKind 指向不存在的类型,则此策略定义配置错误,并应用 FailurePolicy。如果在 ValidatingAdmissionPolicyBinding 中指定了 paramKind 但未设置 paramRef,则 params 变量将为 null。

      ParamKind 是 Group Kind 和 Version 的元组。

      • spec.paramKind.apiVersion (string)

        APIVersion 是资源所属的 API 组版本。格式为“group/version”。必需。

      • spec.paramKind.kind (string)

        Kind 是资源所属的 API 类型。必需。

    • spec.validations ([]Validation)

      原子:将在合并期间被替换

      Validations 包含用于应用验证的 CEL 表达式。Validations 和 AuditAnnotations 不能都为空;至少需要一个 Validations 或 AuditAnnotations。

      Validation 指定用于应用验证的 CEL 表达式。

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

        Expression 表示将由 CEL 评估的表达式。参考:https://github.com/google/cel-spec CEL 表达式可以访问 API 请求/响应的内容,并将其组织到 CEL 变量中,以及其他一些有用的变量

        • 'object' - 来自传入请求的对象。对于 DELETE 请求,该值为 null。 - 'oldObject' - 现有对象。对于 CREATE 请求,该值为 null。- 'request' - API 请求的属性(参考)。- 'params' - 由正在评估的策略绑定引用的参数资源。仅当策略具有 ParamKind 时才会填充。 - 'namespaceObject' - 传入对象所属的命名空间对象。对于集群范围的资源,该值为 null。 - 'variables' - 复合变量的映射,从其名称到其延迟计算的值。例如,名为“foo”的变量可以作为“variables.foo”访问。
        • 'authorizer' - 一个 CEL 授权器。可用于对请求的主体(用户或服务帐户)执行授权检查。请参阅 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_.-/]* 的属性名称才能访问。在表达式中访问时,可访问的属性名称会根据以下规则进行转义: - '' 转义为 '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 中所有键的数组位置,但当 XY 的键集相交时,值会被 Y 中的值覆盖。附加 Y 中具有不相交键的元素,保留其部分顺序。必需。
      • spec.validations.message (string)

        Message 表示验证失败时显示的消息。如果 Expression 包含换行符,则消息是必需的。该消息不得包含换行符。如果未设置,则消息为“failed rule: {Rule}”。例如,“必须是主机与 spec.host 匹配的 URL”如果 Expression 包含换行符。则需要 Message。该消息不得包含换行符。如果未设置,则消息为“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 must be less than max ("+string(params.max)+")”

      • spec.validations.reason (string)

        Reason 表示对验证失败原因的机器可读描述。如果这是列表中第一个失败的验证,则此原因以及相应的 HTTP 响应代码将用于发送给客户端的 HTTP 响应中。当前支持的原因有:“Unauthorized”、“Forbidden”、“Invalid”、“RequestEntityTooLarge”。如果未设置,则在给客户端的响应中使用 StatusReasonInvalid。

    • spec.variables ([]Variable)

      补丁策略:在键 name 上合并

      Map:在合并期间,将保留键 name 上的唯一值

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

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

      Variable 是用于组合的变量的定义。变量定义为命名的表达式。

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

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

      • spec.variables.name (字符串), 必需

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

  • status (ValidatingAdmissionPolicyStatus)

    ValidatingAdmissionPolicy 的状态,包括用于确定策略是否按预期行为的警告。由系统填充。只读。

    ValidatingAdmissionPolicyStatus 表示准入验证策略的状态。

    • status.conditions ([]Condition)

      映射:在合并期间,将保留键类型上的唯一值

      这些 conditions 表示策略当前状态的最新可用观察结果。

      Condition 包含此 API 资源当前状态的一个方面的详细信息。

      • status.conditions.lastTransitionTime (时间), 必需

        lastTransitionTime 是条件从一个状态转换到另一个状态的最后时间。这应该是底层条件更改时的时间。如果未知,则使用 API 字段更改时的时间是可以接受的。

        Time 是 time.Time 的包装器,它支持正确地编排到 YAML 和 JSON。为 time 包提供的许多工厂方法提供了包装器。

      • status.conditions.message (字符串), 必需

        message 是一个人类可读的消息,指示有关转换的详细信息。这可能是一个空字符串。

      • status.conditions.reason (字符串), 必需

        reason 包含一个程序化的标识符,指示条件上次转换的原因。特定条件类型的生产者可以为此字段定义期望的值和含义,以及这些值是否被认为是保证的 API。该值应为 CamelCase 字符串。此字段不能为空。

      • status.conditions.status (字符串), 必需

        条件的 status,为 True、False、Unknown 之一。

      • status.conditions.type (字符串), 必需

        条件类型,使用 CamelCase 或 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 (字符串), 必需

          引用表达式的字段路径。例如,对验证第一项表达式的引用为 "spec.validations[0].expression"

        • status.typeChecking.expressionWarnings.warning (字符串), 必需

          类型检查信息的内容,以人类可读的形式显示。警告的每一行都包含检查表达式的类型,后跟编译器的类型检查错误。

ValidatingAdmissionPolicyBindingList

ValidatingAdmissionPolicyBindingList 是 ValidatingAdmissionPolicyBinding 的列表。


操作


get 读取指定的 ValidatingAdmissionPolicyBinding

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

参数

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

    ValidatingAdmissionPolicyBinding 的名称

  • pretty (在查询中): 字符串

    pretty

响应

200 (ValidatingAdmissionPolicyBinding): 成功

401: 未经授权

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

HTTP 请求

GET /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings

参数

响应

200 (ValidatingAdmissionPolicyBindingList): 成功

401: 未经授权

create 创建一个 ValidatingAdmissionPolicyBinding

HTTP 请求

POST /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings

参数

响应

200 (ValidatingAdmissionPolicyBinding): 成功

201 (ValidatingAdmissionPolicyBinding): 已创建

202 (ValidatingAdmissionPolicyBinding): 已接受

401: 未经授权

update 替换指定的 ValidatingAdmissionPolicyBinding

HTTP 请求

PUT /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

参数

响应

200 (ValidatingAdmissionPolicyBinding): 成功

201 (ValidatingAdmissionPolicyBinding): 已创建

401: 未经授权

patch 部分更新指定的 ValidatingAdmissionPolicyBinding

HTTP 请求

PATCH /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

参数

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

    ValidatingAdmissionPolicyBinding 的名称

  • body: Patch, 必需

  • dryRun (在查询中): 字符串

    dryRun

  • fieldManager (在查询中): 字符串

    fieldManager

  • fieldValidation (在查询中): 字符串

    fieldValidation

  • force (在查询中): 布尔值

    force

  • pretty (在查询中): 字符串

    pretty

响应

200 (ValidatingAdmissionPolicyBinding): 成功

201 (ValidatingAdmissionPolicyBinding): 已创建

401: 未经授权

delete 删除一个 ValidatingAdmissionPolicyBinding

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings/{name}

参数

响应

200 (Status): 成功

202 (Status): 已接受

401: 未经授权

deletecollection 删除 ValidatingAdmissionPolicyBinding 的集合

HTTP 请求

DELETE /apis/admissionregistration.k8s.io/v1/validatingadmissionpolicybindings

参数

响应

200 (Status): 成功

401: 未经授权

此页面是自动生成的。

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

上次修改时间为 2024 年 8 月 28 日下午 6:01(太平洋标准时间):更新 v1.31 的已生成 API 参考 (8ba98c79c1)