云原生环境中,管理 Kubernetes Ingress Controller 的 SSL证书是保障服务安全通信的关键。其核心在于如何将证书安全地存储、自动地签发与更新,并灵活地配置到 Ingress 资源中。
一、方案概览:云厂商与原生方案对比
下表对比了主流云厂商方案与 Kubernetes 原生方案的核心逻辑,帮助你快速选择。
方案类型 代表平台/工具 核心逻辑 适用场景
云厂商集成方案 华为云 CCE(ELB 证书) 将证书托管在云平台的负载均衡器(ELB)中,Ingress Controller 直接引用 ELB 证书 ID,无需在集群内维护 Secret。 已深度集成该云平台,希望将证书管理外部化、利用云平台证书服务(如自动续期、合规性)的场景。
Azure AKS(自带证书) 用户自行生成或获取 TLS 证书,创建 Kubernetes Secret,然后在 Ingress 资源中引用该 Secret。 在云平台上运行但需要自带证书(如企业内部 CA 签发)的场景。
Kubernetes 原生方案 Cert‑Manager(Let’s Encrypt) 通过 Kubernetes 自定义资源(Certificate、ClusterIssuer)自动从 Let’s Encrypt 等 ACME CA 签发、续订证书,并将证书存储为 Secret。 需要全自动证书签发与续期、希望减少手动操作的场景(尤其适合公开服务)。
通配符证书(Wildcard TLS) 将通配符证书(如 *.example.com)创建为 Secret,并在 Ingress Controller 启动参数中指定,后续 Ingress 资源只需匹配域名即可使用该证书。 需要为多个子域名提供 HTTPS 且希望简化证书管理的场景。
Rancher 证书管理 在 Rancher 界面中上传证书(私钥与证书内容),证书会被创建为 Secret,可在创建 Ingress 时直接选择使用。 使用 Rancher 管理 Kubernetes 集群,希望通过 UI 集中管理证书的场景。
二、核心概念与工具
在云原生证书管理中,有几个核心概念和工具需要了解:
证书载体:证书最终会被存储为 Kubernetes Secret(类型为 kubernetes.io/tls),供 Ingress 使用。这是所有方案的基础。
自动化工具:Cert-Manager 是最流行的 Kubernetes 原生证书管理工具,它能自动处理证书的整个生命周期,包括申请、签发、续期和轮换。
证书类型:主要有两种选择:单域名证书(适用于特定域名)和通配符证书(保护主域名及其所有子域名)。通配符证书在管理多个子域名时能显著简化配置。
配置模式:根据不同的方案,证书的配置模式也有所不同。常见的模式包括在 Ingress 资源中引用 Secret、在 Controller 启动参数中指定证书,或者直接使用云平台的外部证书。
三、典型配置流程(以 Cert‑Manager 与通配符证书为例)
以下是两种常见方案的配置流程:
使用 Cert‑Manager 自动签发证书
安装 Cert‑Manager:通过 Helm 安装 Cert‑Manager。
创建 ClusterIssuer:配置 ACME 颁发者(如 Let’s Encrypt)。
创建 Certificate 资源:定义证书的域名、存储的 Secret 名称等信息,Cert‑Manager 会自动申请并更新证书。
在 Ingress 中引用:在 Ingress 的 tls.secretName 字段中引用 Cert‑Manager 创建的 Secret。
使用通配符证书
准备证书 Secret:将通配符证书和私钥创建为 Secret,例如 wildcard-tls-secret。
配置 Ingress Controller:在启动参数中指定通配符证书的 Secret。
创建 Ingress 资源:在 Ingress 的 tls.hosts 中列出域名,无需单独指定 secretName,控制器会自动使用通配符证书。
四、最佳实践与安全考虑
证书轮换与更新:确保证书在过期前自动更新。Cert‑Manager 默认会自动续订。
私钥安全:建议开启 Kubernetes Secret 的加密存储,或在云平台使用密钥管理服务(如 Azure Key Vault)。
监控与告警:使用 Prometheus 监控证书过期时间,设置告警。
证书链完整性:确保证书链完整(服务器证书 + 中间证书)。
最小权限原则:为 Cert‑Manager 设置仅限所需权限的 ServiceAccount。
最后总结一下,选择方案时,若已深度集成特定云平台,可直接使用其证书服务以简化运维。若追求自动化、避免厂商锁定,Cert‑Manager 是首选;若需为大量子域名提供 HTTPS,通配符证书 则更为合适。
若用户能分享具体的业务场景(例如是使用公有云还是自建集群,是否需要自动签发SSL证书,以及域名的大致规模),我可以为用户提供更具体的配置方案。