0
点赞
收藏
分享

微信扫一扫

一款云原生证书管理工具介绍和使用!谈谈我是如何高效管理证书的




一、Cert-Manager简介

  • 官方文档:​​https://cert-manager.io/docs/installation/​​
  • 项目地址:https://github.com/jetstack/cert-manager


1.1 什么是cert-manager?

​ cert-manager是证书管理工具。

​ cert-manager 将证书和证书颁发者作为资源类型添加到 Kubernetes 集群中,并简化了获取、更新和使用这些证书的过程。


1.2 相关资源对象

  • ClusterIssuer:集群级别的资源对象,作为颁发机构(CA颁发者)进行签发证书,可以签发任意命名空间的证书;
  • Issuer:命名空间的资源对象,通过证书签名请求来生成证书的颁发机构(CA),只能签发自己所在命名空间下的证书;
  • Certificate:用于告诉 cert-manager 我们想要什么域名的证书以及签发证书所需要的一些配置,包括对 Issuer/ClusterIssuer 的引用。

​Certificate​​资源指定用于生成证书签名请求的字段,然后由您引用的颁发者类型完成。

​Certificates​​​通过指定​​certificate.spec.issuerRef​​字段来指定他们想要从哪个颁发者获取证书。

一个​​Certificate​​​资源,用于​​example.com​​​和​​www.example.com​​​DNS 名称,​​spiffe://cluster.local/ns/sandbox/sa/example​​​URI 主题备用名称,有效期为 90 天,并在到期前 15 天续订如下。它包含​​Certificate​​资源可能具有的所有选项的详尽列表,但只有一部分字段需要标记。


二、cert-manager部署(v1.7.2)

2.1 下载资源清单文件

$ wget https://github.com/cert-manager/cert-manager/releases/download/v1.7.2/cert-manager.yaml
$ grep image: cert-manager.yaml
image: "quay.io/jetstack/cert-manager-cainjector:v1.7.2"
image: "quay.io/jetstack/cert-manager-controller:v1.7.2"
image: "quay.io/jetstack/cert-manager-webhook:v1.7.2"

您不需要对 cert-manager 安装参数进行任何调整。


2.2 创建资源对象

$ kubectl apply -f cert-manager.yaml
$ kubectl -n cert-manager get pods #相关资源会放到cert-manager命名空间下
NAME READY STATUS RESTARTS AGE
cert-manager-86b4798576-zkx6s 1/1 ContainerCreating 0 4m40s
cert-manager-webhook-6b4f99d45d-xmtbv 1/1 ContainerCreating 0 4m40s
$ kubectl -n cert-manager get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cert-manager ClusterIP 10.102.69.246 <none> 9402/TCP 25m
cert-manager-webhook ClusterIP 10.98.189.19 <none> 443/TCP 25m


2.3 验证安装

  • **在主机安装​​cmctl​​客户端工具**(二进制)

​cmctl​​是一个 CLI 工具,可以帮助您管理集群内的 cert-manager 资源。

虽然也可作为​​kubectl 插件​​。

$ wget https://github.com/cert-manager/cert-manager/releases/download/v1.7.2/cmctl-linux-amd64.tar.gz
$ tar zxvf cmctl-linux-amd64.tar.gz
$ mv cmctl /usr/local/bin/


  • 证书创建检查

​ cmctl 对 Kubernetes 集群执行试运行证书创建检查。如果成功,将​​The cert-manager API is ready​​显示该消息。

$ cmctl  check  api
The cert-manager API is ready


三、cert-manager使用

​ 安装 cert-manager 成功后,您需要配置的第一件事是创建颁发者,然后您可以使用它来颁发证书。cert-manager 附带了许多内置的证书颁发者,这些证书颁发者通过在​​cert-manager.io​​组中来表示。除了内置类型之外,您还可以安装外部发行者。内置和外部发行者的处理方式相同,并且配置相似。

​ 通过​​ClusterIssuer​​资源对象创建证书签发机构(颁发者),ClusterIssuer是集群级别的资源对象。


3.1 创建证书签发机构

​ 基于ClusterIssuer或者Issuer资源对象创建证书颁发者。

$ vim cluster-issuer-lidabai.yaml
---
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: lidabai #签发机构的名称,后面创建证书会引用
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory #aacme 协议的服务端,我们这里用 Let’s Encrypt,这个地址就写死成这样就行
email: 524719755@qq.com #电子邮件,证书快过期的时候会有邮件提醒,不过 cert-manager 会利用 acme 协议自动给我们重新颁发证书来续期。
privateKeySecretRef: #此签发机构的私钥将要存储到哪个 Secret 对象中,名称不重要
name: clusterissuer-secret
solvers: # 添加单个挑战求解器,HTTP01 使用 nginx
- http01:
ingress: #使用哪种入口控制器
class: nginx
$ kubectl apply -f cluster-issuer-lidabai.yaml
clusterissuer.cert-manager.io/letsencrypt-prod created
$ kubectl get clusterissuer
NAME READY AGE
lidabai True 21s
$ kubectl get secrets -A | grep clusterissuer-secreter
cert-manager clusterissuer-secreter Opaque 1 104s

资源清单解释

spec: 
acme: <Object> #ACME将此颁发者配置为与RFC8555(ACME)服务器通信,以获取签名的x509证书。
ca: <Object> #将此颁发者配置为使用签名CA密钥对签名证书存储在Secret资源中。这用于构建内部PKI由证书管理器管理。
selfSigned: <Object> #自签名将此颁发者配置为使用“self sign”证书用于创建CertificateRequest对象的私钥。
vault: <object> #将此颁发者配置为使用HashiCorp Vault签署证书PKI后端。
venafi: #将此颁发者配置为使用Venafi TPP或Venafi云政策区。


3.2 创建证书资源

  • 编写资源清单文件
$ cat cert-lidabai.yaml 
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: cert-lidabai
namespace: default
spec:
issuerRef: #从哪个颁发者获取证书
name: lidabai
kind: ClusterIssuer
secretName: clusterissuer-secret
ipAddresses: #少需要 DNS 名称、URI 或 IP 地址之一。
- 192.168.2.60


  • 创建资源对象
$ kubectl apply  -f cert-lidabai.yaml
certificate.cert-manager.io/cert-lidabai created
$ kubectl get certificate -n default
NAME READY SECRET AGE
cert-lidabai False clusterissuer-secret 3m9s


  • 查看日志
$ kubectl logs -f $(kubectl get pods -n cert-manager | grep cert-manager | grep -v 'cainjector\|webhook' | awk '{print $1}') -n cert-manager



举报

相关推荐

0 条评论