发布于 

使用cert-manager为DNSPod签发免费证书

安装cert-manager

可以参考官网安装方式:https://cert-manager.io/docs/installation/

因为官网的镜像在quay.io拉取,国内可能拉取不到,我已经同步到了阿里云一份,可直接使用,对应关系如下:

quay.io/jetstack/cert-manager-cainjector:v1.13.0: registry.cn-hangzhou.aliyuncs.com/toodo/cert-manager:cainjector-v1.13.0
quay.io/jetstack/cert-manager-controller:v1.13.0: registry.cn-hangzhou.aliyuncs.com/toodo/cert-manager:controller-v1.13.0
quay.io/jetstack/cert-manager-acmesolver:v1.13.0: registry.cn-hangzhou.aliyuncs.com/toodo/cert-manager:acmesolver-v1.13.0
quay.io/jetstack/cert-manager-webhook:v1.13.0: registry.cn-hangzhou.aliyuncs.com/toodo/cert-manager:webhook-v1.13.0

也可以直接使用以下命令部署:

wget https://github.com/cert-manager/cert-manager/releases/download/v1.13.0/cert-manager.yaml
sed -i 's/quay.io\/jetstack\/cert-manager-cainjector:v1.13.0/registry.cn-hangzhou.aliyuncs.com\/toodo\/cert-manager:cainjector-v1.13.0/g' cert-manager.yaml
sed -i 's/quay.io\/jetstack\/cert-manager-controller:v1.13.0/registry.cn-hangzhou.aliyuncs.com\/toodo\/cert-manager:controller-v1.13.0/g' cert-manager.yaml
sed -i 's/quay.io\/jetstack\/cert-manager-acmesolver:v1.13.0/registry.cn-hangzhou.aliyuncs.com\/toodo\/cert-manager:acmesolver-v1.13.0/g' cert-manager.yaml
sed -i 's/quay.io\/jetstack\/cert-manager-webhook:v1.13.0/registry.cn-hangzhou.aliyuncs.com\/toodo\/cert-manager:webhook-v1.13.0/g' cert-manager.yaml

kubectl apply -f cert-manager.yaml

创建DNSPod Token

在DNSPod官网 https://console.dnspod.cn/account/token/token 登陆后点击 账号中心 -> API秘钥 -> DNSPod Token -> 创建秘钥,将ID和Token记录下来

该Token是一次性可见的,需要自己保存

安装 cert-manager-webhook-dnspod

创建values文件:dnspod-webhook-values.yaml

groupName: toodo.fun # 写一个标识 group 的名称,可以任意写

secrets: # 将前面生成的 id 和 token 粘贴到下面
  apiID: "<ID>"
  apiToken: "<Token>"

clusterIssuer:
  enabled: true # 自动创建出一个 ClusterIssuer
  email: your@email.com # 填写您的邮箱地址

使用以下命令进行安装

git clone --depth 1 https://github.com/qqshfox/cert-manager-webhook-dnspod.git
helm upgrade --install -n cert-manager -f dnspod-webhook-values.yaml cert-manager-webhook-dnspod ./cert-manager-webhook-dnspod/deploy/cert-manager-webhook-dnspod

创建证书

创建资源文件:toodo.yaml

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: toodo-fun-crt
  namespace: toodo
spec:
  secretName: toodo-fun-crt-secret # 证书保存在这个 secret 中
  issuerRef:
    name: cert-manager-webhook-dnspod-cluster-issuer # 这里使用自动生成出来的 ClusterIssuer
    kind: ClusterIssuer
    group: cert-manager.io
  dnsNames: # 填入需要签发证书的域名列表,确保域名是使用 dnspod 管理的
  - toodo.fun
  - www.toodo.fun

使用以下命令部署:

kubectl apply -f toodo.yaml

可以使用命令kubectl get certificaterequests.cert-manager.io -ntoodo查看状态,等待ready变为True就代表成功了

RuideMacBook-Pro :: » kubectl get certificaterequests.cert-manager.io -ntoodo
NAME              APPROVED   DENIED   READY   ISSUER                                       REQUESTOR                                         AGE
toodo-fun-crt-1   True                True    cert-manager-webhook-dnspod-cluster-issuer   system:serviceaccount:cert-manager:cert-manager   5m56s

在ingress中使用证书

ingress:
  enabled: true
  className: "traefik"
  annotations: {}
  hosts:
    - host: toodo.fun
      paths:
        - path: /
          pathType: ImplementationSpecific
  tls:
    - secretName: toodo-fun-crt-secret
      hosts:
        - toodo.fun
        - www.toodo.fun