说明(腾讯云域名请看另一篇文章)

  • 使用官方阿里云dns插件:https://github.com/pragkent/alidns-webhook(安装比较慢请耐心等待)
  • 也可以使用其他开发者使用的:https://gitee.com/StephenEvenson/cert-manager-alidns-webhook?_from=gitee_search(安装比较慢请耐心等待)
  • dns-01方式支持泛域名解析https证书
  • 查看cert-manager支持的DNS厂商:https://cert-manager.io/docs/configuration/acme/dns01/
  • 需要先在云平台提前添加配置解析映射该域名,如果添加解析含有通配符:*.xxx.com,则只能生成通配符https证书:**.xxx.com,不能生成:a.xxx.com,如果需要a.xxx.com,则需要新添加a.xxx.com解析配置

获取阿里云授权信息

  • 登录阿里云点击头像accessKey管理
    在这里插入图片描述
  • 复制access-keysecret-key后续用的到
    在这里插入图片描述

安装alidns-webhook

  • 尽量安装在和cert-manager一个namespace
  • 基本什么都不需要改,下一步直接安装(比较慢,耐心等待,可能是镜像源问题)
    在这里插入图片描述

创建配置文件(Secret)

  1. 在namespace创建配置文件将阿里云得access-keysecret-key填入
    在这里插入图片描述

创建集群签发机构(clusterIssuer.yaml)

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # 改为自己得邮箱
    email: certmaster@example.com
    server: https://acme-v02.api.letsencrypt.org/directory
    privateKeySecretRef:
      name: letsencrypt-staging-account-key
    solvers:
    - dns01:
        webhook:
          #和上面安装时保持一致
          groupName: acme.yourcompany.com
          solverName: alidns
          config:
            # 这个参数标识服务器所在地,经过测试不填写,或者随便填写没有影响
            region: "beijing"
            accessKeySecretRef:
              # 引用刚才创建得配置文件,注意文件名称和key名称是否对应
              name: alidns-secret
              key: access-key
            secretKeySecretRef:
              name: alidns-secret
              key: secret-key
# 开始生成
kubectl apply -f clusterIssuer.yaml

#查看状态(需要等一会)
kubectl get ClusterIssuer --all-namespaces

#查看错误信息
kubectl describe Certificate-n test-cert

#深查看深层错误原因
kubectl describe CertificateRequest -n test-cert

#深查看更深层错误原因
kubectl describe challenges -n test-cert

生成证书(certificate.yaml)

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: example-tls
  # 指定证书生成到哪个工作空间,不指定也可以
  namespace: docs
spec:
  #生成后证书的配置文件名称
  secretName: example-com-tls
  dnsNames:
  - example.com
  - "*.example.com"
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer
# 开始生成
kubectl apply -f certificate.yaml

#查看状态(需要等一会)
kubectl get certificate --all-namespaces

可能错误

因为会在其他namespace下生成https证书配置文件,cert-manager会在另一个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 即可

在这里插入图片描述

使用证书

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

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐