Kubernetes - Admission webhook - 验证部署中的规模操作

Kubernetes - Admission webhook - validate scale operatoin in deployments

我想在扩展之前根据自定义逻辑验证部署。 我创建了一个 admission webhook 来执行此操作,但不幸的是,webbook 未检测到缩放操作。

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: deployment-validator
webhooks:
  - admissionReviewVersions:
      - v1
    clientConfig:
      service:
        name: example-name
        namespace: example-namespace
        path: /validate-deployment
        port: 9443
    failurePolicy: Ignore
    matchPolicy: Equivalent
    name: validation.deploy.example-domain.com
    namespaceSelector: {}
    objectSelector: {}
    rules:
      - apiGroups:
          - apps
        apiVersions:
          - v1
        operations:
          - '*'
        resources:
          - deployment
        scope: '*'
    sideEffects: None
    timeoutSeconds: 10

如果我创建或更新部署,webhook 服务器会检测到该操作,如果我 PATCH(kubectl 补丁...)也是如此。 不幸的是,如果我使用 kubectl scale ...,webhook 服务器不会检测到该操作,并且我无法验证请求。

我该如何解决这个问题?

当您 运行 kubectl scale 时,您实际上并没有修补 Deployment 资源,而是在编辑名为 Scale 的子资源。

这是比例调用的 API 文档条目:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/#replace-scale-deployment-v1-apps

PUT /apis/apps/v1/namespaces/{namespace}/deployments/{name}/scale

此外,我认为您的资源需要复数名称。 因此,您可能必须像这样更改准入控制器中的规则:

    rules:
      - apiGroups:
          - apps
        apiVersions:
          - v1
        operations:
          - '*'
        resources:
          - deployments/scale
        scope: '*'

这应该有效。