Spring Batch worker pods无法识别spring-cloud-deployer-kubernetes配置的自定义服务账户
问题根因
你使用的2.5.0版本spring-cloud-deployer-kubernetes中,Deployment和Job类型资源的服务账户配置是相互独立的,你配置的spring.cloud.deployer.kubernetes.deployment-service-account-name仅对普通应用部署生效,对Spring Batch远程分区生成的Worker Job/Pod不生效,所以系统默认使用了命名空间下的default服务账户,触发了权限不足报错。
正确配置步骤
- 替换正确的配置属性
针对Job类型资源,需要使用专门的Job服务账户配置项,在你的配置文件中补充或替换为如下配置:
# 作用于所有Job类型资源的服务账户配置,包括远程分区生成的Worker Pod spring.cloud.deployer.kubernetes.job.service-account-name=scdf-sa
如果你是从Spring Cloud Dataflow UI启动任务,还需要确认该配置是配置在SCDF服务端的启动参数/配置文件中,而非仅配置在你的Batch主任务应用内部,SCDF调度任务时会读取自身的部署器配置生成子资源。
- 验证服务账户权限
确认你使用的scdf-sa服务账户在对应命名空间下有Pod、Job的操作权限,可参考如下RBAC配置示例:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: test name: scdf-batch-role rules: - apiGroups: [""] resources: ["pods", "pods/log", "services", "configmaps", "secrets", "persistentvolumeclaims"] verbs: ["get", "list", "watch", "create", "delete", "patch", "update"] - apiGroups: ["batch"] resources: ["jobs", "cronjobs"] verbs: ["get", "list", "watch", "create", "delete", "patch", "update"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: scdf-batch-rolebinding namespace: test subjects: - kind: ServiceAccount name: scdf-sa namespace: test roleRef: kind: Role name: scdf-batch-role apiGroup: rbac.authorization.k8s.io
- 验证配置生效
重启SCDF服务端后重新提交任务,查看主任务Pod的环境变量或启动日志,确认部署器读取的服务账户为scdf-sa,新生成的Worker Pod的.spec.serviceAccountName字段也为scdf-sa即配置生效。
内容的提问来源于stack exchange,提问作者Kranthi
相关产品推荐
相关产品推荐

