升级至AKS Kubernetes 1.24.6后cert-manager无法签发证书
问题诊断与解决方案
一、ServerSideApply 配置验证与启用
Kubernetes 1.24+ 版本中,cert-manager 依赖 ServerSideApply 特性完成资源管理,这是你遇到问题的潜在根源之一。
检查当前 cert-manager 配置
执行以下命令查看 cert-manager 是否已启用 ServerSideApply:
kubectl get deployment cert-manager -n cert-manager -o yaml | grep -A5 -B5 "server-side-apply"
若输出中无相关配置项,需通过 Helm 重新部署以启用该特性。
通过 Helm 启用 ServerSideApply
升级或重新安装 cert-manager 时添加对应参数:
helm upgrade --install cert-manager cert-manager/cert-manager \ --namespace cert-manager \ --create-namespace \ --version v1.11.0 \ --set global.enableServerSideApply=true \ --set installCRDs=true
二、DNS 解析失败问题排查
针对初期无法通过 kube-dns 解析域名的错误,按以下步骤排查:
- 检查 cert-manager 挑战 Pod 状态:
kubectl get pods -n cert-manager -l app=cert-manager - 在集群内部测试域名解析:
kubectl run -it --rm dns-test --image=busybox:1.28 -- nslookup my.hostname.de - 确认 ingressClass 配置一致性:检查 cert-manager 引用的 ingressClass 与 ingress-nginx 实际部署的 ingressClass 名称一致:
kubectl get ingressclasses
三、外部 IP 连接超时问题排查
针对后期连接 ingress-nginx 外部 IP 超时的错误,重点排查 Azure 网络配置:
- 验证 Azure 负载均衡器规则:确保 80/443 端口已对外开放,后端池正确关联 ingress-nginx 的节点或 Pod。
- 检查 Azure 网络安全组(NSG):确认允许互联网到集群的 80/443 端口流量,同时允许集群内部到 ingress-nginx Pod 的流量。
- 外部访问测试:从集群外执行 curl 命令验证挑战路径可访问:
若访问失败,说明外部流量无法抵达 ingress-controller,需调整 Azure 网络策略。curl http://20.79.77.156/.well-known/acme-challenge/test
四、版本兼容性与日志排查
- 二次确认版本兼容性:cert-manager 1.11.0 与 Kubernetes 1.24.6/1.25.4 兼容,ingress-nginx 4.4.2(controller-v1.5.1)也支持对应 K8s 版本,若仍有问题可查看官方版本矩阵确认。
- 查看 cert-manager 详细日志定位问题:
kubectl logs -n cert-manager deployment/cert-manager -f
内容的提问来源于stack exchange,提问作者TH1007
相关产品推荐
相关产品推荐

