AKS集群使用Cert-Manager配置自签名证书时证书未就绪问题
配置流程问题诊断
整体配置思路符合cert-manager自签名证书的签发规范(自签名根ClusterIssuer→签发CA证书→基于CA证书创建业务签发ClusterIssuer→签发业务证书),但存在3处配置错误导致业务证书无法签发、Ingress加载默认假证书:
- 集群级ClusterIssuer读取CA Secret的命名空间不匹配:CA类型的ClusterIssuer默认会从
cert-manager命名空间读取指定的CA Secret,你第一步签发的CA证书存储的Secrethello-deployment-tls-ca-key-pair默认生成在default命名空间,因此第二个ClusterIssuerhello-deployment-tls处于不可用状态,无法签发业务证书。 - 业务证书不包含访问用的公网IP:你需要通过公网IP直接访问服务,但当前业务证书仅配置了
dnsNames字段,IP需要通过ipAddresses字段单独声明,就算证书签发成功也会因域名不匹配触发浏览器告警,Ingress也会回退到默认证书。 - API版本适配问题:
cert-manager.io/v1alpha2属于已废弃的旧版本API,如果你使用的是cert-manager v1.0+版本,需要统一更换为cert-manager.io/v1版本API,避免兼容性问题。
解决方案
步骤1:修复CA类型Issuer的Secret读取问题
两种方案二选一即可:
方案A:将CA Secret同步到cert-manager命名空间
kubectl get secret hello-deployment-tls-ca-key-pair -n default -o yaml | sed 's/namespace: default/namespace: cert-manager/' | kubectl apply -f -
方案B:将集群级ClusterIssuer改为命名空间级Issuer,不需要跨命名空间读取Secret,修改clusterissuer2.yml内容如下:
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: hello-deployment-tls namespace: default spec: ca: secretName: hello-deployment-tls-ca-key-pair
修改后业务证书的issuerRef字段也要对应调整kind: Issuer。
步骤2:更新业务证书配置,添加公网IP
修改certificate2.yml,补充公网IP配置、升级API版本:
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: selfsigned-certificate2 namespace: default spec: secretName: hello-deployment-tls-ca-key-pair2 dnsNames: - "*.default.svc.cluster.local" - "*.default.com" # 替换为你的AKS公网IP ipAddresses: - "xx.xx.xx.xx" isCA: false issuerRef: # 如果选方案B此处改为Issuer kind: ClusterIssuer name: hello-deployment-tls
重新应用配置后删除异常的旧Certificate资源触发重签发:
kubectl delete certificate selfsigned-certificate2 kubectl apply -f certificate2.yml
步骤3:验证签发状态
先查看ClusterIssuer/Issuer是否就绪:
# 方案A执行 kubectl describe clusterissuer hello-deployment-tls # 方案B执行 kubectl describe issuer hello-deployment-tls -n default
确认Issuer状态为Ready后,查看业务证书状态,1分钟内应该变为Ready:
kubectl get certificate selfsigned-certificate2
步骤4:验证Ingress证书加载
证书就绪后重启nginx ingress控制器Pod触发证书重载,再次访问公网IP即可看到你签发的自签名证书,不再显示Fake证书:
kubectl rollout restart deployment nginx-ingress-controller -n ingress-nginx
注:自签名证书默认不被浏览器信任,需要手动将第一步生成的CA根证书导入到系统/浏览器的信任根证书存储中,即可消除不安全告警。
内容的提问来源于stack exchange,提问作者X T
相关产品推荐
相关产品推荐

