更新后Cert-manager缺失ApiVersions,ClusterIssuer转换Webhook失败求助
排查cert-manager ClusterIssuer转换webhook错误
可能的原因及解决步骤
1. API版本与cert-manager版本不兼容
你的ClusterIssuer使用了cert-manager.io/v1alpha2旧版API,而K8s 1.22+搭配的cert-manager通常已不再默认支持这类旧API版本,会触发转换webhook失败。
- 修改ClusterIssuer配置的
apiVersion为cert-manager.io/v1(v1版本与v1alpha2大部分字段兼容,只需调整API版本):apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-dev-certificate namespace: cert-manager spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: my.email@org.co privateKeySecretRef: name: letsencrypt-dev-certificate solvers: - http01: ingress: class: nginx - 应用修改后的配置:
kubectl apply -f clusterissuer.yml - 确认cert-manager版本与K8s兼容:K8s 1.22对应cert-manager至少v1.8+,可执行
kubectl get pods -n cert-manager查看pod镜像标签确认版本。
2. cert-manager webhook组件未正常运行
转换webhook依赖cert-manager-webhook服务,若pod异常会导致请求失败:
- 检查webhook pod状态:
kubectl get pods -n cert-manager,确保cert-manager-webhook类pod处于Running状态。 - 若pod异常,查看日志排查问题:
kubectl logs -n cert-manager <cert-manager-webhook-pod-name>,常见问题包括证书加载失败、端口占用等。
3. Webhook证书配置异常
cert-manager webhook依赖自签证书完成与API server的通信,证书过期或配置错误会导致通信失败:
- 删除webhook相关证书secret并重启pod:
kubectl delete secret cert-manager-webhook-ca -n cert-manager kubectl delete pod -n cert-manager -l app=webhook - cert-manager会自动重新生成证书并启动webhook。
4. 网络通信受阻(GKE环境特有)
GKE集群可能存在网络策略或防火墙规则阻止API server与webhook的通信:
- 检查cert-manager命名空间的网络策略:
kubectl get networkpolicies -n cert-manager,确保允许kube-system命名空间的流量访问webhook服务(443端口)。 - 若没有合适的网络策略,可临时添加允许所有入站流量到webhook的规则进行测试:
应用后再执行apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-webhook-access namespace: cert-manager spec: podSelector: matchLabels: app: webhook ingress: - ports: - port: 443kubectl get clusterissuers验证。
内容的提问来源于stack exchange,提问作者Satyam Bhatia
相关产品推荐
相关产品推荐

