Kubebuilder项目配置webhook后提示找不到tls.crt文件如何解决
报错信息:
2021-12-06T12:37:06.624Z ERROR setup problem running manager {"error": "open /tmp/k8s-webhook-server/serving-certs/tls.crt: no such file or directory"}
报错原因
该错误表示Kubebuilder webhook服务启动时,无法在默认加载路径找到TLS证书文件,webhook需要TLS证书完成和Kubernetes API Server的加密通信。
解决方案
分两种场景处理:
场景1:本地开发调试
- 临时关闭webhook(仅用于不需要测试webhook逻辑的场景):启动operator时添加启动参数
--enable-webhook=false,即可跳过证书校验直接运行。 - 手动生成临时自签证书:
- 先创建证书存放目录:
mkdir -p /tmp/k8s-webhook-server/serving-certs - 用openssl生成有效期365天的自签证书:
openssl req -x509 -newkey rsa:4096 -keyout /tmp/k8s-webhook-server/serving-certs/tls.key -out /tmp/k8s-webhook-server/serving-certs/tls.crt -days 365 -nodes -subj "/CN=localhost"
- 先创建证书存放目录:
- 如果你是运行Kubebuilder自带的集成测试,不需要手动生成证书,testenv框架会自动处理证书生成和加载逻辑。
场景2:集群内正式部署
- 确认集群已安装cert-manager:Kubebuilder默认依赖cert-manager自动为webhook签发证书,未安装的话先部署对应版本的cert-manager。
- 检查证书签发状态:执行命令
kubectl get certificates -n <operator部署命名空间>,确认对应证书的STATUS为Ready,如果状态异常可以kubectl describe certificate <证书名称>排查签发失败原因。 - 检查Deployment挂载配置:确认operator的Deployment配置中,已经将cert-manager生成的serving-cert Secret挂载到了
/tmp/k8s-webhook-server/serving-certs路径,挂载路径和Secret名称配置错误也会导致找不到证书文件。
其他排查点
- 如果你修改过webhook的默认证书加载路径,检查main.go中webhook server的CertDir配置是否和实际挂载路径一致。
- 确认operator运行时的用户对证书目录有读取权限。
内容的提问来源于stack exchange,提问作者alok verma
相关产品推荐
相关产品推荐

