在日常运维工作中,我经常遇到这样的场景:开发团队有3个测试环境Kubernetes集群,2个预发布环境集群,还有1个生产集群。每个集群都需要单独管理账号权限,新同事入职要挨个配置kubectl访问权限,老同事离职又要逐个清理。这种分散管理方式不仅效率低下,还存在安全隐患。
Jumpserver作为开源的堡垒机系统,恰好能解决这个痛点。它就像是一个"万能钥匙管家",把各个Kubernetes集群的访问权限集中管理起来。我去年在金融行业的一个项目中,就用Jumpserver统一纳管了客户分布在三个数据中心的8个Kubernetes集群,运维效率提升了60%以上。
统一纳管的核心价值在于:
在Kubernetes集群中,我们需要先创建一个具备足够权限的ServiceAccount。这里有个实际踩过的坑:早期项目中使用的是个人kubeconfig证书,后来发现证书过期后会导致整个系统不可用。改用ServiceAccount后稳定性大幅提升。
以下是经过生产验证的yaml配置:
yaml复制# jumpserver-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: jumpserver-admin
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: jumpserver-admin
subjects:
- kind: ServiceAccount
name: jumpserver-admin
namespace: kube-system
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
应用这个配置时要注意:
执行命令部署:
bash复制kubectl apply -f jumpserver-admin.yaml
获取Token的过程就像是在银行开通API访问权限。首先需要找到密钥保险箱(Secret),然后取出里面的Token:
bash复制# 查找Secret名称
kubectl get sa jumpserver-admin -n kube-system -o yaml
# 假设输出中secret名称为jumpserver-admin-token-abc12
# 获取并解码Token
kubectl get secret jumpserver-admin-token-abc12 -n kube-system -o jsonpath={".data.token"} | base64 -d
这里有个实用技巧:把解码后的Token保存到临时文件,因为后续在Jumpserver界面配置时需要粘贴这个长字符串。我习惯用pbpaste | pbcopy这样的工具在终端和浏览器之间快速传递内容。
登录Jumpserver后,进入【应用管理】→【Kubernetes】。点击创建按钮时,有几个关键参数需要注意:
环境-区域-用途的命名规范,比如"prod-us-east1-payment"我在配置时遇到过证书验证失败的问题,后来发现是集群使用了自签名证书。解决方法有两个:要么在Jumpserver服务器上添加CA证书信任,要么暂时关闭证书验证(仅限测试环境)。
在【资产管理】→【系统用户】创建K8S类型的用户时,认证令牌处需要粘贴之前获取的Token。这里分享一个排查技巧:如果后续连接测试失败,可以先用这个Token直接通过kubectl测试:
bash复制kubectl --token=<粘贴Token> --server=<API地址> get nodes
曾经有个客户环境因为网络策略限制导致连接失败,用这个方法快速定位到了是防火墙问题。
在【权限管理】→【应用授权】中创建授权规则时,建议遵循最小权限原则。比如:
我设计的一个典型授权方案是这样的:
经过多个项目实践,我总结了这些安全经验:
有个金融客户曾经要求实现这样的安全策略:所有生产环境的kubectl操作必须经过双人审批。我们在Jumpserver上通过组合"授权申请+工单审批"的功能实现了这个需求。
如果测试连接时报错,可以按照这个检查清单排查:
上周刚解决一个案例:客户升级K8s集群后连接失败,最后发现是新版本默认开启了TokenReview的webhook认证。
当用户反映某些操作被禁止时,可以:
记得有次半夜被叫起来处理问题,最后发现是有人直接修改了K8s的ClusterRole导致权限异常。现在我都会在Jumpserver上开启配置变更告警。
对于拥有多个集群的环境,可以在Jumpserver中为每个集群创建独立的Kubernetes应用。然后通过标签功能对集群进行分类,比如:
我们为某跨国企业实施的方案中,通过Jumpserver统一管理了分布在5个国家的12个集群,每个集群都有独立的权限体系。
Jumpserver的API可以方便地与Jenkins、GitLab CI等工具集成。典型场景包括:
实现方式是通过Jumpserver的API获取短期有效的Token,然后在CI脚本中使用。记得设置合理的Token有效期,通常不超过1小时。