首页/云/Kubernetes 速查/Ingress TLS 证书配置
网络与服务55 条

Ingress TLS 证书配置

在 Ingress 上配置 TLS:引用同命名空间中的 kubernetes.io/tls 类型 Secret,控制器据此终结 HTTPS 并按 rules.host 提供服务。

Kubernetes 速查云更新于 2026-10-13

配置定位

Ingress 的 TLS 通过 spec.tls 引用一个同命名空间的 kubernetes.io/tls 类型 Secret,控制器据此监听 443 并用该证书终结 HTTPS,再按 rules 里的 host 把请求转发给后端 Service。适用平台是 Kubernetes,具体证书加载行为由 Ingress 控制器实现(如 ingress-nginx 会监听 Secret 变化并重载)。证书、host、Secret 三者必须对得上,任一错位都会导致浏览器告警或直接 404。

基本信息

适用平台Kubernetes,Ingress 控制器(ingress-nginx 等)
Secret 类型kubernetes.io/tls,键固定为 tls.crt 与 tls.key
命名空间约束Secret 必须与 Ingress 在同一命名空间
生效方式控制器监听 Secret 变更后重载配置,通常秒级到分钟级

典型使用场景

  • 给业务域名开 HTTPS:为每个域名准备证书并绑定到 Ingress
  • 证书续期切换:新证书写入同名 Secret,控制器自动重载,无需改 Ingress
  • 多域名共用一个证书:tls.hosts 列出全部域名,证书 SAN 需全部覆盖
  • 排查证书与域名不匹配:用 curl -vk 看实际下发的证书主题与有效期
  • 配合强制跳转:开启控制器注解把 HTTP 请求重定向到 HTTPS

TLS 配置

TLS 配置
spec:
  tls:
    - hosts: ["app.example.com"]
      secretName: app-tls
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80

创建与验证

创建与验证
kubectl create secret tls app-tls --cert=tls.crt --key=tls.key -n prod   # 创建证书 Secret
kubectl get secret app-tls -n prod -o jsonpath='{.type}'                # 确认类型
kubectl describe ingress web-ing -n prod | grep -i -A2 tls              # 确认引用生效
kubectl get secret app-tls -n prod -o jsonpath='{.data.tls\.crt}' | base64 -d | openssl x509 -noout -subject -dates   # 看证书主题与有效期
curl -vk https://app.example.com/ 2>&1 | grep -E 'subject|issuer|expire'   # 看实际下发的证书

常见问题对照

现象原因处理
浏览器提示证书不受信任证书链不完整或用了自签补中间证书或换受信 CA 签发
证书域名不匹配证书 SAN 不覆盖 rules.host重新签发或调整 hosts 列表
HTTP 不自动跳 HTTPS默认只监听,不做重定向加 force-ssl-redirect 等注解
访问返回 404host 或 path 与请求不匹配核对 rules 与 IngressClass
Secret 找不到命名空间或被删在同命名空间重建同名 Secret
Secret 必须与 Ingress 同命名空间;证书域名要覆盖 tls.hosts 与 rules.host 列表,否则客户端校验失败。
证书更新一般只需覆盖同名 Secret 的内容,控制器会重新加载;如果验证发现仍在用旧证书,先确认控制器是否真的监听到了变更。

易错点

  • 只配 tls 不会自动跳转 HTTPS,需要用控制器注解(如 force-ssl-redirect)或应用层处理,否则 http 访问仍是明文
  • 证书更新要同步更新 Secret,控制器通常自动重载,验证时可 curl -vk 查看实际证书,避免以为换了但客户端仍拿到旧证书
  • 证书链只放叶子证书而漏掉中间证书,部分客户端(尤其是 Android 与旧版 Java)会校验失败
  • 把 Secret 建在别的命名空间:Ingress 只引用同命名空间对象,跨命名空间引用会导致 TLS 静默失效

数据来源与参考

  • Kubernetes 官方文档 · Ingress(TLS)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌