kubernetes中cert-manager使用DNS-01方式生成https证书(腾讯云)
说明国内的DNS-01方式生成证书需要使用cert-manager的插件,因为cert-manager不支持国内的DNS厂商本文使用的域名在腾讯云:dnspoddns-01方式支持泛域名解析https证书查看支持的DNS厂商:https://cert-manager.io/docs/configuration/acme/dns01/由于 cert-manager-webhook-dnspod 很久
·
说明(阿里云域名请看另一篇文章)
- 国内的DNS-01方式生成证书需要使用cert-manager的插件,因为cert-manager不支持国内的DNS厂商
- 本文使用的域名在腾讯云:dnspod
- dns-01方式支持泛域名解析https证书
- 查看cert-manager支持的DNS厂商:https://cert-manager.io/docs/configuration/acme/dns01/
- 由于 cert-manager-webhook-dnspod 很久没有继续维护,chart 包已不兼容最新的 cert-manager 。本文内容中使用的 cert-manager-webhook-dnspod 也替换成了腾讯工程师开发的新版本,开源地址: https://github.com/imroc/cert-manager-webhook-dnspod
- 域名在阿里云同理:https://github.com/pragkent/alidns-webhook
- 需要先在云平台提前添加配置解析映射该域名,如果添加解析含有通配符:*.xxx.com,则只能生成通配符https证书:**.xxx.com,不能生成:a.xxx.com,如果需要a.xxx.com,则需要新添加a.xxx.com解析配置
获取腾讯云授权信息
- 登录腾讯云dnspod:https://console.dnspod.cn/account/token/apikey
- 新建密钥(复制SecretId和SecretKey ,后续会用到)
安装应用仓库
- 终端安装(替换刚才复制的secretId和secretKey)
$ helm repo add roc https://charts.imroc.cc
$ helm upgrade --install cert-manager-webhook-dnspod roc/cert-manager-webhook-dnspod \
--namespace <NAMESPACE> \
--set clusterIssuer.secretId=<SECRET_ID> \
--set clusterIssuer.secretKey=<SECRET_KEY>
- kubeshpere安装
安装插件应用
- 安装成功后会自动创建集群签发(ClusterIssuer)
- 尽量安装在和cert-manager一个namespace
- 创建并进入插件项目,安装应用
- 检查安装成功
生成证书(创建dns.yaml)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
# 每个域名不要重复
name: example-crt
## 证书生成的工作空间,不指定也可以
namespace: test-dns
spec:
#生成后证书的配置文件名称
secretName: example-crt
issuerRef:
name: dnspod
kind: ClusterIssuer
group: cert-manager.io
dnsNames:
#填写需要证书的域名:可以是泛域名
- xxx.xxxx.cn
# 开始生成
kubectl apply -f dns.yaml
#查看状态(需要等一会)
kubectl get Certificate --all-namespaces
#查看错误信息
kubectl describe Certificate-n test-cert
#深查看深层错误原因
kubectl describe CertificateRequest -n test-cert
#深查看更深层错误原因
kubectl describe challenges -n test-cert
可能错误
因为会在其他namespace下生成https证书配置文件,cert-manager的namespace会在另一个namespace下生成config文件,所以涉及到k8s rbac权限授权问题
参考:https://www.kubernetes.org.cn/service-account
如果出现类似异常:
User “system:serviceaccount:xxx:xxx“ cannot create resource “xxx“ in API group at .... “
运行绑定角色后重新安装
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user=$(可以在yaml中查看,一般是:cert-manager)
如果是kubectl apply -f 方式安装,不中卸载直接重新运行kubectl apply -f 即可
如果遇到没有报错,但是长时间未生成证书,可以多次kubectl delete -f 然后再创建
成功并使用证书
更多推荐
已为社区贡献4条内容
所有评论(0)