操作指南|在kubernetes集群上快速部署jumpserver开源堡垒机(代码片段)

FIT2CLOUD飞致云 FIT2CLOUD飞致云     2022-12-31     801

关键词:

在8月25日的直播中,我们给大家实际演示了在Kubernetes集群上快速部署JumpServer的全过程。作为全球首款完全开源的堡垒机,容器化部署一直是JumpServer堡垒机的特色功能之一。

基于本次直播,我们为大家整理了JumpServer容器化部署的操作文档,旨在为广大用户的实际操作提供指引。《在Kubernetes集群上快速部署JumpServer》直播回顾请访问 :

https://live.vhall.com/v3/lives/subscribe/236412036。

JumpServer部署方式

■ 单机模式

单机部署是指所有的服务(包含数据库服务)都部署在一台虚拟机或者主机上。所有的数据没有备份,需要手动做好数据库的定期备份。此模式适用于一般开发测试环境,仅为满足审计要求,采用单台一体机等;

■ 主备模式

主备部署是指所有的服务(包含数据库服务)都采用主备模式进行部署。该模式能够保证节点故障自动切换,MySQL的主配置简单,故障恢复技术难度较低,一般适用于生产环境要求高可用,资产数量和并发数不多,故障无缝切换的场景;

■ 集群模式

集群模式是基于主备模式基础上的升级版,是指所有的服务(包含数据库服务)均采用分布式进行部署,包含MySQL、Redis等。该模式一般适用于大规模资产场景、高并发要求的高性能场景、混合云/多DC/分支机构场景等;

■ Kubernetes模式

此种模式一般适用于用户拥有Kubernetes环境,用户其他业务的容器均通过Kubernetes进行编排的场景。或者是容器很多、业务庞大,存在困难的编排、管理和调度问题时也可以考虑通过Kubernetes部署来统一管理JumpServer。

在Kubernetes环境下部署JumpServer

  1. Kubernetes部署的优劣势

■ 优势

不再需要有专门的高可用方案,Kubernetes集群自身可以完美解决这点。扩容也不需要人工操作,Kubernetes Deployment的HPA可以解决。Kubernetes部署可以根据CPU、内存使用率等参数进行自动扩展。

JumpServer需要具备高流量的处理能力,标准容器部署无法很好地解决这一点。Kubernetes自身的特性可以让堡垒机实现快速扩容,处理大流量。

■ 劣势

需要对Kubernetes有一定了解,JumpServer的可用性依赖于Kubernetes集群,需要同时保障JumpServer和Kubernetes的可用性。

  1. 部署方案

■ 存储方案

常用的存储有CephFS、Cinder、NFS等网络共享存储类型,或者公有云提供的存储卷类型,譬如Azure公有云提供的AzureDisk、AzureFile,AWS的Elastic BlockStore等。

使用公有云提供的存储卷,维护起来比较方便,网络共享存储需要自己搭建环境并维护。JumpServer没有特别要求。本次Kubernetes部署使用的是NFS网络共享存储。

■ 网络方案

Kubernetes的网络模型假定了所有Pod都在一个可以直接连通的扁平网络空间中。这是因为Kubernetes出自Google,而在GCE(Google Cloud Platform)中是提供了网络模型作为基础设施的,所以Kubernetes就假定这个网络已经存在。

开源组件支持容器网络模型,包括Flannel、Calico等。由于Calico是根据IPtables规则进行路由转发,并没有进行封包、解包的过程,这和Flannel比起来效率就会更快一些。本次Kubernetes部署暂未考虑效率问题,使用的是Flannel网络插件。

■ 镜像仓库方案

在Kubernetes集群中,容器应用都是基于镜像启动的。在私有云环境下建议搭建私有云镜像库对镜像进行统一管理,在公有云环境中可以直接使用云服务商提供的镜像库。

私有镜像库有两种选择:

Docker提供的Registry镜像库,可以参考官网的相关说明;

Harbor镜像仓库,可以参考官网的相关说明。

Docker提供的Registry镜像库在国外,传输不稳定。Harbor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用。这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本的企业需求。由于本次是实验环境,所以镜像都是在本地。

  1. 部署环境简介

操作系统为CentOS7系统或者以上,CPU和内存推荐4Core、8GB或者以上,硬盘容量推荐200GB或者以上,主备模式或者集群模式,需要VIP。Kubernetes版本建议大于等于v1.18版本,存储选择NFS网络共享存储。

■ 部署环境说明


■ 虚拟机服务器信息


■ 部署Kubernetes集群(注:如已经有Kubernetes环境可忽略此步骤)

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

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

  1. 部署步骤

① 创建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/bitnami
helm repo update
helm 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 的 secretKey
cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50
# 生成 JumpServer 的 bootstrapToken
cat /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 web
jumpserver-jms-web    NodePort    192.168.254.34    <none>        80:30271/TCP        4m8s
# 通过 Node 节点和 NodePort 随机端口浏览器访问
http://node:30271

■ 卸载JumpServer

helm -n jms uninstall jms-mysql
helm -n jms uninstall jms-redis
helm -n jms uninstall jumpserver

总结

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

JumpServer开源堡垒机官网:

https://www.jumpserver.org/

KubeOperator开源容器平台官网:

https://kubeoperator.io/

操作指南|通过jumpserver实现kubernetes运维安全审计

...ubernetes集群上快速部署JumpServer的方法步骤,可参见《操作指南|在Kubernetes集群上快速部署JumpServer开源堡垒机》一文。一、Kubernetes运维审计现状Kubernetes是一种可自动实施Linux容器操作的开源平 查看详情

使用kubeadm快速部署一个k8s集群

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Master节点$kubeadminit#将一个Node节点加入到当前集群中$kubeadmjoin<Master节点的IP和端口>1.安装要求在... 查看详情

快速搭建kubernetes高可用集群(3master+3worker+负载均衡)

参考技术Akubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,通过kubeadm的方式安装集群比二进制的方式安装高效不少。建议初次使用k8s使用此方式安装,二进制的方式会很快令人失去信心。在开始之前,部署Kubernetes集... 查看详情

kubernetes(k8s)centos7和8快速部署(代码片段)

Kubernetes快速部署kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Master节点$kubeadminit#将一个Node节点加入到当前集群中$kubeadmjoin<Master节点的IP和... 查看详情

快速搭建kubernetes容器集群平台(kubeadm)

kubeadm简介kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署: #创建一个Master节点kubeadminit#将一个Node节点加入到当前集群中kubeadmjoin<Master节点的IP和端口> 1.... 查看详情

在 Kubernetes 集群上部署 zuul 代理

】在Kubernetes集群上部署zuul代理【英文标题】:Deployingzuulproxyonkubernetescluster【发布时间】:2019-03-1922:14:48【问题描述】:我在Linux上配置了一个Kubernetes集群。对此,我想配置zuul代理。为了部署zuul,我使用来自dockerhub的zuuldocker镜... 查看详情

使用kubeadm快速部署一个k8s集群(亲测有效)

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Master节点$kubeadminit#将一个Node节点加入到当前集群中$kubeadmjoin<Master节点的IP和端口>安装要求在... 查看详情

kubeoperator入门

...VMware、Openstack或者物理机上规划、部署和运营生产级别的Kubernetes集群。KubeOperator是JumpServer明星开源团队在Kubernetes领域的的又一全新力作。KubeOperator的产品架构如图:KubeOperator的技术优势按需创建:调用云平台API,一键快速创建... 查看详情

kafka快速入门——kafka集群部署(代码片段)

Kafka快速入门(六)——Kafka集群部署一、Kafka集群部署方案规划1、操作系统选择通常,生产环境应该将Kafka集群部署在Linux操作系统上,原因如下:(1)Kafka客户端底层使用了Java的selector,selector在Linux上的实现机制是epoll,而在W... 查看详情

kubernetes多节点二进制部署(代码片段)

Kubernetes多节点二进制部署一、部署master02节点修改主机名,关闭防火墙在k8smaster01上操作在k8smaster02上操作二、部署负载均衡1.配置nginx的官方在线yum源,配置本地nginx的yum源2.部署keepalived服务3.修改k8snode节点上的bootstrap.kub... 查看详情

kubernetes(k8s)生产级实践指南从部署到核心应用

...介绍、课程的学习规划、高效学习的方式方法等。第2章kubernetes快速入门【k8s必知必会】本章中将从核心概念、架构设计、认证授权以及集群搭建方案对比几方面,带领大家快速掌握kubernetes的重要知识点,助力快速入门。第3章... 查看详情

使用kubeadm快速部署一个k8s集群(代码片段)

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署:#创建一个Master节点$kubeadminit#将一个Node节点加入到当前集群中$kubeadmjoin<Master节点的IP和端口>1.安装要... 查看详情

Dockerize vue js前端和spring boot后端并部署在kubernetes集群上

】Dockerizevuejs前端和springboot后端并部署在kubernetes集群上【英文标题】:Dockerizevuejsfrontendandspringbootbackendanddeployonkubernetescluster【发布时间】:2020-12-2207:01:36【问题描述】:我已经开发了springboot后端和vuejs前端我可以成功部署springb... 查看详情

kubernetes节点服务搭建————二进制部署|单master节点配置(一)(etcd和flannel)(代码片段)

文章目录常见的K8s按照部署方式Kubernetes二进制部署部署etcd集群master01上操作部署在node节点上修改配置部署Docker引擎flannel网络配置常见的通信方式flannel的工作流程flannel的搭建部署总结常见的K8s按照部署方式MinikubeMinikube是一个工... 查看详情

在windows电脑上配置kubectl远程操作kubernetes

欢迎访问我的GitHub本篇概览Kubernetes集群经常部署在Linux环境,而本机环境经常是Windows,除了ssh登录到kubernetes所在机器进行操作,也可以在本机配置kubectl,来远程操作服务器上的kubernetes。环境信息kubernetes:1.14.0kubectl:1.7.0kuberne... 查看详情

高可用集群篇--k8s快速入门及集群部署(代码片段)

...)--K8S快速入门及集群部署一、K8s快速入门1.1简介1.1.1Kubernetes是什么1.1.2为什么要使用Kubernetes1.1.3Kubernetes不是什么1.1.4Kubernetes工作示例1.2架构原理&核心概念1.2.1整体主从方式1.2.2Master节点架构1.2.3Node节点架构1.3完整概念1.4... 查看详情

本地快速搭建kubernetes单机版实验环境(含问题解决方案)(代码片段)

Kubernetes是一个容器编排系统,用于自动化应用程序部署、扩展和管理。本指南将介绍Kubernetes的基础知识,包括基本概念、安装部署和基础用法。一、什么是Kubernetes?Kubernetes是Google开发的开源项目,是一个容器编... 查看详情

vivo大规模kubernetes集群自动化运维实践

...据中心管理多个大规模的k8s集群是我们面临的关键挑战。kubernetes的节点需要对os、docker、etcd、k8s、cni和网络插件的安装和配置,维护这些依赖关系繁琐又容易出错。以前集群的部署和扩缩容主要通过ansible编排任务,黑屏化操作... 查看详情