背景:

服务器的治理停留在xshell 登陆治理的时代,主机设施数量少,单人操作的时候还能满足应用。当初的主机数量不多不少也有大几十台。而后就面临的多人的登陆与治理。过来都是间接给账户明码。但这样就会面临操作审计的问题。尽管给的机器都是测试环境的,然而追溯操作人,审计也还是大问题。另外就是数据库的近程操作。小伙伴都应用navicat操作。也会面临很多的问题: 首位还是操作审计,其次就是近程IP的信赖,增加平安组这中操作就很烦人。迫切的须要一个两头操作的设施,就是堡垒机。jumpserser是一款优良的堡垒机。很早之前就尝试应用过。比方过后疫情开始的时候近程办公。因为一些公司窃密起因,只容许近程操作公司电脑进行工作,不容许用户上传下载,过后就应用了jumpserver治理(windows环境)。最近又看了一眼jumpserver的文档,发现反对了kubernetes and mysql的治理。正好体验一下呢!

jumpserver的简略装置

前提筹备:

参照官网文档:https://docs.jumpserver.org/zh/v3/

腾讯云cvm rocky9操作系统为例:

对于操作系统 rocky9 腾讯云服务器:

数据库的创立and受权:

早些时候创立的TDSQL-C数据库,创立了数据库and 用户,并受权,如下:



创立用户设置明码并受权:

创立redis 数据库 and设置明码:

在线装置:

自定义主机名:

首先先自定义一下主机名,集体习惯。也能够疏忽

hostnamectl set-hostname jumpserver

执行一键装置脚本

主线版本当初是v2 v3。这里间接装置了V3.10版本(latest,以后最新吧).当然了能够自定义初始化先把mysql, redis设置为咱们后面开明的。这里偷懒了。先一键装置,前面再去批改!
https://docs.jumpserver.org/zh/v3/installation/setup_linux_standalone/online_install/

curl -sSL https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh | bash


期待装置配置docker.下载docker 镜像,初始化数据库并启动容器:


期待容器running:

docker psjmsctl status


这个时候曾经默认能够web登陆了(当然了dns默认解析到了此CVM,域名形式拜访)。不先进入零碎,先做一下自定义配置再进入零碎........

自定义配置:

mysql and redis应用内部配置:

自定义批改config.txt中mysql redis配置:

vim /opt/jumpserver/config/config.txt


重启所有服务:

jmsctl命令拿来用了:

jmsctl restart

jmsctl status


有强迫症不想看到jms_mysql jms_redis服务?

jmsctl statusdocker stop jms_mysql jms_redis

web拜访并批改默认明码:

浏览器拜访自定义域名,默认用户名明码应该是admin admin?

批改自定义明码:



从新登陆控制台:

登陆页面显示不平安.......持续强迫症https!

https证书配置:

参照:https://kb.fit2cloud.com/?p=152
先上传证书到 /opt/jumpserver/config/nginx/cert/目录下:

批改/opt/jumpserver3/config/config.txt 开启https拜访:

jmsctl restartjmsctl status


https形式拜访web地址:

控制台根本是如下这样(图后截的疏忽):

jumpserver的简略应用:

比较关心罕用的资产治理:

尝试一下主机and数据库and 云服务(kubernetes)的治理!

主机为例:

创立资产

创立-抉择平台Linux(资产IP为10.0.4.18):

输出名称 IP/主机 节点抉择默认的/Default

增加账号,明码形式抉择了ssh密钥:

资产受权:

点击权限治理-资产受权,对10.0.4.18资源进行受权

点击提交:

切换到工作台验证:

左侧边栏,点击工作台切换:

web终端登陆验证:

持续增加一个node

开始认为一个账户能够用于多个资产尝试了一下失败了.....创立资产的时候还看到了模板,就想创立一个模板尝试一下:
首先创立一个账号模板:

创立10.0.4.68的资产抉择账号模板:

web cli登陆验证:

普通用户权限疏忽了就先

数据库的增加治理:

创立数据库资产与用户

资产治理-资产列表-数据库:

创立数据库资产,mysql为例(资源IP10.0.4.39):

增加资源,增加用户,提交:

测试数据库连贯

点击更多-测试。能够看到jumpserver与数据库失常连贯:

资产受权这里你也可能会有跟我一样的纳闷:
特意尝试了一下不增加资产but选定defult节点:

然而其实也是能够拜访的,左侧边栏-工作台-web终端:

web-cli or navicat操作数据库:

通过web-cli操作数据库:

mysql的后盾针对的是web-cli还是。当然了navicat能够生成一个5分钟的长期用户!

轻易用navicat登陆长期账户,操作几条命令看看:

当然了始终连着还好,断开超时后,就无奈登陆了!

会话审计

控制台左侧边栏-审计台

会话审计-会话记录and命令记录:

命令能够追溯:

当然了 如果能有web版的navicat这样的页面就更好了!能追溯到命令与操作人不必去每次给用户开平安组增加信赖IP,这样我曾经很知足了.......惟一不满的是命令记录不能依照资产进行分类

云服务的增加治理:

参照:https://baijiahao.baidu.com/s?id=1752070936393562982&wfr=spider&for=pc

确定集群连贯url

依据集群config文件 获取连贯url:

K8S集群管理权限的SA,并且绑定cluster-admin角色

参照: https://www.i7ti.cn/1410.html
cat jumpserver-admin.yaml

apiVersion: v1kind: ServiceAccountmetadata:  name: jumpserver-admin  namespace: kube-system---kind: ClusterRoleBindingapiVersion: rbac.authorization.k8s.io/v1metadata:  name: jumpserver-adminsubjects:  - kind: ServiceAccount    name: jumpserver-admin    namespace: kube-systemroleRef:  kind: ClusterRole  name: cluster-admin    #此处绑定集群管理员权限,请依据本身需要绑定权限,这里只是举个例子  apiGroup: rbac.authorization.k8s.io
kubectl apply -f jumpserver-admin.yaml

获取token令牌:

kubectl get secret -n kube-system |grep "jumpserver-admin"kubectl describe secret jumpserver-admin-token-zb8vm -n kube-system


注:以上操作在kubernetes控制台节点操作!

创立云服务资产

jumpserver控制台操作
资产治理-资产列表-云服务-新建-抉择平台-kubernetes

输出自定义名称 URL 节点等配置

增加账号,输出上一步获取的token,提交:

这里是没有测试的提交资源后:

资产受权:


输出相干配置,提交:

web cli终端测试连贯:

切换控制台到工作台:

web终端:

连贯名为develop的kubernetes集群:

轻易抉择一个clusternet-system namespace下pod 连贯一下:

普通用户的测试:

注:以kubernetes云服务为例!

创立普通用户

下面的步骤都是超级用户admin操作的,当初创立一个普通用户:
控制台-用户治理-用户列表-创立用户:

普通用户-zhangpeng创立-提交

创立用户组develop,将zhangpeng用户退出用户组:

留神:将zhangpeng用户在default用户组中剔除(后面好多受权针对的是用户组,创立新的组不便辨别)

kubernetes相干资源创立:

网上所有的文章根本都是错的,对于普通用户的,比方:JumpServer:晋升Kubernetes集群治理平安。然而普通用户的形式是不残缺的。上面操作一下,请参照:k8s联合jumpserver做kubectl权限管制 用户在多个namespaces的拜访权限 rbac权限管制 !

  1. 创立serviceaccount

    kubectl create sa develop-zhangpeng -n develop-xxxkubectl get sa -n develop-xxxxkubectl describe secrets/develop-zhangpeng-token-cddqx  -n develop-xxxx

  2. 创立集群级别资源权限并绑定serviceaccount

网上很多的文章都是只绑定了namespace级别的资源,but jumpserver不能间接到namespace级别。故须要绑定一下集群级别的资源权限:
cat jumpserver-admin-get-auth.yaml

 其实这里就是设置对k8s集群的一些权限的apiVersion: rbac.authorization.k8s.io/v1    # apikind: ClusterRole                           # 资源类型metadata:                                   # 元数据 ClusterRole 不受ns的限度,所以不必写ns  name: jumpserver-admin-get-auth              # ClusterRole 的名称,能辨别就行rules:- apiGroups:                                # apiGroups 就是api资源组,你kubectl get apiservice 就能够看到集群所有的api组  - ""                   # 我这里代表为空,就是api组外面有一个v1.   这样的  resources:             # 就是k8s资源的名称。kubectl api-resources 这个命令能够查看到,第一列是资源名称,就是能够写在这里的。                         # 第二列是简写,kubectl get 前面的能够简写。                         # 第三列是APIGROUP组                         # 第四列是是否属于NAMESPACED资源,就是你能够在ns上面看到的资源                         # 第五列是kind的时候写的名称                         # 资源还分子资源,前期会写一篇专门的文章介绍  - namespaces/status    # 这个是ns状态  - namespaces           # 这个是ns  - persistentvolumes    # pv  verbs:                 # verbs是定义动作的  - get                  # 就是能够查看ns的权限  - list  - watch- apiGroups:  - ""  resources:             # 这里定义的是能够查看node的权限,更新node的权限。  - nodes  - nodes/status  verbs:  - get  - list  - watch  - patch  - update- apiGroups:  - "storage.k8s.io"  resources:               # 这里定义的是能够查看sc的权限,因为咱们有后端的存储集群,他们能够对sc的所有权限  - storageclasses  - storageclasses/status  resourceNames:           # 因为sc属于集群资源,不同的业务方须要对本人的sc才有 全副权限。  - axersc                 # 所有这里能够指定对哪一个sc有全副权限  verbs:  - create  - delete  - deletecollection  - get  - list  - patch  - update  - watch

创立clusterrole apply yaml文件:

kubectl apply -f jumpserver-admin-get-auth.yaml

把下面定义的集群权限ClusterRole绑定给sa develop-zhangpeng:
cat jumpserver-admin-get-auth-clusterrolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBinding                   # ClusterRoleBinding 用于绑定集群权限的metadata:  name: jumpserver-admin-get-auth          # 名称  ClusterRoleBinding 不受ns的限度,所以没有nsroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole                        # 下面定义的ClusterRole名称  name: jumpserver-admin-get-authsubjects:- kind: ServiceAccount                     # 下面定义的sa名称  name: develop-zhangpeng  namespace: develop-xxxx
kubectl apply -f jumpserver-admin-get-auth-clusterrolebinding.yaml
  1. namespace资源的绑定

cat jumpserver-admin-auth.yaml

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:  name: jumpserver-admin-authrules:- apiGroups:  - ""  resources:            # 对pod的一些权限。  - pods/attach  - pods/exec           # exec pod  - pods/portforward    # 设置pod的转发  - pods/proxy  - secrets             # secrets的权限  - services/proxy  verbs:  - get  - list  - watch- apiGroups:  - ""  resources:  - serviceaccounts     # sa的权限  verbs:  - impersonate- apiGroups:  - ""  resources:  - pods  - pods/attach  - pods/exec  - pods/portforward  - pods/proxy  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - ""  resources:  - configmaps  - endpoints  - persistentvolumeclaims  - replicationcontrollers  - replicationcontrollers/scale  - secrets  - serviceaccounts  - services  - services/proxy  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - apps  resources:  - daemonsets  - deployments  - deployments/rollback  - deployments/scale  - replicasets  - replicasets/scale  - statefulsets  - statefulsets/scale  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - autoscaling  resources:  - horizontalpodautoscalers  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - batch  resources:  - cronjobs  - jobs  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - extensions  resources:  - daemonsets  - deployments  - deployments/rollback  - deployments/scale  - ingresses  - networkpolicies  - replicasets  - replicasets/scale  - replicationcontrollers/scale  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - policy  resources:  - poddisruptionbudgets  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - networking.k8s.io  resources:  - ingresses  - networkpolicies  verbs:  - create  - delete  - deletecollection  - patch  - update- apiGroups:  - metrics.k8s.io  resources:  - pods  verbs:  - get  - list  - watch- apiGroups:  - ""  resources:  - configmaps  - endpoints  - persistentvolumeclaims  - pods  - replicationcontrollers  - replicationcontrollers/scale  - serviceaccounts  - services  verbs:  - get  - list  - watch- apiGroups:  - ""  resources:  - bindings  - events  - limitranges  - pods/log  - pods/status  - replicationcontrollers/status  - resourcequotas  - resourcequotas/status  verbs:  - get  - list  - watch- apiGroups:  - apps  resources:  - controllerrevisions  - daemonsets  - deployments  - deployments/scale  - replicasets  - replicasets/scale  - statefulsets  - statefulsets/scale  verbs:  - get  - list  - watch- apiGroups:  - autoscaling  resources:  - horizontalpodautoscalers  verbs:  - get  - list  - watch- apiGroups:  - batch  resources:  - cronjobs  - jobs  verbs:  - get  - list  - watch- apiGroups:  - extensions  resources:  - daemonsets  - deployments  - deployments/scale  - ingresses  - networkpolicies  - replicasets  - replicasets/scale  - replicationcontrollers/scale  verbs:  - get  - list  - watch- apiGroups:  - policy  resources:  - poddisruptionbudgets  verbs:  - get  - list  - watch- apiGroups:  - networking.k8s.io  resources:  - ingresses  - networkpolicies  verbs:  - get  - list  - watch- apiGroups:  - authorization.k8s.io  resources:  - localsubjectaccessreviews  verbs:  - create- apiGroups:  - rbac.authorization.k8s.io  resources:  - rolebindings  - roles  verbs:  - create  - delete  - deletecollection  - get  - list  - patch  - update  - watch
kubectl apply -f jumpserver-admin-auth.yaml

rolebingding 绑定sa:
cat jumpserver-admin-auth-rolebinding.yaml

apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:  name: jumpserver-admin-auth  namespace: develop-xxxxroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: jumpserver-admin-authsubjects:- kind: ServiceAccount  name: develop-zhangpeng  namespace: develop-xxxxx
kubectl apply -f jumpserver-admin-auth-rolebinding.yaml

创立一般账号

账户治理-账号列表-增加账号develop-zhangpeng。明码形式令牌形式,复制kubernetes集群中刚创立的develop-zhangpeng的token!

资产受权:

权限治理-资产受权-创立资产受权规定:

留神受权这里的用户组!

登陆普通用户测试:

开了一个火狐浏览器登陆了普通用户zhangpeng(看设置的明码策略,可能第一次要批改明码!这里就间接疏忽了)

切换到工作台:

点击web终端:
呈现资源列表default资源树:

能够点击一下其余资产,默认是没有账户,无权限的:

点击develop kubernetes资源,点击连贯:

进入集群验证一下权限:

点击clusternet-system namespace or其余命名空间默认应该都是无权限的!只能关上develop-xxxx空间下的pod的shell:

这里和一般的namespace的受权是不一样的。个别的创立了用户权限绑定namespace就好了。然而在jumpserver这里肯定要记得集群的权限!

强调的:

  1. 用户 用户组的创立辨别
  2. 账户模板的应用
  3. kubernetes普通用户的受权
  4. 资产前面进行更具体的划分
  5. 其余的:ldap集成,存储应用对象存储。至于邮件的批改就疏忽了。近程利用都是企业版的性能也疏忽了
  6. kubernetes的纳管有点意犹未尽:是纳管了,可是用户还须要实时看日志阿?我感觉我还是不会用jumpserver纳管kubernetes......