当前位置: 首页 > 知识库问答 >
问题:

Jenkins+Kubenetes:如何在kubernetes-plugin中使用kubectl

佟云
2023-03-14

我正在Kubernetes系统上配置Jenkins。建造起来很好。但为了部署,我们需要调用库贝特尔或赫尔姆。当前,我正在使用

  • Lachlanevenson/k8s-kubectl:v1.8.8
  • Lachlanevenson/K8S-Helm:最新
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"
        }    
    }
  }
}

你能告诉我出了什么问题吗?

谢谢,

共有1个答案

茹康裕
2023-03-14

从Kubernetes V1.8开始,Kubernetes(k8s)主机默认实现对其API访问的基于角色的访问控制(RBAC)安全控制。RBAC控制将工作负载对k8s API的访问限制在您明确允许的资源和方法上。

您应该创建一个角色,允许访问pod资源的列表谓词(以及您需要的任何其他资源1),创建一个服务帐户对象,最后创建一个角色绑定,将角色分配给服务帐户。

最后,通过在Pod模板的ServiceAccountName属性中提供服务帐户的名称,将服务帐户提供给Jenkins部署。确保AutomountServiceAccountTokentrue,以便K8在您的POD中安装API密钥。尝试使用本机k8s API包装器和库访问k8s API,应该会找到这个密钥并自动验证您的请求。

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

 类似资料: