Please enable Javascript to view the contents

在 Kubernetes 部署 Jumpserver 跳板机

 ·  ☕ 3 分钟

1. 部署 Jumpserver

需要提前准备好 StorageClass,用于存储 Jumpserver 的数据。除了下面提到的数据库,各个组件 jms-core、jms-web、jms-koko、jms-lion、jms-chen 都需要一个 PV 存储。

1.1 部署 MySQL

参考 https://github.com/shaowenchen/hubimage/blob/main/database/mysql8.yaml ,部署 MySQL。

需要调整一下 StorageClass 字段为集群中的可用值。

1.2 部署 Redis

参考 https://github.com/shaowenchen/hubimage/blob/main/database/redis7.yaml ,部署 Redis。

需要调整一下 StorageClass 字段为集群中的可用值。

3. 部署 Jumpserver

  • 添加 Helm 仓库
1
2
helm repo add jumpserver https://jumpserver.github.io/helm-charts
helm repo update
  • 修改 values.yaml

https://github.com/jumpserver/helm-charts/blob/main/charts/jumpserver/values.yaml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
global:
  storageClass: ""

externalDatabase:
  engine: mysql
  host:
  port:
  user:
  password:
  database:

externalRedis:
  host:
  port:
  password: ""

这里主要需要修改的是 global.storageClassexternalDatabaseexternalRedis

如果部署的集群对 docker hub 有访问限制,还需要修改 imageRegistryimageOwner。当然,还可以直接去 https://github.com/jumpserver/helm-charts/releases 下载最新的 release 版本,解压之后将镜像地址修改为自己的私有仓库地址。

  • 安装 Jumpserver
1
helm install jms-k8s jumpserver/jumpserver -n jumpserver -f values.yaml

卸载命令

1
helm uninstall jms-k8s -n jumpserver
  • 新增访问入口

如果使用 NodePort 方式访问,除了修改 jumpserver-jms-web 为 NodePort 类型之外,还需要给 jumpserver-jms-core 添加环境变量 DOMAINS 允许新的访问入口,否则会出现如下提示:

1
2
3
配置文件有问题,无法登录,请联系管理员或查看最新文档
如果你是管理员,可以更新配置文件解决,设置配置项
DOMAINS=x.x.x.x:x

编辑 jumpserver-jms-core :

1
kubectl -n jumpserver edit deployments.apps jms-k8s-jumpserver-jms-core

添加环境变量:

1
2
- name: DOMAINS
  value: x.x.x.x:x
  • 首次访问

首次访问需要重置 admin 用户的密码是 ChangeMe,登录之后会提示修改密码。

2. 资源导入

2.1 添加节点

点击页面左侧的 【资产管理 - 资产列表】,在根节点 Default 右键新节点。

节点其实就是给资产分组,这里新建一个节点,命名为 worker。

2.2 创建访问主机的账号

点击页面左侧的 【账号模板 】 创建一个特权用户 root。

2.3 脚本添加主机

  • 设置环境变量
1
2
export JUMPSERVER="http://x.x.x.x:x"
export JUMPSERVER_PASSWORD="xxx"
  • 获取 Token
1
2
3
4
5
curl -X POST "${JUMPSERVER}/api/v1/authentication/auth/" \
-H 'Content-Type: application/json' \
-d "{\"username\": \"admin\", \"password\": \"${JUMPSERVER_PASSWORD}\"}"

{"token":"xxx"}
  • 设置 Token
1
export JUMPSERVER_TOKEN="xxx"
  • 设置导入的分组和模板账号

点击页面左侧的 【账号模板 】 中找到 root 账号,点击进入,即可看到账户模板的 id。

1
export JUMPSERVER_ACCOUNT_ID="xxx"
1
2
3
4
export GROUP_NAME="worker"
curl -s -H "Authorization: Bearer $JUMPSERVER_TOKEN" "$JUMPSERVER/api/v1/assets/nodes/" | jq -r --arg GROUP_NAME "$GROUP_NAME" '.[] | select(.name==$GROUP_NAME) | .id'

xxx

设置 GROUP_ID

1
export GROUP_ID="xxx"
  • 编写脚本
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
create_host() {
    HOST_NAME="$1"
    IP="$2"

    data=$(cat <<EOF
{
    "name": "$HOST_NAME",
    "address": "$IP",
    "platform": "1",
    "protocols": [{"name": "ssh", "port": 22}],
    "is_active": true,
    "nodes": ["$GROUP_ID"],
    "accounts": [{"template": "$JUMPSERVER_ACCOUNT_ID"}]
}
EOF
    )

    response=$(curl -s -X POST \
        -H "Authorization: Bearer $JUMPSERVER_TOKEN" \
        -H "Content-Type: application/json" \
        -d "$data" \
        "$JUMPSERVER/api/v1/assets/hosts/")

    echo "Result: $response"
}
  • 创建主机
1
create_host "x.x.x.x" "x.x.x.x"

2.4 批量添加主机

1
2
3
kubectl get nodes -o wide | awk 'NR>1 {print $6}' | grep -v "<none>" | while read ip; do
    create_host $ip $ip
done

2.5 重置 admin 密码

  • 进入 jumpserver core 容器
1
kubectl -n jumpserver exec -it jms-k8s-jumpserver-jms-core-676b986bdd-6bpp8  -- bash
  • 重置密码
1
cd /opt/jumpserver/apps
1
python manage.py changepassword admin

3 授权用户访问

这里涉及到三个对象:

  • 用户
  • 资产,主机、数据库、集群等资源
  • 用户与资产的授权规则

如果是对单个用户授权,需要进行一下操作:

  1. 在 【用户管理-用户列表】 中添加用户
  2. 在 【授权管理-资产授权】 中添加授权规则

创建授权规则时,选择用户,选择资产即可。

如果是对多个用户授权,可以创建一个用户组,将用户添加到用户组中,然后对用户组授权。

如果是对大批量的资源授权,需要将这些资源放到一个节点下,然后对用户授权这个节点。

4. 参考


微信公众号
作者
微信公众号