首页 > 编程知识 正文

JumpServer开源堡垒机

时间:2023-05-06 10:18:33 阅读:185573 作者:3323

在8月25日的现场直播中,现场演示了在Kubernetes集群上快速部署JumpServer的全过程。 作为世界上第一个完整开源的汉堡机,集装箱化部署是JumpServer汉堡机的特色功能之一。

在此次活动的基础上,旨在整理JumpServer容器化部署的操作文档,指导广大用户的实际操作。 《在Kubernetes集群上快速部署JumpServer》实时评论在此:

3359直播. VHall.com/V3/直播/subscribe/236412036。

JumpServer的导入方法独立模式

独立部署意味着所有服务(包括数据库服务)都部署在一台虚拟机或主机上。 所有数据都没有备份,必须手动定期备份数据库。 该模型适用于一般开发测试环境,仅满足审计要求,采用单台复合机等;

备用模式

主部署意味着所有服务(包括数据库服务)都将以主部署模式部署。 该模式保证节点自动故障切换,MySQL主要结构简单,故障恢复技术难度低,一般在生产环境中要求高可用性,资产数量和并发数量少,适用于故障切换无缝的场景。

集群模式

群集模式是一种基于主标准的升级版本,其中所有服务(包括数据库服务)都是分布式部署的,包括MySQL、Redis等。 该模型一般适用于大规模资产场景、高并发要求的高性能场景、混合云/多DC/分支机构场景等;

Kubernetes模式

该模型适用于用户具有Kubernetes环境且用户其他业务的容器由Kubernetes组织的场景。 或者,在集装箱多、业务庞大、存在困难的组织、管理、调度问题时,也可以考虑通过Kubernetes导入统一管理JumpServer。

在Kubernetes环境中导入JumpServer Kubernetes的优点和缺点优点

不再需要特殊的高可用性解决方案,Kubernetes群集本身现在可以完美地解决这一问题。 扩展也不需要人工,可以通过Kubernetes Deployment的HPA解决。 Kubernetes部署可以根据CPU、内存使用率等参数自动扩展。

JumpServer需要较高的通信处理能力,部署标准容器无法很好地解决这一问题。 Kubernetes自身的特性允许Barrao机器快速扩展,可以处理大量的流量。

劣势

需要知道关于Kubernetes的事情。 JumpServer的可用性取决于Kubernetes集群,必须保证JumpServer和Kubernetes的可用性。

部署方案存储方案

典型的存储类型可能是网络共享存储类型,如CephFS、Cinder或NFS,也可能是公共云提供的存储卷类型。 例如,Azure公共云提供的Azure磁盘、Azure文件和AWS电子块。

使用公共云提供的存储卷,很容易维护。 网络共享存储必须建立和维护自己的环境。 JumpServer没有特别的要求。 此次Kubernetes部署使用了NFS网络共享存储。

网络计划

Kubernetes的网络模型假设所有Pod都位于可以直接连接的平坦网络空间中。 这是因为Kubernetes来自谷歌,谷歌云平台(GCE )提供网络模型作为基础设施,所以Kubernetes假设该网络已经存在。

开放源代码组件支持Flannel、Calico等容器网络模型。 与Flannel相比,Calico的效率更高,因为它基于IPtables规则进行路由转发,没有打包和解包过程。 这次Kubernetes的部署没有考虑效率问题,而是使用了Flannel网络插件。

镜像仓库方案

在Kubernetes群集中,所有容器APP应用程序都是基于镜像启动的。 建议在私有云环境中构建私有云镜像库以统一管理镜像,在公共云环境中直接使用云运营商提供的镜像库。

专用镜像库有两个选择。

Docker提供的注册镜像库可以参考官方网站的说明;

Harbor镜像仓库请参考官方网站的说明。

Docker提供的注册镜像库位于国外,传输不稳定。 Harbor在文档注册表中进行了企业范围的扩展,获得了更广泛的APP应用。 这些新的企业级功能包括管理用户界面、基于角色的访问控制、AD/LDAP集成和审核日志等,足以满足基本的企业需求。 因为这次是实验环境,镜像都在当地。

部署概述操作系统建议采用CentOS7系统或更高版本,CPU和内存至少为4酷睿、8GB,硬盘容量至少为200GB,主备用或群集模式,并且需要VIP。 建议使用Kubernetes版本v1.18或更高版本,存储选择NFS网络共享存储。

导入环境的说明

虚拟机服务器信息

部署Kubernetes群集(注意:如果已经有Kubernetes环境,请忽略此步骤) )。

Kubernetes集群推送部署

荐使用KubeOperator,可自动完成生产级别的Kubernetes集群部署。KubeOperator详细使用步骤可参考官方文档:

https://kubeoperator.io/docs/index.html。

部署步骤

① 创建Kubernetes集群,若已经准备好Kubernetes集群,可跳过此步骤。

将准备好的服务器录入到KuberOperator的“主机”列表后,在“集群”页面创建Kubernetes集群 。详细步骤参考官方文档:

https://kubeoperator.io/docs/index.html 。


② 准备NFS Server

■ 进入NFS主机安装NFS

yum install nfs-utils nfs4-acl-tools portmap

■ 配置挂载目录

# vi /etc/exports/nfs-share 172.16.0.0/16(rw,sync,no_root_squash)# 重新加载exportfs -ra

■ 查看状态

systemctl status nfs

③ 创建StorageClass

本次环境将使用NFS为Kubernetes集群提供持久化存储服务。通过KubeOperator创建StorageClass非常简单,可在Web页面完成StorageClass的创建。若需要使用其他类型的存储方案,可参考Kubernetes官方文档:

https://kubernetes.io/docs/concepts/storage/storage-classes/。



④ 部署JumpServer堡垒机

在Kubernetes集群上部署应用的传统方式是创建各种资源类型YAML文件,但是对于一个复杂的工程部署起来会非常的麻烦,并且难以维护。此时我们可以使用Helm/Chart进行应用的安装。使用Helm/Chart的好处在于我们不必为每个应用程序手动编写单独的YAML文件,只需创建一个Helm Chart就可以将应用部署到集群。


备注:以下操作均在Kubernetes的Master节点进行操作。

■ 准备Helm Chart

JumpServer官方已经提供了Chart文件,我们只需要将项目下载到本地,略做修改之后便可以使用。

# 克隆 JumpServer helm/chart 代码git clone https://github.com/jumpserver/helm.git

■ 在Kubernetes集群上面创建命名空间

# 创建命名空间kubectl create ns jms

■ 在Kubernetes集群上面创建MySQL

备注:若环境中有可用的MySQL数据库,可跳过此步骤。

# 使用 helm 安装 MySQL,并设置密码信息# registry.kubeoperator.io:8082 是一个 Docker 私有仓库地址,可不设置默认使用 docker.io# 添加 helm 仓库,需要连接外网helm repo add bitnami https://charts.bitnami.com/bitnamihelm repo updatehelm install jms-mysql bitnami/mysql -n jms --set global.imageRegistry=registry.kubeoperator.io:8082 --set global.storageClass=nfs --set auth.rootPassword=Password131 --set auth.database=jumpserver --set auth.username=jms --set auth.password=Password131

■ 在Kubernetes集群上创建Redis

备注:若环境中有可用的Redis,可跳过此步骤。

# 使用 helm 安装 Redis,并设置密码信息# 以下的 --set 操作也可以通过编辑 value.yaml 文件来完成helm install jms-redis bitnami/redis -n jms --set global.storageClass=nfs --set auth.enabled=true --set auth.password=PasswordRedis

■ 在Kubernetes集群上创建JumpServer

# 生成 JumpServer 的 secretKeycat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50# 生成 JumpServer 的 bootstrapTokencat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16# 使用 helm 安装JumpServer,并设置 MySQL 和 Redis 的连接信息。同时支持使用外部数据库# 以下的 --set 操作也可以通过编辑 value.yaml 文件来代替helm install jumpserver . -n jms --set core.config.secretKey=GxrLH7rewfsRN8B9Zl6MEGD50Uou4LF6UVsEIayGMhYll8dqmn --set core.config.bootstrapToken=ilR8RvAbK7lgRTxs --set global.storageClass=nfs --set externalDatabase.engine=mysql --set externalDatabase.host=jms-mysql --set externalDatabase.port=3306 --set externalDatabase.user=jms --set externalDatabase.password=Password131 --set externalDatabase.database=jumpserver --set externalRedis.host=jms-redis-master --set externalRedis.port=6379 --set koko.service.type=NodePort --set web.service.type=NodePort --set externalRedis.password=PasswordRedis# 执行后helm install 后,等待应用创建完成,可通过 kubectl 查看 JumpServer 的 pod 状态kubectl get pod -n jms

■ 访问JumpServer

# 获取 NodePort 端口kubectl get svc -n jms|grep webjumpserver-jms-web NodePort 192.168.254.34 <none> 80:30271/TCP 4m8s# 通过 Node 节点和 NodePort 随机端口浏览器访问http://node:30271

■ 卸载JumpServer

helm -n jms uninstall jms-mysqlhelm -n jms uninstall jms-redishelm -n jms uninstall jumpserver 总结

将JumpServer堡垒机搬到Kubernetes上,首先需要对Kubernetes有一定的了解,对JumpServer也要有一定了解。以上操作的所有相关资料参考均来自相关产品的官方网站。详细请参考:

JumpServer开源堡垒机官网:

https://www.jumpserver.org/

KubeOperator开源容器平台官网:

https://kubeoperator.io/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。