下内容均来自个人笔记并重新梳理,如有错误欢迎指正!
如果对您有帮助,烦请点赞、关注、转发!如果您有其他想要了解的,欢迎私信联系我~
基本介绍
控制层:负责管理证书,包括证书的创建、更新、删除等 数据层:负责存储证书的相关数据,包括证书私钥、证书请求、证书颁发机构等
自动管理证书: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/
部署方法
# 创建命令
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 三个组件
使用方法
# 创建对象
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
# 创建对象
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 证书
# 前提条件:创建自签证书颁发者
# 创建 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 证书颁发者
# 创建对象
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
书籍推荐
最后推荐一本笔者从 Docker 进阶到 Kubernetes 自学过程中,受益较深的书籍。笔者经常复读,并结合工作实践不断加深理解和体会,可谓常读常新。希望这本书可以帮助到更多对 Kubernetes 感兴趣或刚开始学习的读者。