说明(阿里云域名请看另一篇文章)

  • 国内的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 然后再创建

在这里插入图片描述

成功并使用证书

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

开源、云原生的融合云平台

更多推荐