Knative Kourier 与 cert-manager 集成实现 HTTP01 证书自动签发
本文将详细介绍如何在 Knative 环境中使用 Kourier 作为入口网关,并通过 cert-manager 实现基于 HTTP01 挑战的 TLS 证书自动签发功能。这种配置方式能够为 Knative 服务提供自动化的 HTTPS 支持,无需手动管理证书。
背景知识
在 Knative 生态中,Kourier 是一个轻量级的入口控制器,专为 Knative Serving 设计。它基于 Envoy 构建,提供了高效的流量路由能力。而 cert-manager 是 Kubernetes 生态中广泛使用的证书管理工具,能够自动从 Let's Encrypt 等证书颁发机构获取和更新 TLS 证书。
HTTP01 是 Let's Encrypt 提供的一种验证域名所有权的方式,通过在指定域名下放置特定文件来完成验证。相比 DNS01 挑战,HTTP01 的配置更为简单,不需要域名解析的修改权限。
环境准备
在开始配置前,需要确保以下组件已正确安装并运行:
- Kubernetes 集群(版本 1.20 或更高)
- Knative Serving 1.16.0 或更高版本
- Kourier 入口控制器
- cert-manager 最新稳定版本
特别注意,Knative 1.16.0 版本已将 cert-manager 集成功能合并到主代码库中,不再需要单独安装 net-certmanager 扩展。
配置步骤
1. 创建 ClusterIssuer
首先需要创建一个 ClusterIssuer 资源,这是 cert-manager 用来定义证书颁发机构的配置。以下是一个使用 HTTP01 挑战的示例配置:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-http01-production
namespace: cert-manager
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: certs@example.com
secretKeyRef:
name: letsencrypt-http01-production
solvers:
- http01:
ingress: {}
selector: {}
关键配置说明:
server
: 指定 ACME 服务器地址,生产环境使用 Let's Encrypt 的生产端点email
: 用于证书注册和到期通知的邮箱http01.ingress
: 留空表示使用默认的入口类
2. 配置 Knative cert-manager 集成
通过修改 Knative Serving 的 config-certmanager ConfigMap 来启用 cert-manager 集成:
apiVersion: v1
kind: ConfigMap
metadata:
name: config-certmanager
namespace: knative-serving
data:
issuerRef: |
kind: ClusterIssuer
name: letsencrypt-http01-production
这个配置告诉 Knative 使用我们刚刚创建的 ClusterIssuer 来签发证书。
3. 启用外部域名 TLS 功能
为了允许为自定义域名自动配置 TLS,需要启用 external-domain-tls 功能:
apiVersion: v1
kind: ConfigMap
metadata:
name: config-network
namespace: knative-serving
data:
external-domain-tls: Enabled
验证配置
完成上述配置后,当您创建或更新 Knative 服务并指定自定义域名时,系统将自动:
- 创建 Certificate 资源
- cert-manager 发起 HTTP01 挑战
- Kourier 提供挑战验证所需的临时路由
- 获取并安装 TLS 证书
- 配置 Kourier 使用新证书
可以通过以下命令查看证书签发状态:
kubectl get certificates -n <namespace>
kubectl describe certificate <certificate-name> -n <namespace>
常见问题排查
- 证书签发失败:检查 cert-manager 日志和 Certificate 资源的 Events
- HTTP01 挑战无法完成:确保 Kourier 的入口服务能够从互联网访问
- 证书未自动配置:确认 external-domain-tls 已启用且配置正确
最佳实践
- 对于生产环境,建议使用 Let's Encrypt 的生产端点
- 为不同环境(如开发、测试、生产)创建不同的 Issuer
- 监控证书的到期时间,确保自动续期正常工作
- 考虑设置适当的证书存储策略,避免频繁重新签发
通过以上配置,Knative Kourier 与 cert-manager 的集成能够为您的服务提供全自动化的 HTTPS 支持,大大简化了证书管理的复杂度,同时保证了服务的安全性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考