使用Kubernetes插件在EKS集群运行Jenkins Slave遇权限报错求助
问题根因
你当前的配置存在3个核心问题:
- 为
system:anonymous授权存在极高安全风险,等于开放集群匿名访问权限,完全不建议使用 - 你提交的RoleBinding配置中引用的
pod-reader角色没有提前创建,且Jenkins Kubernetes插件需要Pod创建、删除等读写权限,只读权限无法满足Slave节点调度需求 - 报错的核心原因是Jenkins使用的IAM身份未被EKS的身份认证系统识别,被判定为匿名用户,并非单纯缺少RBAC权限
修复步骤
- 确认Jenkins使用的IAM身份
登录Jenkins所在服务器,执行如下命令获取当前使用的IAM身份ARN:
aws sts get-caller-identity
记录返回的Arn字段值,格式一般为arn:aws:iam::[账号ID]:user/[用户名]或者arn:aws:iam::[账号ID]:role/[角色名]
- 映射IAM身份到EKS集群
EKS通过kube-system命名空间下的aws-authConfigMap关联IAM身份和Kubernetes内部用户,使用有权限操作EKS的账号执行如下命令编辑配置:
kubectl edit configmap aws-auth -n kube-system
在mapUsers字段下添加如下配置,替换为上一步获取的ARN:
mapUsers: | - userarn: 替换为你刚才获取的IAM身份ARN username: jenkins-admin groups: - system:masters
如果不需要给Jenkins管理员权限,可删除system:masters组配置,后续通过自定义RBAC分配权限即可。
- 配置Jenkins所需的RBAC权限
创建Jenkins调度Slave Pod需要的ClusterRole,权限覆盖Pod生命周期管理、日志读取等常用操作:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: jenkins-slave-manager rules: - apiGroups: [""] resources: ["pods"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create","delete","get","list","patch","update","watch"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get","list","watch"] - apiGroups: [""] resources: ["events"] verbs: ["watch"] - apiGroups: [""] resources: ["secrets","configmaps"] verbs: ["get"]
创建ClusterRoleBinding将上面的角色绑定到我们之前定义的jenkins-admin用户:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: jenkins-admin-binding roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: jenkins-slave-manager subjects: - kind: User name: jenkins-admin apiGroup: rbac.authorization.k8s.io
- 验证连通性并清理错误配置
在Jenkins服务器上执行如下命令验证集群访问是否正常:
kubectl get pods -n default
如果返回正常,再到Jenkins Kubernetes插件配置页重新测试连接即可。最后删除你之前创建的不安全的匿名授权配置:
kubectl delete rolebinding read-pods -n default
内容的提问来源于stack exchange,提问作者Shaswat Vashistha
相关产品推荐
相关产品推荐

