kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)

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

  • 使用官方阿里云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管理
    kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第1张图片
  • 复制access-keysecret-key后续用的到
    kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第2张图片

安装alidns-webhook

  • 尽量安装在和cert-manager一个namespace
  • 基本什么都不需要改,下一步直接安装(比较慢,耐心等待,可能是镜像源问题)
    kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第3张图片

创建配置文件(Secret)

  1. 在namespace创建配置文件将阿里云得access-keysecret-key填入
    kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第4张图片

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

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # 改为自己得邮箱
    email: [email protected]
    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 即可

kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第5张图片

使用证书

kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第6张图片
kubernetes中cert-manager使用DNS-01方式生成https证书(阿里云)_第7张图片

你可能感兴趣的:(k8s,k8s,运维)