linux怎么查看本机内存大小
343
2022-10-20
在Kubernetes上快速部署一个生产可用的JumpServer堡垒机
在Kubernetes上快速部署一套JumpServer堡垒机
最近看到JumpServer堡垒机又出新版本了,目前最新版为v2.21.0,查看了官网更新日志,新版本中修复了不少bug,同时也增加了不少新功能。记录此篇博文的主要目的有两点:其一是为了体验新版本JumpServer的新功能,其二是为了熟练使用k8s云原生技术。
JumpServer部署方式
单机模式
单机部署是指所有的服务(包含数据库服务)都部署在一台虚拟机或者主机上。所有的数据没有备份,需要手动做好数据库的定期备份。此模式适用于一般开发测试环境。
主备模式
主备部署是指所有的服务(包含数据库服务)都采用主备模式进行部署。该模式能够保证节点故障自动切换,MySQL的主配置简单,故障恢复技术难度较低,一般适用于生产环境要求高可用,资产数量和并发数不多,故障无缝切换的场景。
集群模式
集群模式是基于主备模式基础上的升级版,是指所有的服务(包含数据库服务)均采用分布式进行部署,包含MySQL、Redis等。该模式一般适用于大规模资产场景、高并发要求的高性能场景、混合云/多DC/分支机构场景等。
kubernetes模式
此种模式一般适用于用户拥有Kubernetes环境,或者是容器很多、业务庞大,存在困难的编排、管理和调度问题时也可以考虑通过Kubernetes部署来统一管理JumpServer。
在Kubernetes环境下部署JumpServer
Kubernetes部署的优劣势
优势
不再需要有专门的高可用方案,Kubernetes集群自身可以完美解决这点。扩容也不需要人工操作,Kubernetes Deployment的HPA可以解决。Kubernetes部署可以根据CPU、内存使用率等参数进行自动扩展。
劣势
需要对Kubernetes有一定了解,JumpServer的可用性依赖于Kubernetes集群,需要同时保障JumpServer和Kubernetes的可用性。
部署方案
存储方案
用的存储有CephFS、glusterfs、NFS等网络共享存储类型,本次部署采用ceph分布式存储解决方案。
网络方案
开源组件支持容器网络模型,包括Flannel、Calico等,本次环境k8s环境中使用Calico网络插件。
镜像仓库方案
在Kubernetes集群中,容器应用都是基于镜像启动的。在私有云环境下建议搭建私有云镜像库对镜像进行统一管理,在公有云环境中可以直接使用云服务商提供的镜像库。
部署环境简介
操作系统为CentOS7系统或者以上,CPU和内存推荐4Core、8GB或者以上,本环境kubernetes集群为一个master节点,9个work节点,存储选择ceph分布式存储。
组件 | 版本 |
Kubernetes | v1.20.4 |
JumpServer | v2.21.0 |
Docker | 19.03.9 |
部署步骤
a、准备kubernetes集群(略)
b、准备ceph存储,可参考我之前的博文Rook部署ceph分布式存储
c、部署Jumpserver堡垒机
在Kubernetes集群上部署应用的传统方式是创建各种资源类型YAML文件,但是对于一个复杂的工程部署起来会非常的麻烦,并且难以维护。此时我们可以使用Helm/Chart进行应用的安装。使用Helm/Chart的好处在于我们不必为每个应用程序手动编写单独的YAML文件,只需创建一个Helm Chart就可以将应用部署到集群。
准备Helm Chart
JumpServer官方已经提供了Chart文件,我们只需要将项目下载到本地,略做修改之后便可以使用。
# 添加jumpserver官方Chart仓库[root@10-x-x-140 ]# helm repo add jumpserver has been added to your repositories[root@10-x-x-140 ]# helm repo listNAME URL stable elastic jumpserver 更新Chart仓库[root@10-x-x-140 ~]# helm repo updateHang tight while we grab the latest from your chart repositories......Successfully got an update from the "elastic" chart repository...Successfully got an update from the "stable" chart repository...Successfully got an update from the "jumpserver" chart repository...Successfully got an update from the "bitnami" chart repositoryUpdate Complete. ⎈ Happy Helming!⎈
署mysql和redis
如果没有相当牛逼解决数据库问题的实力,数据库建议不要部署在k8s集群内部,本次为了方便,使用helm部署在k8s集群内。
# 部署mysql[root@10-x-x-140 ~]# helm pull --untar bitnami/mysql[root@10-x-x-140 ~]# cd mysql[root@10-x-x-140 mysql]# kubectl create ns jms[root@10-x-x-140 mysql]# helm install jms-mysql bitnami/mysql -n jms \> --set global.storageClass=rook-cephfs \> --set auth.rootPassword=Password@mysql \> --set auth.database=jumpserver \> --set auth.username=jumpserver \> --set auth.password=Password@mysql以上部署中的set设置的参数,也可以直接编辑values.yaml,对应进行修改,修改完后执行如下命令可以实现同样的部署效果:[root@10-x-x-140 mysql]# helm install jms-mysql . -n jms# 部署redis[root@10-x-x-140 ~]# helm pull --untar bitnami/redis[root@10-x-x-140 ~]# cd redis[root@10-x-x-140 redis]# helm install jms-redis bitnami/redis -n jms \> --set global.storageClass=rook-cephfs \> --set auth.enabled=true \> --set auth.password=Password@Redis以上部署中的set设置的参数,也可以直接编辑values.yaml,对应进行修改,修改完后执行如下命令可以实现同样的部署效果:[root@10-x-x-140 redis]# helm install jms-redis . -n jms
署jumpserver
[root@10-x-x-140 ~]# helm pull --untar jumpserver/jumpserver[root@10-x-x-140 ~]# cd jumpserver[root@10-x-x-140 jumpserver]# helm install jumpserver . -n jms \> --set core.config.secretKey=GxrLH7rewfsRN8B9Zl6MEGD50Uou4LF6UV \> --set core.config.bootstrapToken=ilR8RvAbK7lgRTxs \> --set global.storageClass=rook-cephfs \> --set externalDatabase.engine=mysql \> --set externalDatabase.host=jms-mysql \> --set externalDatabase.port=3306 \> --set externalDatabase.user=jumpserver \> --set externalDatabase.password=Password@mysql \> --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=Password@Redis以上部署中的set设置的参数,也可以直接编辑values.yaml,对应进行修改,修改完后执行如下命令可以实现同样的部署效果:[root@10-x-x-140 jumpserver]# helm install jumpserver . -n jms
执行后helm install 后,等待应用创建完成,可通过 kubectl 查看 JumpServer 的资源状态
[root@10-x-x-140 ~]# kubectl get pod,svc,pvc,ingress -n jmsNAME READY STATUS RESTARTS AGEpod/jms-mysql-0 1/1 Running 0 10hpod/jms-redis-master-0 1/1 Running 0 10hpod/jms-redis-replicas-0 1/1 Running 0 10hpod/jms-redis-replicas-1 1/1 Running 0 10hpod/jms-redis-replicas-2 1/1 Running 0 10hpod/jumpserver-jms-celery-7cb468b7bf-8cgnm 1/1 Running 0 10hpod/jumpserver-jms-celery-7cb468b7bf-jbpqt 1/1 Running 0 10hpod/jumpserver-jms-core-6b86cc6f9-5h2kb 1/1 Running 0 10hpod/jumpserver-jms-core-6b86cc6f9-8dfpx 1/1 Running 0 10hpod/jumpserver-jms-koko-64d7bd6cf9-nq4vs 1/1 Running 0 10hpod/jumpserver-jms-lion-75df897477-hlmzl 1/1 Running 0 10hpod/jumpserver-jms-magnus-7bd6b7845c-cf6xb 1/1 Running 0 10hpod/jumpserver-jms-omnidb-84896885b5-5bjkz 1/1 Running 0 10hpod/jumpserver-jms-web-54b565f67-c4vdd 1/1 Running 0 10hpod/jumpserver-jms-web-54b565f67-cztxb 1/1 Running 0 10hpod/jumpserver-jms-web-54b565f67-m7dcg 1/1 Running 0 10hpod/jumpserver-jms-xrdp-d6c646f7-6zhfg 1/1 Running 0 10hNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/jms-mysql ClusterIP 10.0.0.80
从以上命令输出结果可以看出已成功部署完成。
可通过在浏览器中输入:http://NODE_IP:31574进行访问测试,或者输入http://test.jumpserver.org进行访问测试(需要先设置hosts解析)
初始用户名/密码:admin/admin,第一次登录,会强制要求修改密码
按提示修改完密码,即可使用修改后的密码进行登录
总结
将JumpServer堡垒机搬到Kubernetes上,首先需要对Kubernetes有一定的了解,对JumpServer也要有一定了解。以上操作的所有相关资料参考均来自相关产品的官方网站。
GitHub地址:https://github.com/jumpserver/helm-charts
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~