如何本地调试Kubebuilder Webhook?证书配置求最简方案
本地调试Kubebuilder Webhook最简方案
方案一:用Kubebuilder自带工具生成证书(最省事)
- 执行命令生成证书到默认路径:
这个命令会自动在Kubebuilder期望的临时目录(即你报错里的make certs/var/folders/.../serving-certs)生成tls.crt和tls.key,直接解决文件找不到的问题。 - 修改Webhook配置,让集群apiserver能访问本地服务:
打开config/webhook/manifests.yaml,找到MutatingWebhookConfiguration或ValidatingWebhookConfiguration,把clientConfig里的service块注释掉,换成url指向本地Webhook端口(默认9443):
注意替换路径里的clientConfig: # service: # name: webhook-service # namespace: default # path: /mutate-xxx-xxx-v1-xxx url: "https://localhost:9443/mutate-xxx-xxx-v1-xxx"xxx为你的API组和资源名称。 - 应用修改后的配置并启动控制器:
kubectl apply -f config/webhook/manifests.yaml make run
方案二:手动生成自签证书(灵活可控)
- 用openssl生成自签证书,CN要和Webhook服务的域名一致(默认是
webhook-service.default.svc):openssl req -x509 -newkey rsa:4096 -nodes -keyout tls.key -out tls.crt -days 365 -subj "/CN=webhook-service.default.svc" - 启动控制器时指定证书目录:
替换make run ENABLE_WEBHOOKS=true WEBHOOK_CERT_DIR=/path/to/your/certs/path/to/your/certs为你存放tls.crt和tls.key的目录。 - 同样需要修改Webhook配置为
url指向localhost,步骤同方案一。
方案三:配合cert-manager使用
- 导出cert-manager生成的证书Secret到本地:
假设你的证书对应的Secret是webhook-server-cert,执行:kubectl get secret webhook-server-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > tls.crt kubectl get secret webhook-server-cert -o jsonpath='{.data.tls\.key}' | base64 -d > tls.key - 将证书放到Kubebuilder默认临时目录,或者启动时指定
WEBHOOK_CERT_DIR路径,后续步骤同前两个方案。
内容的提问来源于stack exchange,提问作者JME
相关产品推荐
相关产品推荐

