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

网友投稿 277 2022-09-10

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

一、Cert-Manager简介

官方文档:​​什么是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​​​和​​example.com​​​DNS 名称,​​spiffe://cluster.local/ns/sandbox/sa/example​​​URI 主题备用名称,有效期为 90 天,并在到期前 15 天续订如下。它包含​​Certificate​​资源可能具有的所有选项的详尽列表,但只有一部分字段需要标记。

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

2.1 下载资源清单文件

$ wget 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 AGEcert-manager-86b4798576-zkx6s 1/1 ContainerCreating 0 4m40scert-manager-webhook-6b4f99d45d-xmtbv 1/1 ContainerCreating 0 4m40s$ kubectl -n cert-manager get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEcert-manager ClusterIP 10.102.69.246 9402/TCP 25mcert-manager-webhook ClusterIP 10.98.189.19 443/TCP 25m

2.3 验证安装

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

​​cmctl​​是一个 CLI 工具,可以帮助您管理集群内的 cert-manager 资源。 虽然也可作为​​kubectl 插件​​。

$ wget tar zxvf cmctl-linux-amd64.tar.gz $ mv cmctl /usr/local/bin/

证书创建检查

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

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

资源清单解释

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

3.2 创建证书资源

编写资源清单文件

$ cat cert-lidabai.yaml ---apiVersion: cert-manager.io/v1kind: Certificatemetadata: name: cert-lidabai namespace: defaultspec: issuerRef: #从哪个颁发者获取证书 name: lidabai kind: ClusterIssuer secretName: clusterissuer-secret ipAddresses: #少需要 DNS 名称、URI 或 IP 地址之一。 - 192.168.2.60

创建资源对象

$ kubectl apply -f cert-lidabai.yamlcertificate.cert-manager.io/cert-lidabai created$ kubectl get certificate -n defaultNAME READY SECRET AGEcert-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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:kubernetes Service概述
下一篇:kubebuilder中的controller:latest是什么镜像
相关文章

 发表评论

暂时没有评论,来抢沙发吧~