The snapshot validating webhook is an HTTP callback which responds to admission requests. It is part of a larger plan to tighten validation for volume snapshot objects. This webhook introduces the ratcheting validation mechanism targeting the tighter validation. The cluster admin or Kubernetes distribution admin should install the webhook alongside the snapshot controllers and CRDs.
WARNING: Cluster admins choosing not to install the webhook server and participate in the phased release process can cause future problems when upgrading from
v1beta1
tov1
volumesnapshot API, if there are currently persisted objects which fail the new stricter validation. Potential impacts include being unable to delete invalid snapshot objects.
The following are prerequisites to use this validating webhook:
admissionregistration.k8s.io/v1beta1
, v1.16+ to use admissionregistration.k8s.io/v1
, v1.17+ to use snapshot.storage.k8s.io/v1beta1
)admissionregistration.k8s.io/v1beta1
or admissionregistration.k8s.io/v1
is enabled.Build the binary
make
Build the docker image
docker build -t snapshot-validation-webhook:latest -f ./cmd/snapshot-validation-webhook/Dockerfile .
The webhook server is provided as an image which can be built from this repository. It can be deployed anywhere, as long as the api server is able to reach it over HTTPS. It is recommended to deploy the webhook server in the cluster as snapshotting is latency sensitive. A ValidatingWebhookConfiguration
object is needed to configure the api server to contact the webhook server. Please see the documentation for more details. The webhook server code is adapted from the webhook server used in the kubernetes/kubernetes end to end testing code.
Please note this is not considered to be a production ready method to deploy the certificates and is only provided for demo purposes. This is only one of many ways to deploy the certificates, it is your responsibility to ensure the security of your cluster. TLS certificates and private keys should be handled with care and you may not want to keep them in plain Kubernetes secrets.
This method was heavily adapted from banzai cloud.
These commands should be run from the top level directory.
Run the create-cert.sh
script. Note using the default namespace will allow anyone with access to that namespace to read your secret. It is recommended to change the namespace in all the files and the commands given below.
# This script will create a TLS certificate signed by the [cluster](https://kubernetes.io/docs/tasks/tls/managing-tls-in-a-cluster/). It will place the public and private key into a secret on the cluster.
./deploy/kubernetes/webhook-example/create-cert.sh --service snapshot-validation-service --secret snapshot-validation-secret --namespace default # Make sure to use a different namespace
Patch the ValidatingWebhookConfiguration
file from the template, filling in the CA bundle field.
cat ./deploy/kubernetes/webhook-example/admission-configuration-template | ./deploy/kubernetes/webhook-example/patch-ca-bundle.sh > ./deploy/kubernetes/webhook-example/admission-configuration.yaml
Change the namespace in the generated admission-configuration.yaml
file. Change the namespace in the service and deployment in the webhook.yaml
file.
Create the deployment, service and admission configuration objects on the cluster.
kubectl apply -f ./deploy/kubernetes/webhook-example
Once all the pods from the deployment are up and running, you should be ready to go.
Try to create an invalid snapshot object, the snapshot creation should fail.
kubectl create -f ./examples/kubernetes/invalid-snapshot-v1.yaml
Look into cert-manager to handle the certificates, and this kube-builder tutorial on how to deploy a webhook.
Please see the deployment yaml for the arguments expected by the webhook server. The snapshot validation webhook is served at the path /volumesnapshot
.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。