Ingress配置SSL证书全指南安全加密你的Kubernetes服务入口
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
安全不是选项,而是标配。
在云原生架构蓬勃发展的今天,Kubernetes 已成为容器化应用部署与管理的事实标准平台,而在其庞大的生态系统中,Ingress 资源作为七层(HTTP/HTTPS)流量的核心入口控制器,承担着将外部用户请求智能路由至集群内部服务的关键职责。
在实际生产环境中,仅依赖 HTTP 明文传输早已无法满足现代 Web 应用的安全需求,无论是防止敏感数据泄露、提升用户信任度、优化搜索引擎排名(SEO),还是符合金融、医疗等行业的合规审计要求,为 Ingress 配置有效的 SSL/TLS 证书以启用 HTTPS 加密通信,已成为不可或缺的基础建设环节。
本文将系统化讲解如何在 Kubernetes 中为 Ingress 配置 SSL 证书,涵盖:
- 证书获取方式对比
- 使用 cert-manager 实现自动化签发与续期
- 手动导入已有证书
- Ingress 配置实战
- 自动续期机制详解
- 常见问题排查与最佳实践
助你轻松构建高可用、高安全性的对外服务门户。
为什么必须为 Ingress 配置 SSL 证书?
SSL(Secure Sockets Layer,现普遍指代其继任协议 TLS)证书并非“锦上添花”的功能,而是现代 Web 服务的安全基石,以下是五大核心理由:
-
数据加密保护
启用 TLS 后,客户端与服务端之间的所有通信均被加密,有效抵御中间人攻击(MITM),防止数据被窃听或篡改。 -
身份真实性验证
由权威 CA(Certificate Authority)签发的证书可证明网站身份合法,避免钓鱼网站仿冒,增强用户信任。 -
浏览器强制信任机制
Chrome、Firefox 等主流浏览器对未启用 HTTPS 的站点标记为“不安全”,直接影响用户体验和转化率。 -
SEO 搜索引擎友好性
Google 等搜索引擎明确优先收录并推荐 HTTPS 站点,有助于提升自然搜索排名。 -
行业合规性要求
如 PCI-DSS(支付卡行业)、HIPAA(医疗健康)、GDPR(欧盟通用数据保护条例)等法规均强制要求数据传输加密。
✅ :任何通过 Kubernetes Ingress 对外暴露的服务,都应配置有效且受信的 SSL/TLS 证书。
准备工作:如何选择与获取 SSL 证书?
目前主流的证书来源可分为三类:
| 类型 | 特点 | 适用场景 |
|---|---|---|
| 商业 CA 购买 | 高信任度、企业级支持、EV 证书显示绿色公司名 | 金融、政务、大型电商 |
| Let’s Encrypt | 免费、自动化、支持 ACME 协议、90天有效期 | 绝大多数中小企业项目 |
| 自签名证书 | 无需费用、快速生成、但浏览器提示“不安全” | 开发测试环境 |
🔥 强烈推荐方案:Let’s Encrypt + cert-manager —— 实现全自动证书申请、部署与续期,零成本、零运维负担。
实战步骤:使用 cert-manager 自动化配置 SSL 证书
▶ 步骤 1:安装 cert-manager(推荐)
cert-manager 是一个专为 Kubernetes 设计的证书生命周期管理控制器,支持 Let’s Encrypt、Vault、Venafi 等多种签发源。
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml
等待 Pod 启动完成:
kubectl get pods -n cert-manager --watch
💡 提示:首次安装建议使用
--validate=false参数跳过 CRD 校验(某些旧版 k8s 可能报错)。
▶ 步骤 2:创建 ClusterIssuer(全局签发器)
定义一个用于签发 Let’s Encrypt 生产环境证书的签发器:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: your-email@example.com # 接收证书过期提醒
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod-account-key
solvers:
- http01:
ingress:
class: nginx # 指定 Ingress Controller 类型
保存为 cluster-issuer.yaml 并应用:
kubectl apply -f cluster-issuer.yaml
📌 注意:若使用 Traefik、ALB 等其他 Ingress Controller,请修改
class字段对应值。
▶ 步骤 3:申请证书(自动签发 & 存储为 Secret)
创建 Certificate 资源,cert-manager 将自动完成域名验证、证书签发并存储为 Kubernetes Secret:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: myapp-cert
namespace: default
spec:
secretName: myapp-tls-secret
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- myapp.example.com
- www.myapp.example.com
duration: 2160h0m0s # 90天(默认)
renewBefore: 360h0m0s # 到期前15天自动续期(默认30天)
应用后,观察状态:
kubectl describe certificate myapp-cert kubectl get secret myapp-tls-secret
✅ 成功标志:
Ready=True且 Secret 已生成包含tls.crt和tls.key。
▶ 步骤 4:在 Ingress 中引用 TLS Secret
编辑你的 Ingress 资源,在 spec.tls 字段中指定证书 Secret:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "true" # 强制跳转 HTTPS
nginx.ingress.kubernetes.io/hsts: "true" # 启用 HSTS
nginx.ingress.kubernetes.io/hsts-max-age: "31536000" # 一年缓存
spec:
tls:
- hosts:
- myapp.example.com
- www.myapp.example.com
secretName: myapp-tls-secret
rules:
- host: myapp.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: myapp-service
port:
number: 80
应用配置后,Nginx Ingress Controller 会自动加载证书并监听 443 端口。
🌐 访问
https://myapp.example.com,确认地址栏出现锁形图标即表示成功!
手动配置 SSL 证书(适用于已有证书文件)
如果你已从其他渠道获得 .crt 和 .key 文件(如购买商业证书),可通过如下命令手动创建 Secret:
kubectl create secret tls myapp-tls-secret \ --cert=fullchain.crt \ --key=privkey.key \ -n default
然后在 Ingress 中引用该 Secret,方式与上述完全一致。
⚠️ 注意:确保证书链完整(含中间 CA),否则可能导致部分浏览器不信任。
验证与调试技巧
使用 curl 测试 HTTPS 连接
curl -vI https://myapp.example.com
关注响应头中的 HTTP/2 200 和证书信息。
浏览器访问检查
打开 Chrome 或 Firefox,查看是否有安全锁标志,点击可查看证书详情。
查看 Ingress Controller 日志
kubectl logs -n ingress-nginx deploy/ingress-nginx-controller --tail=50
排查 TLS 握手失败、证书加载异常等问题。
监控证书有效期
kubectl describe certificate myapp-cert
重点关注 Renewal Time 和 Status Conditions。
自动续期机制详解
Let


