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

K8S RoleBinding问题:cert-manager-webhook-ovh服务账号无法访问ovh-credentials Secret

问题根因

从报错信息可定位两个核心配置错误:

  • RBAC绑定的服务账号不匹配:你部署的cert-manager-webhook-ovh运行在default命名空间,使用的服务账号为system:serviceaccount:default:cert-manager-webhook-ovh,但你配置的ClusterRoleBinding绑定的是cert-manager命名空间下的同名服务账号,权限未实际生效。
  • Secret读取路径不匹配:你的ovh-credentials Secret存储在default命名空间,但当前webhook请求访问的是cert-manager命名空间下的同名Secret,资源路径不对应。
解决步骤

1. 修正ClusterRoleBinding配置

调整ClusterRoleBinding的subjects字段,将绑定的服务账号命名空间改为default,匹配实际运行的webhook服务账号:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: cert-manager-webhook-ovh:secret-reader
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cert-manager-webhook-ovh:secret-reader
subjects:
- apiGroup: ""
  kind: ServiceAccount
  name: cert-manager-webhook-ovh
  namespace: default # 修正为webhook实际所在的命名空间

应用配置:

kubectl apply -f <上述配置对应的文件名>

2. 对齐Secret读取路径(二选一即可)

方案A:迁移Secret到cert-manager命名空间(推荐)

将ovh-credentials迁移到webhook当前请求的cert-manager命名空间,和cert-manager核心组件资源统一管理:

# 迁移Secret
kubectl get secret ovh-credentials -n default -o yaml | sed 's/namespace: default/namespace: cert-manager/' | kubectl apply -f -
# 删除原命名空间冗余Secret
kubectl delete secret ovh-credentials -n default

方案B:指定Secret读取的命名空间

如果要保留Secret在default命名空间,需要修改ClusterIssuer的webhook solver配置,明确指定Secret所在的命名空间:

# ClusterIssuer的dns01 solver配置示例,补充namespace字段
solvers:
- dns01:
    webhook:
      groupName: acme.ovh.com
      solverName: ovh
      config:
        endpoint: ovh-eu
        applicationKeyRef:
          name: ovh-credentials
          key: applicationKey
          namespace: default # 明确指定Secret所在命名空间
        applicationSecretRef:
          name: ovh-credentials
          key: applicationSecret
          namespace: default
        consumerKeyRef:
          name: ovh-credentials
          key: consumerKey
          namespace: default

3. 验证权限配置

执行以下命令验证服务账号是否有对应Secret的读取权限,返回yes即为配置正确:

# <secret-namespace>替换为Secret实际所在的命名空间,default或者cert-manager
kubectl auth can-i get secrets/ovh-credentials --as system:serviceaccount:default:cert-manager-webhook-ovh -n <secret-namespace>

4. 重新触发证书签发

删除已失败的挑战资源,让cert-manager重新走签发流程:

kubectl delete challenges.acme.cert-manager.io --all

等待1-2分钟后查看挑战状态即可确认是否恢复正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 06:27:01