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

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

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)


目录

一、基本介绍

二、部署方法

三、使用方法

1、创建自签证书颁发者

2、创建自签证书

[3、创建 CA 证书](#3、创建 CA 证书)

[4、创建 CA 证书颁发者](#4、创建 CA 证书颁发者)


一、基本介绍

根据官方介绍,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 扩展来支持额外的验证方法和颁发者类型

Cert-Manager 整体架构

GitHub 地址:Cert-Manager | GitHub

官方文档:Cert-Manager | Documentation


二、部署方法

Cert-Manager 支持多种部署方式,本文以 kubectl apply 方式为例进行部署。

其他部署方式(如 Helm)的具体内容请参考官方文档。

bash 复制代码
# 创建命令
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、创建自签证书颁发者
bash 复制代码
# 创建对象
kubectl apply -f - <<EOF
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: selfsigned-issuer
  namespace: default                 # 指定 Namespace
spec:
  selfSigned: {}

---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: selfsigned-cluster-issuer
spec:
  selfSigned: {}
EOF

🔔 Issuer 类型资源对象仅作用于集群内单个指定的命名空间
🔔 ClusterIssuer 类型资源对象可以作用于集群内所有的命名空间

# 查看对象
kubectl get issuer
kubectl get clusterissuer
2、创建自签证书
bash 复制代码
# 创建对象
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: selfsigned-cert
  namespace: default
spec:
  dnsNames:
  - example.com
  secretName: selfsigned-cert-tls
  issuerRef:
    name: selfsigned-issuer
EOF

🔔 会自动创建 selfsigned-cert 和 selfsigned-secret 对象

# 查看对象
kubectl get cert
kubectl get secret
3、创建 CA 证书
bash 复制代码
# 前提条件:创建自签证书颁发者

# 创建 CA 证书对象
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: ca-clusterissuer-cert
  namespace: default                 # 指定 namespace
spec:
  isCA: true
  commonName: demo_SelfsignedCa
  secretName: ca-clusterissuer-secret
  privateKey:
    algorithm: ECDSA
    size: 256
  issuerRef:
    name: selfsigned-cluster-issuer
    kind: ClusterIssuer
    group: cert-manager.io
EOF

# 查看 CA 证书对象
kubectl get cert
kubectl get secret
4、创建 CA 证书颁发者
bash 复制代码
# 创建对象
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: ca-cluster-issuer
spec:
  ca:
    secretName: ca-clusterissuer-secret
EOF

# 查看对象
kubectl get clusterissuer
相关推荐
向上的车轮4 小时前
云原生的12个要素是什么?
云原生
只因在人海中多看了你一眼10 小时前
B.50.10.10-微服务与电商应用
微服务·云原生·架构
喂完待续11 小时前
【序列晋升】29 Spring Cloud Task 微服务架构下的轻量级任务调度框架
java·spring·spring cloud·云原生·架构·big data·序列晋升
衍余未了12 小时前
centos9 docker启动不起来,docker启动发生堵塞问题!
运维·docker·容器
我真的是大笨蛋12 小时前
K8S-基础架构
笔记·云原生·容器·kubernetes
tianyuanwo14 小时前
Docker Registry 实现原理、适用场景、常用操作及搭建详解
运维·docker·容器·registry
木二_14 小时前
附050.Kubernetes Karmada Helm部署联邦及使用
容器·kubernetes·karmada·kubernetes联邦·集群联邦
wdxylb15 小时前
Kubernetes实战系列(4)
云原生·容器·kubernetes
专注代码七年16 小时前
Docker 本地开发环境搭建(MySQL5.7 + Redis7 + Nginx + 达梦8)- Windows11 版 2.0
nginx·docker·容器
我真的是大笨蛋16 小时前
K8S-Pod(上)
java·云原生·容器·kubernetes