让我们先运行脚本gencerts.sh生成TLS证书和密钥。
bash gencerts.sh
要部署准入控制器,你需要本地构建Docker容器镜像,打标签,并使用以下命令将镜像推送到你的Dockerhub。
docker login
docker build -t validationwebhook:1.0 .
docker tag validationwebhook:1.0 darryk/dev:1.0
docker push darryk/dev:1.0
现在你可以将创建的镜像与Node.js应用部署到你的K8s集群中。webhook-deploy.yaml将部署集群所需的所有组件。
kubectl apply -f webhook-deploy.yaml
现在让我们向Kubernetes API Server注册我们的webhook。为此,我们创建之前生成的ca.crt文件的Base64编码,并替换webhook-registration.yaml中的CA_BUNDLE。
cat ca.crt | base64
最后,我们将向Kubernetes API Server注册webhook。
kubectl apply -f webhook-registration.yaml
我们使用edit nodes更改节点标签,并添加一个新标签。
kubectl edit nodes ip-172-20-61-82.ec2.internal
labels:
test: test
changeAllowed: "false"
由于ChangeAllowed设置为"false",我们会得到以下错误:
错误:节点 "ip-172-20-46-130.ec2.internal" 无法打补丁:准入webhook "validationwebhook.validationwebhook.svc"拒绝了请求:验证失败 你可以运行
kubectl replace -f /tmp/kubectl-edit-irc64.yaml来再次尝试此更新。
如果我们重试修改节点,进行以下更改:\
labels:
test: test
changeAllowed: "true"
在这种情况下,编辑操作已被接受,绕过了准入控制器。