前言
cert-manager在k8s平台中用的越来越广泛了,通过它可以更方便的管理https证书,可以自动生成secret、自动续签和取消
等等。
架构

上面是官方给出的架构图,可以看到cert-manager在k8s中定义了两个自定义类型资源:Issuer和Certificate。
其中Issuer
代表的是证书颁发者,可以定义各种提供者的证书颁发者,当前支持基于Letsencrypt、vault和CA的证书颁发者
,还可以定义不同环境下的证书颁发者。
而Certificate
代表的是生成证书的请求,一般其中存入生成证书的元信息,如域名等等。
一旦在k8s中定义了上述两类资源,部署的cert-manager则会根据Issuer和Certificate生成TLS证书,并将证书保存进k8s的Secret
资源中,然后在Ingress资源中就可以引用到这些生成的Secret资源。对于已经生成的证书,还是定期检查证书的有效期,如即将超过有效期,还会自动续期。
部署
部署cert-manager还是比较简单的,这里我们通过helm进行部署:
1 | helm install --name cert-manager |
这里我们部署了cert-manager并且指定了默认的Issuer为我们自定义的CA,默认的IssuerKind
为ClusterIssuser
。
创建CA证书
这里我们通过cfssl创建一套自己的CA。
CA配置文件
ca-config.json
1 | { |
CA证书请求文件
ca-csr.json
1 | { |
生成 CA 证书和私钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
这样就生成了ca.csr、ca-key.pem、ca.pem
创建k8s secret
有了ca文件,我们就可以创建k8s的secret了:
1 | kubectl create secret tls ca-secret |
创建cert-manager ca issuer
创建完了secret,我们再来创建CA Issuer
就可以了:
1 | cat << EOF | kubectl create -f - |