Kubernetes 中自动管理 TLS 证书:cert-manager 指南
项目介绍
cert-manager 是一个 Kubernetes 的扩展,旨在自动化 TLS 证书的创建、续订及管理流程。它将证书和证书颁发者作为资源类型引入到 Kubernetes 集群中,支持从多种来源(包括 Let's Encrypt ACME、HashiCorp Vault、Venafi TPP/TLS Protect Cloud 和本地集群内发行)获取证书。cert-manager 确保证书持续有效并及时更新,以降低服务中断风险。
项目快速启动
安装 cert-manager
首先,确保你的 Kubernetes 集群已准备好。接下来,通过以下命令添加 cert-manager 的官方 Helm 库:
helm repo add jetstack https://charts.jetstack.io
然后,更新你的 Helm 图表仓库,并部署 cert-manager:
helm repo update
kubectl apply --validate=false -f https://raw.githubusercontent.com/cert-manager/cert-manager/release-1.8/deploy/manifests/00-crds.yaml
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace \
--version v1.8.4 # 使用最新的稳定版本或者指定版本
创建第一个证书
假设你想为一个域名自动申请 Let's Encrypt 的证书,可以通过创建一个 Certificate
资源定义来实现:
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: example-com-tls
spec:
secretName: example-com-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
dnsNames:
- example.com
之后,使用 kubectl apply -f <your-certificate-yaml>.yaml
来创建这个证书。
应用案例与最佳实践
自动化 Ingress TLS 配置
对于基于 Ingress 的服务,你可以配置 cert-manager 来自动处理 TLS 证书的申请和关联。示例如下,在 Ingress 规则中引用上面创建的证书:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/tls-acme: "true"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- example.com
secretName: example-com-tls
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: example-service
port:
number: 80
这样,当 Ingress 被创建或更新时,cert-manager 就会尝试为 example.com
获取 TLS 证书,并将其存储在指定的秘密中。
典型生态项目集成
cert-manager 在 Kubernetes 生态系统中的应用非常广泛,特别适合与支持 Kubernetes Ingress 的负载均衡器如 NGINX Ingress Controller 结合使用。通过整合 cert-manager,可以轻松实现在 Kubernetes 集群上运行的服务自动获得和更新安全证书。
当你在使用诸如 GitLab CI/CD、Jenkins 或其他CI/CD工具时,集成 cert-manager 可以自动化证书的生命周期管理,这对于持续交付流程尤其有用。此外,对于云原生应用,它与 Istio、Envoy 等服务网格的结合也非常紧密,帮助这些高级网络层实现加密通信的简便管理。
总之,cert-manager 是 Kubernetes 生态中不可或缺的一环,为现代云原生应用程序的安全通讯提供了强大而灵活的支持。