如何为Helm安装的ingress-nginx配置通配符TLS证书解决Fake证书问题
问题原因及解决方案
核心问题原因
返回默认Fake证书的问题,最常见的是Helm配置参数使用错误,以下是所有可能的原因及对应修复方案:
1. 全局默认证书配置参数错误
controller.wildcardTLS.cert 不是配置Ingress无secretName时 fallback 的全局默认证书参数,该参数仅用于多通配符证书的特定匹配场景。正确的全局默认证书参数为 controller.extraArgs.default-ssl-certificate。
2. Secret资源异常
- Secret未创建在
ingress-nginx命名空间下,或密钥、证书内容不匹配、格式错误 - 通配符证书的SAN字段未覆盖
*.example.com,无法匹配myservice.example.com域名
3. Ingress版本兼容问题
你使用的networking.k8s.io/v1beta1版本Ingress在K8s 1.19+版本已正式废弃,高版本ingress-nginx对该旧版本API的适配存在兼容问题,可能导致TLS配置不生效。
4. Ingress Controller配置未加载
控制器Pod加载证书时出现报错,比如无Secret读取权限、证书格式解析失败等,可通过Pod日志排查具体错误。
修复步骤
步骤1:修正Ingress-Nginx的Helm配置
执行升级命令替换错误的参数:
helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx \ --set controller.extraArgs.default-ssl-certificate=ingress-nginx/example-com-certificate \ --set controller.service.loadBalancerIP=10.0.0.1
步骤2:验证Secret有效性
执行以下命令确认证书配置正确:
# 确认Secret存在 kubectl get secret -n ingress-nginx example-com-certificate # 验证证书域名覆盖范围 kubectl get secret -n ingress-nginx example-com-certificate -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -noout -text | grep DNS:
确认输出包含*.example.com或myservice.example.com。
步骤3:更新Ingress为v1版本(K8s 1.19+适用)
替换Ingress配置为官方支持的稳定版本:
kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: myservice-ingress namespace: myservice annotations: kubernetes.io/ingress.class: "nginx" kubernetes.io/ingress.allow-http: "false" nginx.ingress.kubernetes.io/backend-protocol: "http" nginx.ingress.kubernetes.io/default-backend: myservice spec: tls: - hosts: - myservice.example.com # secretName省略,使用全局默认证书 rules: - host: myservice.example.com http: paths: - path: / pathType: Prefix backend: service: name: myservice port: number: 80
步骤4:验证控制器配置
查看Ingress Controller的启动参数,确认已添加默认证书配置:
kubectl get deployment -n ingress-nginx ingress-nginx-controller -o yaml | grep default-ssl-certificate
同时查看Pod日志排查是否有证书加载错误:
kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
内容的提问来源于stack exchange,提问作者Michael Chudinov
相关产品推荐
相关产品推荐

