forbidden: User “system:serviceaccount:argo:default“ cannot patch resource “services“ in API group “

解决方案

  1. 为 Argo 工作流的 ServiceAccount 授权访问 services 资源
    错误提示表明 Argo 的 ServiceAccount (system:serviceaccount:argo:default) 没有权限在 argo 命名空间下执行 patch 操作。你需要为该 ServiceAccount 授予适当的权限,允许其更新服务(services)。
    创建一个 Role 或 ClusterRole 来授予 Argo 的 default ServiceAccount 更新服务的权限。

创建一个名为 argo-service-account-role.yaml 的文件,内容如下:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: argo
  name: argo-service-account-role
rules:
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "create", "update", "patch", "delete"]


然后,创建一个 RoleBinding 将该角色绑定到 argo 命名空间下的默认 ServiceAccount:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: argo-service-account-role-binding
  namespace: argo
subjects:
  - kind: ServiceAccount
    name: default
    namespace: argo
roleRef:
  kind: Role
  name: argo-service-account-role
  apiGroup: rbac.authorization.k8s.io

然后应用这些文件:

kubectl apply -f argo-service-account-role.yaml
kubectl apply -f argo-service-account-role-binding.yaml

这样,Argo 的默认 ServiceAccount 就有权限更新服务了。

检查 Argo Workflow 的权限(确保它有足够权限)

如果你依赖于 Argo Workflow 来管理资源,确保你在工作流中应用了正确的权限策略。如果有权限问题,可以通过以下步骤来排查和修复:

通过 kubectl auth can-i 来检查当前 ServiceAccount 是否具有所需的权限。

kubectl auth can-i patch services --as system:serviceaccount:argo:default -n argo

如果返回 no,说明权限不足,你需要按照上面的步骤为该 ServiceAccount 分配适当的 Role 或 ClusterRole。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值