我想在扩展之前验证基于自定义逻辑的部署。我创建了一个允许的webhook来做这件事,但不幸的是,缩放操作没有被webook检测到。
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 PATCH…)不幸的是,如果我使用kubectl规模…, webhook服务器未检测到该操作,因此无法验证请求。
如何解决这个问题?
当您运行kubectl scale
时,您实际上并没有修补Deployment
资源,但您正在编辑名为Scale
的子资源。
这是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: '*'
,这应该可以。