cert-manager 使用和安装指南
1. 项目目录结构及介绍
cert-manager 的源代码组织如下:
cmd
: 包含不同命令行工具的入口点,如主控制器。config
: 提供了默认的 Kubernetes 配置,用于部署 cert-manager。docs
: 文档相关的资料,包括用户指南和开发者说明。hack
: 脚本和工具,通常用于开发、构建和测试目的。pkg
: 库和核心功能组件,实现证书管理和颁发逻辑。
目录结构体现了 cert-manager 的模块化设计,使得源代码易于理解和维护。
2. 项目的启动文件介绍
在 cert-manager 中,主要的启动文件是 cmd/cert-manager/main.go
。这个文件初始化并运行 Kubernetes 副控(controller)和 webhook 组件,这些组件构成了 cert-manager 系统的核心。当部署 cert-manager 时,Kubernetes 集群中的 Deployment 或 DaemonSet 将通过 main.go
运行相应的容器镜像。
运行步骤
- 加载配置:从 Kubernetes ConfigMap 加载配置信息。
- 初始化客户端:创建一个 Kubernetes 客户端以与集群交互。
- 启动控制器:根据配置启动证书颁发者控制器和其他相关资源控制器。
- 运行 webhook 服务:设置准入控制器以处理证书生命周期事件。
3. 项目的配置文件介绍
cert-manager 的配置文件通常是指 Kubernetes 中的 YAML 文件,例如 deploy/quickstart/cert-manager.yaml
。该文件包含了部署 cert-manager 所需的 CRDs(CustomResourceDefinitions)、ServiceAccounts、RoleBindings 和 Deployments。
关键配置示例
- CRDs:定义了
Certificate
,Issuer
, 和ClusterIssuer
等自定义资源类型。例如:
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: certificates.cert-manager.io
spec:
group: cert-manager.io
names:
kind: Certificate
...
- ServiceAccount:cert-manager 的工作负载使用的 Kubernetes ServiceAccount,比如
cert-manager-webhook
:
apiVersion: v1
kind: ServiceAccount
metadata:
name: cert-manager-webhook
namespace: cert-manager
- Deployment:定义 cert-manager 控制器的实例,如
cert-manager-controller
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cert-manager
spec:
replicas: 1
selector:
matchLabels:
app: cert-manager
template:
metadata:
labels:
app: cert-manager
spec:
serviceAccountName: cert-manager
containers:
- name: cert-manager
image: quay.io/cert-manager/cert-manager:v1.x.y # 替换为实际版本号
...
- Issuer 或 ClusterIssuer:在 Kubernetes 集群内定义证书颁发者,例如使用 Let’s Encrypt:
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: letsencrypt-staging
spec:
acme:
email: user@example.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: example-com-key
solvers:
- dns01:
cloudflare:
email: user@example.com
apiKeySecretRef:
name: cloudflare-api-key
key: api-key
要部署 cert-manager,只需要将上述配置文件应用到 Kubernetes 集群中。之后,你可以通过定义 Certificate
资源来请求和自动更新证书。详细的配置选项和使用方法可以在 cert-manager.io 查看官方文档。
请注意,实际部署前应替换示例配置中的版本号和密钥等敏感信息。同时,确保你的环境已正确配置以允许访问所需的证书颁发机构(如 Let's Encrypt)。