External Secrets Operator因Webhook证书问题无法创建External Secret
External Secrets Operator Webhook证书验证失败问题
问题描述
External Secrets Operator(ESO)的三个部署在external-secrets命名空间初始运行正常,ClusterSecretStore配置完成后,External Secret可正常创建与同步。但运行一段时间后Webhook部署发生重启,此时创建新External Secret时出现如下错误:
Error from server (InternalError): error when creating "test-preprod.yaml": Internal error occurred: failed calling webhook "validate.externalsecret.external-secrets.io": failed to call webhook: Post "https://external-secrets-operator-webhook.external-secrets.svc:443/validate-external-secrets-io-v1beta1-externalsecret?timeout=5s": x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "external-secrets")
同时Webhook Pod日志报错:
2023/11/17 08:06:25 http: TLS handshake error from xx.xxx.xx.x:xxxxx: remote error: tls: bad certificate
部署未配置certManager,依赖ESO自身的证书创建与管理机制,但该机制出现异常。
复现步骤
- 等待ESO运行一段时间,直到Webhook部署发生重启
- 创建新的External Secret,触发上述错误
解决方案
手动重新生成ESO Webhook证书
- 删除ESO自动创建的证书相关资源:
kubectl delete secret external-secrets-operator-webhook -n external-secrets kubectl delete certificaterequest external-secrets-operator-webhook -n external-secrets kubectl delete validatingwebhookconfiguration validate.externalsecret.external-secrets.io
- 重启ESO控制器部署,触发证书重新生成:
kubectl rollout restart deployment external-secrets-operator -n external-secrets
- 验证证书状态:
kubectl get secret external-secrets-operator-webhook -n external-secrets kubectl get validatingwebhookconfiguration validate.externalsecret.external-secrets.io
确认新证书已生成,且ValidatingWebhookConfiguration的CA bundle已更新。
临时绕过Webhook验证(仅用于紧急排查)
如果需要快速恢复功能,可临时禁用Webhook验证:
kubectl patch validatingwebhookconfiguration validate.externalsecret.external-secrets.io -p '{"webhooks":[{"name":"validate.externalsecret.external-secrets.io","clientConfig":{"caBundle":""},"rules":[],"failurePolicy":"Ignore"}]}'
注意:此方法会关闭External Secret的验证逻辑,仅建议在紧急场景下使用,问题解决后需恢复Webhook配置。
长期优化方案
考虑部署cert-manager来管理ESO的Webhook证书,避免ESO自带证书管理机制的不稳定问题:
- 安装cert-manager
- 重新部署ESO,启用cert-manager集成:
helm upgrade --install external-secrets external-secrets/external-secrets -n external-secrets --set webhook.certManager.enabled=true
内容的提问来源于stack exchange,提问作者Satyam Bhatia
相关产品推荐
相关产品推荐

