【问题标题】:Authorize Jenkins to list pods in its own K8S namespace授权 Jenkins 在自己的 K8S 命名空间中列出 pod
【发布时间】:2019-02-20 03:59:18
【问题描述】:

所以我正在使用 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

2) 创建名为jenkins-admin INSIDE 命名空间jenkins-pipeline 的ServiceAccount。

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) 在命名空间 jenkins-pipeline 中部署我的 pod。

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".

用户界面的 sn-p 看起来像:

据我所知,我已对此进行了配置。我在命名空间中创建了 serviceaccount 并赋予了这个 serviceaccount SUPER 权限。但是它不能在自己的命名空间中列出 pod。任何帮助将不胜感激。

我尝试在 Jenkins UI 中更改命名空间,但我感觉它默认为 jenkins-pipeline,即使我没有说明。

【问题讨论】:

  • 您是否已将 pod 配置为使用服务帐户?
  • 看起来你很准。我在 helm deployment.yaml 模板文件中添加了serviceAccount: {{ .Values.serviceaccount.name }},现在一切都很好!

标签: jenkins kubernetes jenkins-plugins


【解决方案1】:

多亏了 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
    .
    .

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2020-11-06
    相关资源
    最近更新 更多