Jenkins + 库伯内斯 : How to use kubectl in kubernetes-plugin

标签 jenkins kubernetes jenkins-plugins kubectl kubernetes-helm

我正在 Kubernetes 系统上配置 Jenkins。它可以很好地构建。但是为了部署,我们需要调用 kubectl 或 helm。目前,我正在使用

  • lachlanevenson/k8s-kubectl:v1.8.8
  • lachlanevenson/k8s-helm:最新

失败并抛出异常:“来自服务器的错误(禁止):pods 被禁止:用户“system:serviceaccount:jenkins:default”无法在命名空间“jenkins”中列出 pods”

jenkins 脚本很简单:

def label = "worker-${UUID.randomUUID().toString()}"

podTemplate(label: label,containers: [
  containerTemplate(name: 'kubectl', image: 'lachlanevenson/k8s-kubectl:v1.8.8', command: 'cat', ttyEnabled: true)
],
volumes: [
  hostPathVolume(mountPath: '/var/run/docker.sock', hostPath: '/var/run/docker.sock')
]){
  node(label) {
    stage('Run kubectl') {
        container('kubectl') {
            sh "kubectl get pods"
        }    
    }
  }
}

你能告诉我哪里出了问题吗?

谢谢,

最佳答案

从 Kubernetes v1.8 开始,Kubernetes (k8s) master 默认实现 role-based access control (RBAC)对其 API 访问的安全控制。 RBAC 控件将您的工作负载对 k8s API 的访问限制为您明确允许的那些资源和方法。

你应该创建一个 role允许访问 pod 资源的 list 动词(以及您需要的任何其他资源1),创建一个 service account对象,最后创建一个 role binding它将角色分配给服务帐户。

最后,通过在 Pod 模板的 serviceAccountName 属性中提供其名称,为您的 Jenkins 部署提供服务帐户。确保 automountServiceAccountTokentrue 以让 k8s 在您的 Pod 中安装 API key 。尝试使用 native k8s API 包装器和库访问 k8s API 应该找到此 key 并自动验证您的请求。

1如果您计划从 Jenkins 进行部署,您肯定需要的不仅仅是列出 Pod 的能力,因为您需要改变系统中的对象。但是,如果您使用 Helm,则影响部署的下游 k8s 对象的是 Helm 的 Tiller pod,因此 Helm Tiller 和 Jenkins 与 Tiller 通信所需的权限集会有所不同。

关于 Jenkins + 库伯内斯 : How to use kubectl in kubernetes-plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52202159/

相关文章:

jenkins - 如何在 Jenkins 中同时设置 "Build after other projects are built"和 "Poll SCM"

jenkins - Jenkins 中的环境变量

Jenkins 工作流程(管道)- 仅在 SCM 发生更改时构建作业

kubernetes - 调度尽可能多的 Pod 以适合集群?

reactjs - basename 和 homepage 未按预期工作以服务/静态/开发中的文件

elasticsearch - 如何检查kubernetes集群中有状态集的重启原因

hudson - Jenkins 有 "Who Broke the Build"插件吗?

docker - 可以通过桥 IP 连接到 docker 容器,但不能通过 pod 容器内的 0.0.0.0 连接

java - 使用 Cargo Java API 和 Jenkins 部署到 Wildfly 时出现 "XNIO001001: No XNIO provider found"错误

jenkins - 使用 jenkins email-ext 插件更改 jenkins 工作区并通过电子邮件附加文件