AppGateway/AKS/AGIC集成Let's Encrypt报Secret Not Found问题
问题根因
Ingress资源的TLS配置格式存在错误,导致cert-manager无法正常生成对应证书,AGIC也找不到关联的Secret资源,因此只会生成80端口的HTTP监听器,不会生成HTTPS监听器。
原配置中错误地将同一个TLS配置的hosts和secretName拆分为了两个独立的TLS条目,触发了cert-manager的BadConfig报错:
- 第一个TLS条目仅配置了hosts,没有指定secretName,cert-manager不知道要把生成的证书存在哪个Secret里
- 第二个TLS条目仅配置了secretName,没有关联对应的域名,cert-manager不知道要给这个Secret颁发哪个域名的证书
修复方案
修改Ingress资源的spec.tls配置,将hosts和secretName放在同一个TLS条目下:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: aspnetapp-dev annotations: kubernetes.io/ingress.class: azure/application-gateway cert-manager.io/cluster-issuer: letsencrypt-staging cert-manager.io/acme-challenge-type: http01 spec: tls: - hosts: - "dev.rhod3rz.com" secretName: dev # 注意缩进,和hosts平级,放在同一个tls条目下 rules: - host: "dev.rhod3rz.com" http: paths: - path: / pathType: Prefix backend: service: name: aspnetapp-dev port: number: 80
验证操作
- 重新apply修改后的Ingress配置
- 执行
kubectl get certificates -n default查看证书状态,等待状态变为Ready - 证书颁发完成后,AGIC会自动创建443端口的HTTPS监听器并关联对应证书,报错会自动消失
内容的提问来源于stack exchange,提问作者rhod3rz
相关产品推荐
相关产品推荐

