You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes ValidatingAdmissionPolicy规则不生效问题排查

Kubernetes ValidatingAdmissionPolicy 副本数管控异常问题解析

问题背景

你尝试通过ValidatingAdmissionPolicy实现Deployment副本数上限管控(不超过5),配置如下:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: "max-replicas-policy"
spec:
  failurePolicy: Fail
  matchConstraints:
    resourceRules:
    - apiGroups:   ["apps"]
      apiVersions: ["v1"]
      operations:  ["CREATE", "UPDATE"] # 原配置存在语法错误:多余逗号+错误注释格式
      resources:   ["deployments"]
  validations:
    - expression: "object.spec.replicas <= 5"
      reason: Invalid
      message: "The number of replicas cannot exceed 5."
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicyBinding
metadata:
  name: "max-replicas-policy-binding"
spec:
  policyName: "max-replicas-policy"
  validationActions: [Deny]
  matchResources:
    namespaceSelector:
      matchLabels:
        kubernetes.io/metadata.name: wdatp-infra-system

使用kubectl apply能正常触发自定义错误,但遇到三个异常:

  1. kubectl edit修改副本数后被拦截,但未返回自定义错误;
  2. kubectl scale可直接将副本数设为6;
  3. HPA/Keda ScaledObject修改副本数时不受管控。

核心原因分析

所有异常的根源都是当前策略未覆盖PATCH操作,同时原配置存在语法问题:

  1. 原配置的语法错误:YAML不支持//注释,且数组末尾不能加逗号,这会导致配置解析异常,即使你想后续添加PATCH操作也会失败。
  2. 各类操作的API请求类型:
    • kubectl edit:保存修改时,kubectl会发送PATCH请求(而非UPDATE),由于策略只监听CREATE/UPDATE,不会触发你的自定义验证规则,拦截行为来自集群其他默认校验或策略,因此不会返回你的自定义错误。
    • kubectl scale:scale命令本质是通过PATCH请求修改spec.replicas,同样因为策略未监听PATCH操作,直接绕过了管控。
    • HPA/Keda ScaledObject:这些组件修改Deployment副本数时,统一使用PATCH API请求,你的策略未覆盖该操作类型,因此不会被拦截。

解决方案

修正策略配置,添加PATCH操作并修复语法错误:

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingAdmissionPolicy
metadata:
  name: "max-replicas-policy"
spec:
  failurePolicy: Fail
  matchConstraints:
    resourceRules:
    - apiGroups:   ["apps"]
      apiVersions: ["v1"]
      operations:  ["CREATE", "UPDATE", "PATCH"] # 添加PATCH操作,修正语法
      resources:   ["deployments"]
  validations:
    - expression: "object.spec.replicas <= 5"
      reason: Invalid
      message: "The number of replicas cannot exceed 5."

注意:ValidatingAdmissionPolicy处理PATCH请求时,object字段会传入修改后的完整Deployment对象,因此原有的expression无需调整,依然能正确校验最终的副本数。


内容的提问来源于stack exchange,提问作者E. Pratt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:46:20