You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cert-manager为GoDaddy域名生成Let's Encrypt证书失败求助

问题:使用GoDaddy DNS与cert-manager生成Let's Encrypt证书失败

错误日志

I0728 17:31:12.123952       1 dns.go:88] cert-manager/controller/challenges/Present "msg"="presenting DNS01 challenge for domain" "dnsName"="XXXX" "domain"="XXX" "resource_kind"="Challenge" "resource_name"="letsencrypt-staging-bflxn-153714257-3821133841" "resource_namespace"="default" "resource_version"="v1" "type"="DNS-01" 
E0728 17:31:12.129511       1 controller.go:163] cert-manager/controller/challenges "msg"="re-queuing item due to error processing" "error"="godaddy.acme.mycompany.com is forbidden: User \"system:serviceaccount:cert-manager:cert-manager\" cannot create resource \"godaddy\" in API group \"acme.mycompany.com\" at the cluster scope" "key"="default/letsencrypt-staging-bflxn-153714257-3821133841" 

核心问题:cert-manager的ServiceAccount无权限在集群范围创建acme.mycompany.com API组下的godaddy资源,推测与ClusterIssuer的groupName及webhook配置不匹配有关。


已配置资源

Secret配置(secret.yml)

apiVersion: v1
kind: Secret
metadata:
  name: godaddy-api-key
  namespace: cert-manager
type: Opaque
stringData:
  token: GO_DADDY_KEY:GO_DADDY_SECRET

ClusterIssuer配置(issuer.yml)

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    email: XXXX
    privateKeySecretRef:
      name: letsencrypt-staging
    solvers:
      - selector:
          dnsNames:
          - '*.company.com'
        dns01:
          webhook:
            config:
              apiKeySecretRef:
                name: godaddy-api-key
                key: token
              production: true
              ttl: 600
            groupName: acme.mycompany.com
            solverName: godaddy

注:尝试过多种groupName组合(包括独立域名),均未成功

Certificate配置

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: letsencrypt-staging
spec:
  secretName: letsencrypt-staging
  renewBefore: 240h
  dnsNames:
    - "*.company.com"
  issuerRef:
    name: letsencrypt-staging
    kind: ClusterIssuer

当前证书状态

执行命令k get certificate letsencrypt-staging返回:

$ k get certificate letsencrypt-staging 
NAME                  READY   SECRET                AGE
letsencrypt-staging   False   letsencrypt-staging   8m27s

使用的webhook为snowdrop/godaddy-webhook。


解决步骤

1. 对齐webhook与ClusterIssuer的groupName

安装godaddy-webhook时,确保配置的groupName与ClusterIssuer中groupName: acme.mycompany.com完全一致。若通过Helm安装,重新指定正确值:

helm upgrade --install godaddy-webhook snowdrop/godaddy-webhook \
  --namespace cert-manager \
  --set groupName=acme.mycompany.com

2. 补充RBAC权限

创建ClusterRole与ClusterRoleBinding,为cert-manager的ServiceAccount授予操作acme.mycompany.com组资源的权限:

# rbac-fix.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cert-manager-godaddy-webhook
rules:
- apiGroups: ["acme.mycompany.com"]
  resources: ["godaddies"]
  verbs: ["create", "get", "list", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cert-manager-godaddy-webhook
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cert-manager-godaddy-webhook
subjects:
- kind: ServiceAccount
  name: cert-manager
  namespace: cert-manager

应用配置:

kubectl apply -f rbac-fix.yml

3. 检查webhook运行状态

确认webhook Pod正常运行:

kubectl get pods -n cert-manager | grep godaddy

若Pod异常,查看日志排查问题:

kubectl logs <godaddy-webhook-pod-name> -n cert-manager

4. 重新触发证书请求

删除现有Challenge资源,让cert-manager重新处理验证流程:

kubectl delete challenges -l cert-manager.io/certificate-name=letsencrypt-staging -n default

或直接删除并重新创建Certificate:

kubectl delete certificate letsencrypt-staging
kubectl apply -f certificate.yml

内容的提问来源于stack exchange,提问作者reayn3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:03:22