AKS集群Ingress Controller出现Fake Certificate问题求助
核心问题定位
你的Ingress配置中指定了secretName: TargetPods-tls,但目前查询的命名空间中不存在该Secret,这是NGINX fallback到伪证书的直接原因。结合cert-manager的部署情况,按以下步骤排查:
1. 确认目标Secret的存在性
首先检查Ingress所在命名空间(默认是default)中是否存在TargetPods-tls:
kubectl get secrets -n default
如果该Secret不存在,说明cert-manager未成功签发证书,或你未手动创建对应证书Secret。
2. 检查cert-manager证书资源状态
cert-manager需要通过Certificate资源触发证书签发,执行以下命令查看是否存在对应资源:
kubectl get certificates -n default
如果Certificate不存在:创建关联ClusterIssuer的Certificate资源,示例YAML如下:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: TargetPods-tls namespace: default spec: secretName: TargetPods-tls issuerRef: name: letsencrypt-cluster-issuer kind: ClusterIssuer dnsNames: - test.domain.io执行
kubectl apply -f 上述文件.yaml创建后,等待证书签发。如果Certificate存在:查看其状态是否为
Ready,若不是,通过事件详情排查错误:kubectl describe certificate TargetPods-tls -n default常见错误包括DNS验证失败、ACME挑战超时、ClusterIssuer配置异常等。
3. 验证ClusterIssuer的有效性
检查你的letsencrypt-cluster-issuer是否正常完成ACME注册:
kubectl describe clusterissuer letsencrypt-cluster-issuer
重点查看Status段的Conditions,确认是否有Ready=True的状态,若存在错误根据提示修复(比如邮箱验证、API访问限制等)。
4. 检查NGINX Ingress Controller日志
查看Ingress Controller的日志,确认是否有证书加载失败的具体报错:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
如果日志中出现secret not found之类的提示,说明Secret未创建或命名空间不匹配。
5. 确认命名空间匹配
Ingress默认部署在default命名空间,TargetPods-tls必须与Ingress处于同一命名空间。若Secret在其他命名空间,需在Ingress的tls块中添加secretNamespace字段(仅适用于支持该字段的Ingress版本),或将Secret移动到default命名空间。
内容的提问来源于stack exchange,提问作者Ribo01

