一、cert-manager简介
我们知道,在k8s中通常可以使用 easyrsa
、openssl
、 cfssl
来生成手动证书,但还是比较麻烦,有如下一些缺点:
- 如果k8s集群上部署的应用较多,要为每个应用的不同域名生成https证书,操作太麻烦。
- 上述这些手动操作没有跟k8s的deployment描述文件放在一起记录下来,很容易遗忘。
- 证书过期后,又得手动执行命令重新生成证书。
对于这些问题,cert-manager就很好地解决了这些痛点。cert-manager是Kubernetes上一个管理SSL证书的插件,配合ingress可以对网站配置https访问,在加上letsencrypt提供免费的SSL证书,所有就产生了cert-manager+ingress(nginx/traefik)+letsencrypt的免费套餐。
cert-manager 的架构
cert-manager 架构图:
上面是官方给出的架构图,可以看到cert-manager在k8s中定义了两个自定义类型资源:Issuer
和Certificate
。
其中Issuer
代表的是证书颁发者,可以定义各种提供者的证书颁发者,当前支持基于Letsencrypt
、vault
和CA
的证书颁发者,还可以定义不同环境下的证书颁发者。
而Certificate
代表的是生成证书的请求,一般其中存入生成证书的元信息,如域名等等。
一旦在k8s中定义了上述两类资源,部署的cert-manager
则会根据Issuer
和Certificate
生成TLS证书,并将证书保存进k8s的Secret
资源中,然后在Ingress
资源中就可以引用到这些生成的Secret
资源。对于已经生成的证书,还是定期检查证书的有效期,如即将超过有效期,还会自动续期。
二、安装cert-manager
添加仓库并更新:
helm repo add jetstack https://charts.jetstack.io
helm repo update
先创建一个namespace,以免默认添加到default:
kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true