Argo Workflow开启memoization时指定ServiceAccount未生效问题
根因说明
你在工作流定义、提交命令中指定的ServiceAccount是给工作流运行的业务Pod使用的,而memoize缓存功能的ConfigMap读写操作是Argo工作流控制器自身执行的,用的是控制器部署时绑定的ServiceAccount,也就是报错中出现的system:serviceaccount:argo:argo,这个账户默认没有修改ConfigMap的权限,所以出现403报错。
修复方案
方案一:给控制器默认ServiceAccount添加权限(推荐,权限范围最小)
给argo命名空间下名为argo的控制器默认ServiceAccount,仅授予缓存用ConfigMap的更新权限:
- 创建权限角色配置文件
cache-role.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: argo name: configmap-cache-role rules: - apiGroups: [""] resources: ["configmaps"] verbs: ["get", "update", "patch"] resourceNames: ["my-config"]
- 创建角色绑定配置文件
cache-rolebinding.yaml:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: configmap-cache-binding namespace: argo subjects: - kind: ServiceAccount name: argo namespace: argo roleRef: kind: Role name: configmap-cache-role apiGroup: rbac.authorization.k8s.io
- 执行命令生效配置:
kubectl apply -f cache-role.yaml kubectl apply -f cache-rolebinding.yaml
方案二:更换控制器使用的ServiceAccount
如果你已经给dma ServiceAccount配置了所有控制器需要的运行权限,可以直接修改工作流控制器的Deployment配置,将spec.template.spec.serviceAccountName字段值改为dma,之后重启控制器Pod即可生效。
配置完成后重新提交工作流即可正常更新缓存ConfigMap,不会再出现403权限报错。
内容的提问来源于stack exchange,提问作者user3877654
相关产品推荐
相关产品推荐

