jenkins - 授权 Jenkins 在自己的 K8S 命名空间中列出 pod
问题描述
所以我正在使用 Helm 在我的 K8S 集群中部署一个 Jenkins 实例。
这是我正在关注的流程:
1) 创建名为jenkins-pipeline
.
kubectl get ns jenkins-pipeline -o yaml
apiVersion: v1
kind: Namespace
metadata:
creationTimestamp: 2018-09-15T16:58:33Z
name: jenkins-pipeline
resourceVersion: "25596"
selfLink: /api/v1/namespaces/jenkins-pipeline
uid: 9449b9e7-b908-11e8-a915-080027bfdbf9
spec:
finalizers:
- kubernetes
status:
phase: Active
jenkins-admin
2) 创建名为INSIDE namespace的ServiceAccount jenkins-pipeline
。
kubectl get serviceaccounts -n jenkins-pipeline jenkins-admin -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2018-09-15T17:02:25Z
name: jenkins-admin
namespace: jenkins-pipeline
resourceVersion: "25886"
selfLink: /api/v1/namespaces/jenkins-pipeline/serviceaccounts/jenkins-admin
uid: 1e921d43-b909-11e8-a915-080027bfdbf9
secrets:
- name: jenkins-admin-token-bhvdd
3) 创建 ClusterRoleBinding 将我的 ServiceAccount 链接jenkins-admin
到 ClusterRole cluster-admin
。(我知道这不是为我的部署分配那么多特权的最佳做法,但我现在只是在本地进行测试)。
kubectl get clusterrolebindings.rbac.authorization.k8s.io jenkins-cluster-role-binding -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
creationTimestamp: 2018-09-15T16:58:33Z
name: jenkins-cluster-role-binding
resourceVersion: "25597"
selfLink: /apis/rbac.authorization.k8s.io/v1/clusterrolebindings/jenkins-cluster-role-binding
uid: 944a4c18-b908-11e8-a915-080027bfdbf9
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: jenkins-admin
namespace: jenkins-pipeline
4) 在命名空间中部署我的 pod jenkins-pipeline
。
5) 使用命名空间中的服务公开部署jenkins-pipeline
。
Jenkins 运行得非常好,但是当我尝试测试我的 Kuberenetes 连接时,它无法说明:
Error testing connection https://192.168.99.100:8443: Failure executing: GET at: https://192.168.99.100:8443/api/v1/namespaces/jenkins-pipeline/pods. Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. pods is forbidden: User "system:serviceaccount:jenkins-pipeline:default" cannot list pods in the namespace "jenkins-pipeline".
UI 的片段如下所示:
据我所知,我已经对此进行了配置。我在命名空间中创建了 serviceaccount 并赋予了这个 serviceaccount SUPER 权限。但是它不能在自己的命名空间中列出 pod。任何帮助将不胜感激。
我试图在 Jenkins UI 中更改命名空间,但我感觉它默认为jenkins-pipeline
即使我没有说明它。
解决方案
感谢 David Maze 的指示,我明白了。我错过了让我的部署使用新创建的 ServiceAccount 的关键部分。
需要将其添加到 spec.template.spec 下的部署文件中:
spec:
containers:
- env:
- name: JAVA_OPTS
value: -Djenkins.install.runSetupWizard=false
image: jeunii/my-jenkins-base:1.0
imagePullPolicy: IfNotPresent
.
.
serviceAccount: jenkins-admin
.
.
推荐阅读
- wordpress - 警告:/home/websitename/public_html/wp_includes/formatting.php 在第 3361 行
- tomcat - 与 7.21.5 捆绑的 tomcat 中的错误
- reactjs - JSX 元素类型“SubscribeCard”没有任何构造或调用签名
- java - 将数据框的架构与其他数据框的架构进行比较
- sql - 如何从外键插入多个数据?
- python - 基维蟒蛇 | 定位文本输入
- snowflake-cloud-data-platform - 如何加快 SnowSQL 文件从本地到内部阶段的导入
- python - 使用 pytest skipif 检查服务器的内存大小
- python - 提交订单并重定向到单个平台
- python - 使用 Flask 的增量作业队列(获取部分结果)