【K8s】Kubernetes 证书管理工具 Cert-Manager

文摘   科技   2024-10-22 18:14   北京  

下内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~





基本介绍

根据官方介绍,Cert-Manager 是一个开源的云原生证书管理(Cloud Native Certificate Management)工具,适用于 Kubernetes 和 OpenShift 的 X.509 证书管理
Cert-Manager 通过 Kubernetes 的自定义资源定义(CRD)机制,将 TLS 证书视为一种资源,可以使用 Kubernetes API 进行管理。
Cert-Manager 的架构包括:
  • 控制层:负责管理证书,包括证书的创建、更新、删除等
  • 数据层:负责存储证书的相关数据,包括证书私钥、证书请求、证书颁发机构等
Cert-Manager 的核心功能包括:
  • 自动管理证书:Cert-Manager 可以自动化地管理 TLS 证书,无需人工干预,自动签发证书以及在证书过期前续期,避免了证书管理的复杂性和错误
  • 支持多供应商:Cert-Manager 支持从多个证书颁发机构申请证书,包括但不限于 Let's Encrypt、HashiCorp Vault、Venafi 等
  • 支持多种验证方法:Cert-Manager 支持多种域验证方式,包括 HTTP-01、DNS-01、TLS-SNI 等,以满足不同的环境和要求
  • 支持 Webhook:Cert-Manager 允许通过 Webhook 扩展来支持额外的验证方法和颁发者类型

GitHub 地址:https://github.com/cert-manager/cert-manager官方文档:https://cert-manager.io/docs/




部署方法

Cert-Manager 支持多种部署方式,本文以 kubectl apply 方式为例进行部署。
其他部署方式(如 Helm)的具体内容请参考官方文档。
# 创建命令kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.16.1/cert-manager.yaml 🔔 Kubernetes 版本 >= v1.19.0🔔 默认情况下,会自动创建 cert-manager 命名空间并安装到该命名空间中🔔 部署后会创建很多 CRD 资源🔔 部署后会创建 cert-manager、cert-manager-cainjector、cert-manager-webhook 三个组件




使用方法

1、创建自签证书颁发者
# 创建对象kubectl apply -f - <<EOF---apiVersion: cert-manager.io/v1kind: Issuermetadata:  name: selfsigned-issuer  namespace: default                 # 指定 Namespacespec:  selfSigned: {}---apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata:  name: selfsigned-cluster-issuerspec:  selfSigned: {}EOF 🔔 Issuer 类型资源对象仅作用于集群内单个指定的命名空间🔔 ClusterIssuer 类型资源对象可以作用于集群内所有的命名空间 # 查看对象kubectl get issuerkubectl get clusterissuer

2、创建自签证书
# 创建对象kubectl apply -f - <<EOFapiVersion: cert-manager.io/v1kind: Certificatemetadata:  name: selfsigned-cert  namespace: defaultspec:  dnsNames:  - example.com  secretName: selfsigned-cert-tls  issuerRef:    name: selfsigned-issuerEOF 🔔 会自动创建 selfsigned-cert 和 selfsigned-secret 对象 # 查看对象kubectl get certkubectl get secret


3、创建 CA 证书

# 前提条件:创建自签证书颁发者 # 创建 CA 证书对象kubectl apply -f - <<EOFapiVersion: cert-manager.io/v1kind: Certificatemetadata:  name: ca-clusterissuer-cert  namespace: default                 # 指定 namespacespec:  isCA: true  commonName: demo_SelfsignedCa  secretName: ca-clusterissuer-secret  privateKey:    algorithm: ECDSA    size: 256  issuerRef:    name: selfsigned-cluster-issuer    kind: ClusterIssuer    group: cert-manager.ioEOF # 查看 CA 证书对象kubectl get certkubectl get secret


4、创建 CA 证书颁发者

# 创建对象kubectl apply -f - <<EOFapiVersion: cert-manager.io/v1kind: ClusterIssuermetadata:  name: ca-cluster-issuerspec:  ca:    secretName: ca-clusterissuer-secretEOF # 查看对象kubectl get clusterissuer




书籍推荐

最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。


实施运维知识交流
专注于运维、实施交付领域,持续分享个人笔记、学习心得,欢迎关注,共同交流、成长!
 最新文章