cert-manager
cert-manager 是 Kubernetes 上的证书管理工具,它通过在 Kubernetes 集群中添加了 Certificates 和 Issuers 两种CRD,通过Operator简化了获取、更新和使用这些证书的过程。
- 它支持包括Let's Encrypt、HashiCorp Vault 和 Venafi 以及私有 PKI等不同的来源颁发证书
- 它通过证书轮转的方式尝试确保证书有效且不过期
Issuers
cert-manager 在 Kubernetes 集群中引入了 Issuer 和 ClusterIssuers 作为资源类型,它们代表证书颁发机构(CA)。通过执行证书签名请求,这些资源能够生成签名证书。Issuers 只能在当前 namespace 中使用,如果需要在多个 namespace 中使用Issuer,可以考虑创建cluster级别的ClusterIssuer资源。cert-manager支持多个证书颁发机构,具体列表可参考https://cert-manager.io/docs/configuration。
Issuer CR
apiVersion: cert-manager.io/v1 kind: Issuer metadata: ... spec: ... |
ClusterIssuer CR
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: ... spec: ... |
支持的证书颁发者类型:
- SelfSigned
- CA
- Vault
- Venafi
- External
- ACME,包括HTTP01、DNS01
Certificate
Certificate 是一个定义了所需的x509证书的资源,在 cert-manager 中它可以被更新并保持最新状态。这个证书是一个 namespace 资源,它引用了Issuer 或 ClusterIssuer,这些资源确定了将接受证书请求的内容。
CertificateRequest 是 cert-manager中的另一个namespace资源,用于从颁发机请求x509证书。这个资源包含了PEM编码的证书请求的base64编码的字符串,然后将这个字符串发送给引用的 Issuer。一旦成功颁发,将会返回已签名的证书,这是根据证书签名请求生成的。
通常情况下,CertificateRequest由控制器或其他系统使用和管理,除非特别需要,否则我们不应该自己使用它。
apiVersion: cert-manager.io/v1alpha2 kind: Certificate metadata: name: webhook-cert namespace: {{ .Release.Namespace }} spec: dnsNames: - webhook.{{ .Release.Namespace }}.svc - webhook.{{ .Release.Namespace }}.svc.cluster.local issuerRef: kind: Issuer name: selfsigned-issuer secretName: webhook-server-cert |
CA Injector
CA Injector 是 cert-manager的一个 controller,它可以将 caBundle 字段写入到以下三个 K8S 资源中,以允许 Kubernetes API Server“信任” Webhook。
- ValidatingWebhookConfiguration
- MutatingWebhookConfiguration
- CustomResourceDefinition
用法:
在 webhook 的 yaml 中添加 annotation: cert-manager.io/inject-ca-from
apiVersion: admissionregistration.k8s.io/v1beta1 kind: ValidatingWebhookConfiguration metadata: ... annotations: cert-manager.io/inject-ca-from: [namespace name]/[certificate name] webhooks: ... |
例子
apiVersion: cert-manager.io/v1 --- --- |