K8s v1.22中cert-manager-webhook无可用端点问题求助
cert-manager启动检查Job报错:webhook服务无可用端点(K8s v1.22)
问题场景
- 运行环境:Kubernetes v1.22
- 使用组件:最新版cert-manager(相同Chart在K8s v1.21可正常运行)
- 触发位置:由
job.batch/cert-manager-startupapicheck启动的Pod(如cert-manager-startupapicheck-l4ccx) - 核心报错:
Not ready: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": no endpoints available for service "cert-manager-webhook" Not ready: Internal error occurred: failed calling webhook "webhook.cert-manager.io": failed to call webhook: Post "https://cert-manager-webhook.cert-manager.svc:443/mutate?timeout=10s": no endpoints available for service "cert-manager-webhook"
排查步骤
- 检查webhook Pod状态:
确认Pod是否处于kubectl get pods -n cert-manager | grep webhookRunning状态,有无CrashLoopBackOff或重启记录。 - 验证服务与端点关联:
- 查看服务的标签选择器:
kubectl describe svc cert-manager-webhook -n cert-manager | grep Selector - 检查对应端点是否存在:
若端点列表为空,说明服务选择器与Pod标签不匹配,或Pod未通过就绪探针。kubectl get endpoints cert-manager-webhook -n cert-manager
- 查看服务的标签选择器:
- 检查K8s 1.22 API适配情况:
确认cert-manager使用的Webhook配置API版本为admissionregistration.k8s.io/v1(K8s 1.22已废弃v1beta1版本),可通过以下命令检查:kubectl get mutatingwebhookconfigurations webhook.cert-manager.io -o yaml | grep apiVersion - 查看webhook Pod就绪探针与日志:
- 检查就绪探针状态:
kubectl describe pod <webhook-pod-name> -n cert-manager | grep -A5 -B5 Readiness - 查看Pod启动日志:
重点排查证书挂载、服务启动失败等异常信息。kubectl logs <webhook-pod-name> -n cert-manager
- 检查就绪探针状态:
- 检查网络策略限制:
若集群启用了网络策略,确认是否允许cert-manager命名空间内的Pod互相通信,可临时删除或禁用相关网络策略测试。
修复方案
- 标签不匹配修复:确保
cert-manager-webhook服务的selector与webhook Pod的metadata.labels完全一致,例如服务选择器为app=cert-manager,component=webhook时,Pod需添加对应标签。 - API版本适配:更新cert-manager Chart的
values.yaml,设置webhook.apiVersion: admissionregistration.k8s.io/v1,重新部署。 - 就绪探针问题修复:根据日志排查具体故障(如CA证书生成失败需检查cert-manager的CA issuer配置),确保webhook服务正常启动并通过就绪探针。
- 网络策略调整:添加允许
cert-manager命名空间内Pod访问webhook服务的网络策略,示例:apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-cert-manager-internal namespace: cert-manager spec: podSelector: {} ingress: - from: - podSelector: {} ports: - port: 443 protocol: TCP - 临时绕过启动检查:紧急情况下可设置
startupapicheck.enabled=false跳过检查,但仅作为临时方案,需尽快修复核心问题。
内容的提问来源于stack exchange,提问作者S1c0r4x
相关产品推荐
相关产品推荐

