在现有 Jenkins 服务器上添加 Kubernetes 集群并解决 (401 unauthorized) 问题

40次阅读
没有评论

问题描述

希望将一个 Kubernetes 集群添加到现有的 Jenkins 服务器,并迁移从 Docker 到 Kubernetes 的作业,使用命名代理。他已经设置了 Kubernetes 集群,并为在同一 Kubernetes 上运行的 Jenkins 实例添加了一个 serviceaccount(服务账户),但在设置作业时一直出现 401 unauthorized 错误。用户想知道是否需要在服务账户中添加其他内容,以便在集群外部使用令牌。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案 1 – 创建外部 Jenkins 的身份验证令牌

  1. 创建 serviceAccount(服务账户):
    shell
    kubectl create serviceaccount jenkins -n devops-tools
  2. 创建角色(role)的 YAML 文件(jenkins-role.yaml):
    “`yaml
    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
    name: jenkins
    rules:
  3. apiGroups: [“”]
    resources: [“pods”]
    verbs: [“create”,”delete”,”get”,”list”,”patch”,”update”,”watch”]
  4. apiGroups: [“”]
    resources: [“pods/exec”]
    verbs: [“create”,”delete”,”get”,”list”,”patch”,”update”,”watch”]
  5. apiGroups: [“”]
    resources: [“pods/log”]
    verbs: [“get”,”list”,”watch”]
  6. apiGroups: [“”]
    resources: [“secrets”]
    verbs: [“get”]
    “`
  7. 应用角色:
    shell
    kubectl apply -f jenkins-role.yaml -n devops-tools
  8. 创建 RoleBinding 的 YAML 文件(jenkins-rolebinding.yaml):
    “`yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
    name: jenkins
    namespace: devops-tools
    roleRef:
    apiGroup: rbac.authorization.k8s.io
    kind: Role
    name: jenkins
    subjects:
  9. kind: ServiceAccount
    name: jenkins
    “`
  10. 应用 RoleBinding:
    shell
    kubectl apply -f jenkins-rolebinding.yaml -n devops-tools
  11. 在相同的命名空间中创建令牌(token)(注意可能出现名称冲突):
    shell
    kubectl create token jenkins -n devops-tools

    (将此 JWT 令牌复制以备后用)

  12. 在外部 Jenkins 中创建一个新的凭据(credential),类型为 secret text,将令牌粘贴到最后一步中复制的令牌。

解决方案 2 – 验证令牌

令牌是 JWT,您可以对其进行 base64 解码,或使用 https://jwt.io 来验证它。以下是一个 curl 示例(适用于 Linux)来测试它(根据需要替换命名空间和 URL):

export JENKINS_TOKEN=PASTE.TOKEN.HERE
curl --location --request GET 'https://localhost:6443/api/v1/namespaces/devops-tools/pods' \
  --header 'Authorization: Bearer $JENKINS_TOKEN'

参考链接

  1. CloudBees 文档 – Kubernetes 插件对远程 Kubernetes 集群的认证
  2. Kubernetes 文档 – 服务账户令牌

以上是解决您问题的两种方案,您可以根据实际情况选择其中之一来解决 (401 unauthorized) 错误。

正文完