Kubernetes 集群到 Jumpserver
以下是使用 ServiceAccount Token(令牌) 连接 Kubernetes 集群到 Jumpserver 的 详细分步指南,包括权限配置、Token 获取和常见问题排查。
1. 创建 ServiceAccount 并分配权限
1.1 创建 ServiceAccount
在 Kubernetes 集群中创建一个专用于 Jumpserver 的 ServiceAccount(如 jumpserver-admin
):
kubectl create serviceaccount jumpserver-admin -n kube-system
1.2 绑定 ClusterRole(赋予管理员权限)
kubectl create clusterrolebinding jumpserver-admin \--clusterrole=cluster-admin \--serviceaccount=kube-system:jumpserver-admin
-
说明:
-
cluster-admin
是 Kubernetes 内置的最高权限角色(生产环境建议按需缩小权限)。 -
如果只需要特定命名空间的权限,改用
RoleBinding
和自定义Role
。
-
2. 使用 TokenRequest API(推荐新方法)
更现代的方法是直接通过 API 获取 Token:
kubectl create token jumpserver-admin -n kube-system --duration=8760h
-
--duration=8760h
设置 Token 有效期(1年),按需调整。
复制输出的 Token,用以下命令测试:
curl -k -H "Authorization: Bearer <粘贴Token>" https://<k8s-api-server>:6443/api/v1/namespaces/default/pods
-
应返回 JSON 格式的 Pod 列表或权限相关信息。
3. 在 Jumpserver 中配置密文
-
进入 Jumpserver:
-
导航到 "凭据管理" → "密文" → 点击 "创建密文"。
-
-
填写密文信息:
-
名称:
k8s-admin-token
(自定义) -
密文类型:选择 "令牌"(关键步骤!)
-
密钥:粘贴从步骤 2 复制的 Token。
-
其他字段(如描述)按需填写。
-
-
点击 "提交" 保存。
4. 在 Jumpserver 中添加 Kubernetes 集群
-
进入 Kubernetes 管理:
-
导航到 "Kubernetes" → "集群管理" → 点击 "创建集群"。
-
-
填写集群信息:
-
名称:
prod-cluster
(自定义) -
API Server:填写 k8s API 地址,例如:
-
默认端口:
https://<k8s-master-ip>:6443
-
如果通过负载均衡器访问,填写对应的 URL。
-
-
认证方式:选择 "Bearer Token"(或类似选项)。
-
关联密文:选择刚才创建的
k8s-admin-token
。 -
其他选项:
-
跳过证书验证:如果使用自签名证书且未上传 CA,勾选此项(仅限测试环境)。
-
集群别名:按需填写(显示在 Web 终端中的名称)。
-
-
-
测试连接:
-
点击 "测试连接",确认返回成功(绿色提示)。
-
-
点击 "提交" 完成配置。
5. 验证连接
-
在 Jumpserver Web 终端访问:
-
登录 Jumpserver 用户账号。
-
进入 "Web 终端" → 选择刚添加的 Kubernetes 集群。
-
执行命令测试(如
kubectl get nodes
),应能正常返回节点列表。
-
-
检查权限:
-
执行
kubectl auth can-i --list
确认权限符合预期。
-
6. 常见问题排查
问题 1:Token 无效或过期
-
现象:连接测试失败,提示
Unauthorized
。 -
解决:
-
重新生成 Token(ServiceAccount 的 Token 默认永久有效,但 Secret 可能被删除)。
-
检查 Secret 是否存在:
kubectl get secret -n kube-system | grep jumpserver-admin
-
问题 2:证书验证失败
-
现象:
x509: certificate signed by unknown authority
。 -
解决:
-
方法 1:在 Jumpserver 集群配置中上传 k8s 的 CA 证书(路径通常为
/etc/kubernetes/pki/ca.crt
)。 -
方法 2(临时方案):勾选 "跳过证书验证"(不推荐生产环境)。
-
问题 3:网络不通
-
现象:连接超时或
Connection refused
。 -
解决:
-
从 Jumpserver 服务器测试网络连通性:
curl -k https://<k8s-api-server>:6443
-
检查 k8s API Server 是否监听正确端口:
netstat -tuln | grep 6443
-
确保防火墙/安全组放行 6443 端口。
-
问题 4:权限不足
-
现象:执行命令时提示
Forbidden
。 -
解决:
-
检查 ClusterRoleBinding 是否正确:
kubectl get clusterrolebinding jumpserver-admin -o yaml
-
按需调整权限(参考 Kubernetes RBAC 文档)。
-
7. 安全建议
-
最小权限原则:不要滥用
cluster-admin
,按需限制权限,例如:# 仅允许读取所有命名空间的 Pod kubectl create clusterrole jumpserver-view --verb=get,list --resource=pods kubectl create clusterrolebinding jumpserver-view --clusterrole=jumpserver-view --serviceaccount=kube-system:jumpserver-admin
-
定期轮换 Token:删除旧 Secret 触发自动生成新 Token:
kubectl delete secret <secret-name> -n kube-system
-
审计日志:在 Jumpserver 中启用会话录制,定期检查 k8s 的审计日志。
通过以上步骤,你能成功将 Kubernetes 集群集成到 Jumpserver。