找回密码
 注册
楼主: admin

jumpserver集群模式部署

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:11 | 显示全部楼层
部署 Elasticsearch 服务⚓︎
" g8 N+ m( }- @6 g% m% P提示; n4 Q. r. \9 _

; _' h' x0 m' o/ m$ y) v+ S集群部署请参考 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)
5 O5 c4 m2 D% X( b1 准备工作⚓︎
: R! J. z1 \+ W! W& ~7 o0 n0 p. h1.1 环境信息⚓︎
* o# U9 [4 I+ J( qElasticsearch 服务器信息如下:
8 ~# L1 t/ |" _
, F6 k. O% r3 Z9 R192.168.10.51" ]$ y1 Z0 {. b- {  e2 i
2 安装配置 Docker 环境⚓︎  k+ Z; G  [  _) k* E1 r* D+ I3 S
2.1 安装 Docker⚓︎
0 Y& R1 P& u) i0 j
& b9 W) X% v4 I& Q2 J. B$ R" pyum install -y yum-utils device-mapper-persistent-data lvm2. Y3 a0 |4 j  N! Z' \4 f
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ y9 ~0 `: r4 N+ a8 V& Y0 Q  P3 xsed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo' A  ~3 L+ S. a
yum makecache fast
$ m- H; c; v" l; E1 B' V; q1 @yum -y install docker-ce
! u; j7 e. Q  N! Y/ Z) G/ ~2.2 配置 Docker⚓︎- _4 `2 {( g( o; _, k

, S; F* [. _! h6 S, ]mkdir /etc/docker/
. s/ S) r; B% Hvi /etc/docker/daemon.json
- ?4 F- i. b+ T. l* F; }/ ]+ J
! F- Y; g) w( N, \, @{  ~0 x8 s) ?8 z! ]4 K* C
  "live-restore": true,
7 Y/ G: L5 n6 L: \  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],: g9 @+ ?) N4 m- e4 F5 W* Q
  "log-driver": "json-file",
% Z1 i* w0 @' V  "log-opts": {"max-file": "3", "max-size": "10m"}, {9 g. f& f% G) {) R3 h
}8 Y* u$ |3 B! ?5 ]* T! K2 u: [
2.3 启动 Docker⚓︎- L$ j0 z) S9 y" d) u7 n3 P
0 G# w% p( ]3 a4 A! M3 g+ X% p
systemctl enable docker# a0 L: A5 e" p" `4 h9 z1 @/ d
systemctl start docker4 \& H2 J+ E1 r6 \9 D  G7 L5 s
3 安装配置 Elasticsearch⚓︎" N( F2 e4 P8 {$ V
3.1 下载 Elasticsearch 镜像⚓︎
& [% k) o; l, C. Q$ s5 H7 o5 Q# }8 A  _5 Z" e
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6
* X4 _- K' k5 ]# `& @5 B' c$ p8 T' m9 A$ V
7a0437f04f83: Pull complete' [8 J- i; R( Q4 e9 i  V) N
7718d2f58c47: Pull complete2 E- _! H% L% U2 ?0 |
cc5c16bd8bb9: Pull complete, I" _0 T" W$ t4 e9 @: y/ ^
e3d829b4b297: Pull complete
; o; @! B, _, L; R! W$ Y/ W1ad944c92c79: Pull complete
1 f+ M/ D7 e# F' ]373fb8fbaf74: Pull complete
3 l; E2 O! O0 Z9 R5 z1 O( D( K4 g5908d3eb2989: Pull complete" j$ N) m; T. {: L3 m! D* B+ w
Digest: sha256:81c126e4eddbc5576285670cb3e23d7ef7892ee5e757d6d9ba870b6fe99f1219
2 [  x$ C* j7 }6 S  X* b7 Y! S* z4 D6 wStatus: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.17.64 |% _4 V  z9 g4 N5 ?$ h9 J
docker.elastic.co/elasticsearch/elasticsearch:7.17.6
# C8 a8 {* ]7 f% I8 a1 b$ D3 {/ l2 J5 S( D, h" V+ q
3.2 Elasticsearch 持久化数据目录创建⚓︎/ L5 e* r9 T0 Z7 [, f
; P1 r+ X0 @# z7 J% [9 _2 L
mkdir -p /opt/jumpserver/elasticsearch/data /opt/jumpserver/elasticsearch/logs
# u. n2 e- u1 [( W# X, ], {9 ]3.3 启动 Elasticsearch 服务⚓︎
9 s" k$ A) _0 ]1 D
+ o8 u) q7 L5 v) Z2 {## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失
! l* k9 U0 D3 \2 }# 9200                                  # Web 访问端口
) A( r* r$ X$ T  q6 Z5 L3 j: a# 9300                                  # 集群通信
3 {5 q' B( Z1 p; I+ r4 v# discovery.type=single-node            # 单节点; E2 a% i% N% i+ z
# bootstrap.memory_lock="true"          # 锁定物理内存, 不使用 swap
* P! A1 N/ R+ o3 V1 W- m# xpack.security.enabled="true"         # 开启安全模块
" m1 q( n. l2 Y; ~8 y0 O" h8 U8 k  F# TAKE_FILE_OWNERSHIP="true"            # 自动修改挂载文件夹的所属用户
! n$ t4 V% c- x( R( Z# ES_JAVA_OPTS="-Xms512m -Xmx512m"      # JVM 内存大小, 推荐设置为主机内存的一半- T" \" O8 P" Y5 D( y  ?) }
# elastic                               # Elasticsearch 账号2 e* u; t. b- j
# ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q     # Elasticsearch 密码
' d- p+ _+ _8 B$ J# A$ s2 r$ Q' J9 m. u% F7 h6 l5 G' M& N3 b
docker run --name jms_es -d -p 9200:9200 -p 9300:9300 -e cluster.name=docker-cluster -e discovery.type=single-node -e network.host=0.0.0.0 -e bootstrap.memory_lock="true" -e xpack.security.enabled="true" -e TAKE_FILE_OWNERSHIP="true" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q -v /opt/jumpserver/elasticsearch/data:/usr/share/elasticsearch/data -v /opt/jumpserver/elasticsearch/logs:/usr/share/elasticsearch/logs --restart=always docker.elastic.co/elasticsearch/elasticsearch:7.17.6
) q* L' Q( C- I% F% V2 U3.4 在 JumpServer 中配置 Elasticsearch⚓︎; y+ ?5 H" |( O! P. O/ C
访问 JumpServer Web 页面并使用管理员账号进行登录。
' a0 ^! U9 {: [. a点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [命令存储] 下方选择 [创建] 选择 [Elasticsearch], N! }4 k& r* ~, P2 B
根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],命令存储选择 [jms-es],提交。
# z: j# p: `% o7 }' B* [' C选项: X8 P( H9 r$ Y4 v, c

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:12 | 显示全部楼层
注意事项⚓︎
+ P) D( l% Z+ u. }$ V) o1 关于集群模式的环境升级⚓︎- F8 C2 Y% f+ D0 q, i. v! M2 y* U
更新前请一定要做好备份工作# Q+ D$ R1 ]( G: M% u, \) @0 ]. I
# x/ c9 z$ p: X) d. a4 l
升级前请关闭所有 JumpServer 节点。
) R, y5 T% G2 O在任意一个 JumpServer 节点按照升级文档完成升级操作。
) ]" b, ^4 E" D# x/ }& S8 D仔细检查该节点升级过程确保无异常。
1 u4 ^& }1 s* a9 ^* b7 H然后按照升级文档对其他 JumpServer 节点升级即可。
& @0 O9 H3 A9 q& |( _4 H3 o从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录。# C0 P: f( E% t0 r
7 o! L$ B' g( Q- b( O+ U* q! Y" W
cd /opt
; B% i- E6 ?+ Y* u( Btar -xf jumpserver-offline-installer-v3.0.3-amd64-246.tar.gz2 T) U9 Q9 X4 i! D% z6 G$ o
cd jumpserver-offline-installer-v3.0.3-amd64-246
1 x! V. E& x& B' \1 S1 P' z
) s2 ]3 y  W! p7 l% V1 {# 额外节点可以设置 SKIP_BACKUP_DB=1 跳过数据库备份, 第一个升级节点不要跳过备份
9 G7 q+ Q3 v6 zexport SKIP_BACKUP_DB=1& w5 s- p6 Q3 W& _- Z
./jmsctl.sh upgrade& @. o/ h& y1 g% A' `0 V, r4 ?# H
./jmsctl.sh start
3 W- [; G1 l$ W/ O  r9 {

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:13 | 显示全部楼层
在线安装⚓︎5 ~& D' T) x  I3 @; p! ]% \) B
1 环境要求⚓︎; m1 n7 ~9 E3 R( z* |3 M2 V
Kubernetes 1.20+; _9 M6 Z) v5 K$ Y
Helm 3.0. a5 M% D+ i: r, V5 K  F* ?
2 安装部署⚓︎
3 a1 u2 J! l& X  S2.1 添加 JumpServer 的 Helm 源地址⚓︎- G4 ?9 A/ N0 x0 {! t& j/ d

& l( f, u3 f* p$ f& K1 zhelm repo add jumpserver https://jumpserver.github.io/helm-charts
5 q% [7 v3 v( T2 O& B6 E4 Qhelm repo list
% `5 M& U" s, p, N$ V" I: n+ J3 L/ g2.2 编辑 JumpServer values.yaml 文件⚓︎
4 M3 ?* L5 L  r# {8 j/ h3 H- v) M  J" n% n4 B0 }% Q
vi values.yaml  G; }& J" [6 n$ k8 n3 o

0 h( S( V) y2 ?# 模板 https://github.com/jumpserver/he ... pserver/values.yaml, f* j1 H' Y  q( W8 w9 Z
# Default values for jumpserver.
( U( I. C  u( S/ O# This is a YAML-formatted file.9 y3 E8 A: A+ Q4 b) ?( Z6 m
# Declare variables to be passed into your templates.! p) u4 U# h! z) m* v" j- w4 P

4 p  Q4 _: }: z5 Y2 cnameOverride: ""
2 k9 g. @) |2 x# sfullnameOverride: ""
3 @0 ~! b& m* |9 K
( e7 x+ D% H; U$ U3 t0 Y2 M7 J! _1 o- V## @param global.imageRegistry Global Docker image registry/ O* D: |$ B% G0 h& T6 K5 j1 f1 |: S
## @param global.imagePullSecrets Global Docker registry secret names as an array% f! T: r1 H) ~2 A! ]
## @param global.storageClass Global StorageClass for Persistent Volume(s)8 |& L- A9 R- \9 O' E( Z6 f
## @param global.redis.password Global Redis™ password (overrides `auth.password`)- B1 X& ^5 @' E, q! a
##1 J8 t. O( \$ Z( X8 k. \
global:
3 K& _5 m5 m+ j' J4 _7 A  imageRegistry: "docker.io"    # 国内可以使用华为云加速
0 j( f( C# i  c  ?0 A% D# T. l  imageTag: v3.0.3             # 版本号) l$ I- f8 Q' `7 k. ]4 T
  ## E.g.
$ d: R7 x4 e! ]0 W$ n" T* |  #  imagePullSecrets:! [* a' n( F2 D/ q7 E- {5 G) |* t6 Z& e
  #    - name: harborsecret
# s. l1 j4 v: Q1 {* `0 j, W5 c  #
( h) A# v" S, E  #  storageClass: "jumpserver-data"
3 S, A) S# \1 O3 c! j: g  ##
1 H5 A+ O1 ]( ?, g9 w* Q$ o/ ~  imagePullSecrets: []/ ~9 ?4 q% k2 O. q
    # - name: yourSecretKey
/ S8 X  S* l) W# X% X; [  storageClass: ""              # (*必填) NFS SC
+ \# \/ M7 c+ G; U' y& C1 Q$ @* b) U. g  p: Y: M
## Please configure your MySQL server first
3 ?: [0 U6 U7 ]+ n## Jumpserver will not start the external MySQL server.# @8 G) e- _' g6 d9 x3 p
##
6 g6 f- ~# N( v. DexternalDatabase:               #  (*必填) 数据库相关设置
8 r; i# G8 n: ?# c% \# W  engine: mysql
3 z9 O  h9 e7 @' }! w9 M  host: localhost
# l. x" h+ S0 Y. U7 I8 M  port: 3306
& H% @& Z5 v  ?  user: root6 O8 u) t( [$ {0 p* `
  password: ""
( I; B4 D3 d' t/ }4 X  database: jumpserver& T2 \$ @, S2 E
! j6 F6 V) A% P2 [6 E
## Please configure your Redis server first
) }6 E- @+ i2 X1 }0 p2 _## Jumpserver will not start the external Redis server.# e3 F- V% _  T$ s# @" {% ?& G$ J
##4 Y: `" u) z: L  A& M+ T5 a! w, o
externalRedis:                  #  (*必填) Redis 设置  O( ?6 J7 ?; y2 {6 t- n$ u
  host: localhost( l/ Q' v, G) w1 F9 f
  port: 6379
  x& f/ i: ]1 h4 W: _  password: ""
9 n( d9 [# e! B1 o6 |7 V! B) F7 f4 S1 x2 t4 j' P3 W
serviceAccount:
  G- @$ l% R7 Z3 M8 T, \  K  # Specifies whether a service account should be created) t! J9 l6 m0 i! ?4 ]8 Y$ O6 y
  create: false, e  G- g, j4 k- }6 M  b4 Z
  # The name of the service account to use.
9 w0 B) [9 _& d& |. J# [0 f; g  # If not set and create is true, a name is generated using the fullname template
( S, q) ]. d; B! e6 b  name:' I, [" z0 h5 @8 j0 T/ N5 h# m8 _
$ [4 A: S+ d% G2 G7 L; u* o" X7 C
ingress:
  k) @) N. \" r1 W2 ?# n- ?  enabled: true                             # 不使用 ingress 可以关闭' N, F5 T& x9 ]( }& J+ r: \
  annotations:* e4 z' ^2 ?' F+ r7 _9 O; x5 O/ k3 U
    # kubernetes.io/tls-acme: "true"$ F) V" o" W" V/ Q* U" `* e
    compute-full-forwarded-for: "true"
9 T  F% O; @9 m! Q* s9 o. F    use-forwarded-headers: "true"' _4 `$ a7 x" u, _# V; r$ i& u
    kubernetes.io/ingress.class: nginx* v" u) d- r. [- T
    nginx.ingress.kubernetes.io/configuration-snippet: |
8 v/ g2 I/ }/ e3 W; H       proxy_set_header Upgrade "websocket";) L2 ]' d$ s) g  U2 ?3 J
       proxy_set_header Connection "Upgrade";
# z. V# G; `% S3 Z  hosts:
6 t- X! I9 J1 x) K    - "test.jumpserver.org"                 # 对外域名
( P8 I4 @6 n- I; e  tls: []
" M" R- y. G' a1 h% g! ^: J$ T) f$ V0 J  #  - secretName: chart-example-tls
; e7 b4 [- e+ C, `- y0 E+ H) V  #    hosts:- I+ D4 y- P( Z( Q, V' N
  #      - chart-example.local1 H" D7 S6 H/ u5 e, |, q$ Q; z% E7 C

. \- A" k$ U- q/ q' Ucore:! ~' ?3 O& o5 Z$ O1 A) s
  enabled: true
, |, ?8 i/ Y. Z7 V5 t* R/ `* i2 u9 X) X7 ~, K
  labels:  Q( b* M/ I5 M' G4 D+ W
    app.jumpserver.org/name: jms-core# M2 G! J/ A2 E5 I1 M5 |2 P

. ?1 S: x3 Y6 W9 U  config:" s- J! W: \& u, e4 z" d! J3 R
    # Generate a new random secret key by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
- z, O$ ?  Q& j* u$ y/ o$ b    # secretKey: "B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy"1 F& v9 l8 A$ D, p0 n$ O
    secretKey: ""                            #  (*必填) 加密敏感信息的 secret_key, 长度推荐大于 50 位
# y5 e" O0 O" }* n$ y    # Generate a new random bootstrap token by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
3 o& t( ], a% z* e$ L# T    # bootstrapToken: "7Q11Vz6R2J6BLAdO"
% h+ g! }0 A/ ?% |( @    bootstrapToken: ""                       #  (*必填) 组件认证使用的 token, 长度推荐大于 24 位
# U, P' s- y& h5 d/ c1 X    # Enabled it for debug
' p7 J* ^1 O$ g$ j+ j; ]/ V. G# l  G    debug: false) X$ E; S0 c* c9 C4 Z, ?
    log:8 [/ Z# {3 k1 L% ^/ K' J% J5 M
      level: ERROR
' \/ k9 E% p6 J8 _2 V- S: X
3 G" ]( R: Y6 E5 U3 W$ ~( E  replicaCount: 1
6 ^" w" S5 Y) b, S
: {! ^9 G" {1 ^) z  image:) s- N7 h! S+ O
    registry: docker.io
$ K5 I& H% ?0 d9 \    repository: jumpserver/core
; F5 I9 }, A+ p7 G$ O, }5 }- a6 ~% P    tag: v3.0.3
# W* \3 a3 z2 c) h' L4 q3 h    pullPolicy: IfNotPresent
8 G* o. m% ?1 j4 e7 p$ s
0 G1 g8 H' }- n) o$ ~  command: []
/ R5 a- T8 D7 J: x4 n- Y9 \3 P/ R% }  w4 K, G
  env:
' i# x7 t% t8 Q# ?% W0 F9 @+ G    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#core' @% h4 t. Z" O# Y% l8 F
    SESSION_EXPIRE_AT_BROWSER_CLOSE: true4 m  r) @6 P' x* F' S& y# J. b
    # SESSION_COOKIE_AGE: 864001 ]$ D; }+ M. @3 ^& P7 R8 T
    # SECURITY_VIEW_AUTH_NEED_MFA: true* w2 \. |; W- C+ ^; O" b
' y. K- z, O4 Z4 t
  livenessProbe:$ X& D; d5 F) r4 q, s: m
    failureThreshold: 30' K$ }7 }3 l% V
    httpGet:
) d8 R7 B+ ?! W* i- _      path: /api/health/: h2 ^. r3 u: w. z
      port: web' _5 g5 P5 }' n" a$ z

- i6 H( ~) w: @- ?  readinessProbe:
- R1 U; K# R3 X. c    failureThreshold: 30
2 _3 K# J8 `9 b% r$ I8 e. A    httpGet:) l5 D8 B4 l) x$ s5 j3 e+ A( X7 y
      path: /api/health/, R1 S% o# u+ x
      port: web7 k0 j# m" T# [  n
9 c2 {3 h1 K- u* I4 W" M
  podSecurityContext: {}+ g5 f) o/ z; N# k
    # fsGroup: 2000
9 u% J$ s" w/ s6 k5 @- h1 }3 N! V- P* G
  securityContext: {}4 O) {" N# I- G8 {: F3 I
    # capabilities:
: r% f8 ^7 O8 F4 @    #   drop:
' o1 T! h4 d5 e    #   - ALL
! t6 K2 U$ r4 o% w8 X$ @4 E    # readOnlyRootFilesystem: true
3 }( a: M9 }+ i) p+ F    # runAsNonRoot: true
* {$ `9 Q' W3 h$ D3 E# t    # runAsUser: 10001 m- K& I& Z! E6 f7 g

% T  }7 {3 A. D7 S5 d1 K8 M* o- L/ P  service:& s9 h2 a2 r+ B( a$ ~7 D( C
    type: ClusterIP, e5 l1 T, g8 T/ ^4 T: I+ r( z
    web:
& a$ `9 E7 r  B1 h$ A2 b/ s/ i      port: 8080( X! c) k) {. n- M- F- `. n" l

: m: H  [  `: p8 n' I, N  resources: {}6 z3 f; _9 t1 P% T" g3 e- x
    # We usually recommend not to specify default resources and to leave this as a conscious9 K; |& I! B7 |$ k% |# L1 r# |
    # choice for the user. This also increases chances charts run on environments with little
% B# S: g+ Y+ l- B4 F3 a    # resources, such as Minikube. If you do want to specify resources, uncomment the following: z% L/ s) q8 i  L  C
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
* c) d0 c6 [) z    # limits:  q, C- u! ~# C. r3 ^; U/ ?8 @6 m+ ?
    #   cpu: 1000m  ^+ R/ W! s% n- H- q3 _# d' v
    #   memory: 2048Mi
4 K/ ^: G# y6 F2 S  e: Q    # requests:; y6 w2 j" q1 n7 ]. e3 m' X
    #   cpu: 500m( ]! h  q: l+ l! x2 u
    #   memory: 1024Mi% r- I6 m" J5 m# _, {6 a* @
8 [! f; n" w8 X* l
  persistence:1 \' i) Z# x% @
    storageClassName: jumpserver-data+ i5 |; ~/ t# x: [  R9 O
    accessModes:/ y/ `9 x: W* @5 e" D: u
      - ReadWriteMany
0 T/ Q! Y& d9 w" j5 R    size: 100Gi
1 Z1 R6 [; c3 _/ r4 x    # annotations: {}
/ k" z8 _% @& E0 F    finalizers:- x$ i& a& U0 z( e2 \9 D6 O& d
      - kubernetes.io/pvc-protection
* m0 I0 K: M0 E& c% }6 T    # subPath: ""
) b8 b3 {; j! U    # existingClaim:
: B) C# k- M4 @0 ]  a9 a$ S* T8 ?0 l0 Z. ?8 T. H2 I
  volumeMounts: []- [% |; K" d& h7 t

- _3 h# Q% c4 X% I8 o& V  volumes: []
2 G" M% C, I7 ]) V/ ?+ o
, z$ H& n4 G6 A" Y  nodeSelector: {}3 B4 g, ?, U4 l; y' C% ~5 ]& x
) l) v. J' w7 x8 @
  tolerations: []
3 m) i; y: [7 P* W0 P4 \  p5 y
  affinity: {}: ^  P+ G2 E9 j" s+ }, N% w) S

' j/ p+ p0 P: A# X- B( skoko:
  E; b# V! u5 W1 p$ r' |1 G. ^  enabled: true+ B: f3 f, }* r
2 {- K, p$ f* B  Y3 g3 }
  labels:
' ]3 e( p% B+ L. B6 D" _8 n    app.jumpserver.org/name: jms-koko+ e! [1 ]- w5 ^* v: n
2 m& ]1 \2 |7 T% b
  config:
# D: {2 f5 K: ]4 Z$ Q    log:
6 L! m2 r! X7 D9 C1 T' V" \      level: ERROR2 k0 o4 Z4 l' D( j) k# s
" `" `6 U  z( P( N  r" q
  replicaCount: 1- K8 m" X/ ?0 N5 ~

5 u- c6 N7 Z, B" D, q  image:/ [4 u, J, m: b- J: u' G
    registry: docker.io2 Q" b+ a( x% Z, o) ~8 \
    repository: jumpserver/koko
- o+ r/ q; g7 n7 T) B0 l0 ?    tag: v3.0.30 N1 d5 J$ Y8 g8 J, N
    pullPolicy: IfNotPresent8 G1 p- Y1 n* B* D# e0 P

% @5 c* \" B) T  E* V. N: S; Z  command: []3 w: r3 o4 t  o
3 V. a( n# l1 p3 p9 @
  env: []4 \( Z3 m4 ~( z  @4 o# Z8 ]
    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#koko1 N5 H: w" }8 X! c/ D  o
    # LANGUAGE_CODE: zh9 ^$ p1 E3 M7 `6 A, U1 J$ k5 B
    # REUSE_CONNECTION: true( W( {- p: q7 D
    # ENABLE_LOCAL_PORT_FORWARD: true: H* h1 p$ _+ Q0 L: m1 X# K4 I* ~
    # ENABLE_VSCODE_SUPPORT: true- g& A' N* i8 S& d; F

. h/ F! i% q8 p) p  livenessProbe:' E, D! `( c1 i7 A
    failureThreshold: 30
, @, h- B$ }! d+ k    httpGet:
! B7 j, ?" n5 m( O. E      path: /koko/health/4 W) f$ g* d9 V$ G/ v, k" S' q
      port: web
0 n6 n; d; W6 D0 W+ q) M
, g/ l9 Y) e2 N9 r5 H  readinessProbe:4 b0 K# j8 k% V7 M% w2 X
    failureThreshold: 305 ~9 O9 Y4 v8 O' b0 A) M8 ^. b
    httpGet:* k7 q. L" a: ^9 r
      path: /koko/health/& s0 f% L2 Z( N1 d( m, P
      port: web* K& @. }& l& V$ N& _2 Q# h
! t2 Z* U3 k0 v
  podSecurityContext: {}
# X6 X" W& c9 U- O    # fsGroup: 2000
2 ?, Z5 K2 p% d; U7 Z, {( c2 A7 C* e( t6 C7 G- V& D9 A
  securityContext:3 g0 J7 Y' M% i3 O! X
    privileged: true
2 s6 F0 @/ B2 M    # capabilities:; {5 m6 x6 ^/ S( B5 v
    #   drop:9 ~7 i  o) K' R  s, C  W1 Z; r9 q- Y
    #   - ALL& m" s* X7 S7 c4 L7 M' {
    # readOnlyRootFilesystem: true
1 _% K( c% n! d+ E5 f" |; _    # runAsNonRoot: true
9 v3 {+ N1 u) N% \    # runAsUser: 1000
' \' N  [* J. x2 h1 u; h! ~& A* h
4 k0 b8 }+ t; G3 f% b. `/ ?; V, F6 o  service:
! |9 ^, L  Y: c& y5 \    type: ClusterIP3 f6 |$ _& x0 ]) ]5 A
    web:
. ]1 q$ J! g4 k8 b# e* v" d7 u      port: 5000! Y6 x6 F9 A) J) i
    ssh:
9 r' j: W' @) U1 J& V      port: 2222
4 y3 i/ P& H; w8 M2 [% h5 ]8 X: Q
  resources: {}4 a' V- o$ I. t2 s" f
    # We usually recommend not to specify default resources and to leave this as a conscious
* Z) {1 R* G- ?; ~: p! Q: D    # choice for the user. This also increases chances charts run on environments with little* r  b8 v' x3 W, l
    # resources, such as Minikube. If you do want to specify resources, uncomment the following7 T7 Z/ O! C- B
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
4 _% f. n5 n& \; h) Q9 f    # limits:
, D& d5 [3 B! A9 ]; z( E% ?" U% ]    #   cpu: 100m9 w) \% {+ T+ ]- n; d
    #   memory: 128Mi
* R. X( @7 F5 O' ]    # requests:' J: I" W/ h6 r' t
    #   cpu: 100m) f( T" `6 E# g9 `$ P
    #   memory: 128Mi/ s: f! W' x8 q2 N

5 b6 r* i' b: W9 Y) w$ I9 B5 {  persistence:0 L8 E% S- a+ d& g
    storageClassName: jumpserver-data
! k) f; Q& R- O: _5 y, U' O' Y2 I+ R    accessModes:
6 {  i( g7 P. P2 I# @) C      - ReadWriteMany1 T6 D1 a2 A: w' c3 d$ C3 e
    size: 10Gi$ j1 C# }7 M; [7 `% |; k* u
    # annotations: {}4 S/ T2 X& f7 G4 K) H
    finalizers:
  o) J5 r" s1 E  Z* o' O+ L      - kubernetes.io/pvc-protection
7 L* W# @% }  E; z/ ?2 N  q& J6 n, `9 r' y8 h- J  |0 m
  volumeMounts: []% V0 v1 [2 Q9 r6 Z) M7 V
$ G% A# U9 z' U6 N8 Y
  volumes: []
# T# b( y6 k& C, P6 {) w" ~1 S: G) t( v
  nodeSelector: {}( f  y/ K* q' B" Z. x& p

- o/ D! ^6 u$ l) r5 [! e1 W  tolerations: []6 X, l4 g) m2 p) D7 u

5 \1 n9 C) \! A% U: v7 O( [6 _  affinity: {}+ F5 [/ H9 F$ _* j: E

7 R) h+ J2 [' Q. G( wlion:4 v, h3 ~# C2 j
  enabled: true
2 F; d+ U8 B( J& C& @* a* f  x
9 ]7 |$ I1 r5 a+ x7 O  labels:2 B4 `3 o' N4 c- k' y8 R4 t  L
    app.jumpserver.org/name: jms-lion" ~5 ^6 g% f, y$ g3 U
; i% ]! t; C+ {+ C! C0 h' s" {
  config:
+ _1 C2 \% w1 @" p0 Z. K2 s    log:4 R4 \' c9 e( U+ s
      level: ERROR
3 }- Q; p' G0 J, j1 u6 O$ W$ h  b4 d8 W/ p4 M) N, K
  replicaCount: 13 G# ?2 }! u& q# L
1 v( S) Y. I% ]$ E# g; o2 z
  image:
5 q6 s) _8 p! _" n7 o- Y    registry: docker.io, M7 l9 K1 p) L6 B
    repository: jumpserver/lion
6 g8 Q& A) v! r( X! n    tag: v3.0.3
9 `) m/ M* L2 [6 d( H; t9 H% k. U    pullPolicy: IfNotPresent
, N4 J' @- Q' E0 Q; B1 r7 X, i5 {. i! d
  command: []3 [1 v2 Q" P; v, l
7 r& D# p, Y$ `& N$ a5 J
  env:
7 o4 ?- S1 b2 `) k. J7 \* N    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#lion% h! ~1 r# F: A9 i6 p) a, D
    JUMPSERVER_ENABLE_FONT_SMOOTHING: true
" Z9 t) Q$ ]4 D" p. t    # JUMPSERVER_COLOR_DEPTH: 325 D3 P4 y" U# L+ I( F3 v; H
    # JUMPSERVER_ENABLE_WALLPAPER: true! ^- B. p$ \( Q1 Q* `3 m5 M, s/ q
    # JUMPSERVER_ENABLE_THEMING: true
' i, Y' n% N; p' M6 r    # JUMPSERVER_ENABLE_FULL_WINDOW_DRAG: true
" V& b2 E/ Y. C. Q- m    # JUMPSERVER_ENABLE_DESKTOP_COMPOSITION: true
, W2 H+ }9 o) _6 f    # JUMPSERVER_ENABLE_MENU_ANIMATIONS: true
) a( x! A% ?$ [( S$ S+ i7 ~  h7 d1 r% h3 M# F7 O
  livenessProbe:
: T, G3 @& h* e/ P4 d, M$ b" O4 S    failureThreshold: 30
$ M# h6 K1 U2 r# z$ U1 t- n    httpGet:
, A9 L! h0 k9 Z( E      path: /lion/health/
  x0 Z& F, @  M0 v* A6 D      port: web
9 a" D6 ^9 H  d
: F; [3 K; {& j$ p  readinessProbe:3 g3 n+ ]) ]" z3 i6 k0 ~
    failureThreshold: 307 f# q" B  J( }& q; ^6 _& R- W( p( }* [
    httpGet:" D: W4 v* i; B$ a
      path: /lion/health/
9 n  _  E5 @. H+ x4 c$ i8 t      port: web7 L( M& I, U8 o+ n
0 F; F6 G* I  k. |8 D
  podSecurityContext: {}. w7 m/ `4 W+ G" ^# h
    # fsGroup: 2000
: _+ ?1 T: A% L6 r8 X: U; {* d
2 [# O, s4 M) i  l  securityContext: {}" a2 w+ C8 x: D! s
    # capabilities:
5 G6 a  ~  n, Y' p' v7 }    #   drop:) c; T: s' r( R3 a$ H
    #   - ALL
' R/ y% N2 H- Q$ }) r6 W1 O    # readOnlyRootFilesystem: true
$ I! o1 ?+ A- C( ]& u1 P- f( a    # runAsNonRoot: true  g. F% {% k0 V; I5 g! i0 [4 Y
    # runAsUser: 10005 R& K2 ^1 T0 P, `5 f; u7 F2 H
9 }- Z& q+ @2 }+ k
  service:3 Y/ t0 \! n5 a$ A7 \
    type: ClusterIP
7 }' j8 D8 R  n5 U3 V4 L+ w5 X9 w! A    web:
3 b2 K, X1 z1 f: N) n      port: 80818 F- U+ I8 _8 w; @1 W3 k5 y

' l3 E; x/ Z. X/ l: }, A7 }+ F  resources: {}8 H' R, g  I  J1 `- }: d
    # We usually recommend not to specify default resources and to leave this as a conscious/ W0 @9 u1 \5 {) i
    # choice for the user. This also increases chances charts run on environments with little
# y1 t' Z5 W' J2 c9 J9 H    # resources, such as Minikube. If you do want to specify resources, uncomment the following
( W( c  j3 K, \" P    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ y/ \7 S8 }- o& ~; c& ?. I    # limits:
; n% ~, z3 B6 l! R9 F# |    #   cpu: 100m: o+ a& B  B7 @' O- `
    #   memory: 512Mi1 v: j5 o1 b" a0 }) @
    # requests:& p- r. C4 w# P( J0 X9 T( _: @6 a0 j
    #   cpu: 100m
8 O6 c6 Y- P& Z, ?; Y3 U. h$ ]# _    #   memory: 512Mi
( A1 ~) b: G! D* o  t  ?' T  [0 J% J/ X. J5 S
  persistence:
/ j) K+ v$ u3 k$ \# H, ^    storageClassName: jumpserver-data
1 L5 r; A$ [; \5 x7 O    accessModes:( K, K/ x9 e& N8 U0 R, H" {" Z
      - ReadWriteMany
1 Z# v, F# t: [6 {+ C6 N    size: 50Gi( v9 K8 p) G- s4 W" Z
    # annotations: {}1 o* L) s$ O4 Y# E% ~
    finalizers:
7 E. a; C  ?% t: \& V! r" b: |      - kubernetes.io/pvc-protection
+ [1 m/ b9 y8 [+ w0 a# `, a/ k; I  l
  volumeMounts: [], L: {; }' B% R) W( R
( p( A5 G8 w5 T4 U5 q) [' O  f
  volumes: []
7 \8 J* `- d1 ]. L: {4 |6 ~) M' V1 |6 g
  nodeSelector: {}1 I6 P: [% V) L. @3 u5 Y' ]8 a. t
: d* N6 H( ?  }* o$ ?7 j6 \9 v  G1 U
  tolerations: []) o- D$ R8 I) n; m" `3 k  r# Q

$ O) N+ j" e: p; Q  affinity: {}$ l& L" y& Q" C$ ?$ h# e; m

% a, U; D6 l" w5 ~. @) F; Pmagnus:% g/ i8 Y: \! ?
  enabled: true9 a# p7 m8 c" ?* G* Y1 i$ x

) r7 o2 F6 U" h5 ~8 h) R  labels:- H' W6 L- y' M- ^  D
    app.jumpserver.org/name: jms-magnus
# X1 N% d: C1 L7 M; \+ B* j( B* R1 P! X# S$ @  k
  config:
# j) ~: V0 X% j: w9 n6 l& G8 s    log:1 _* T# ]: n8 S8 a+ [3 W) {% T1 C
      level: ERROR
' c4 \& W* E. _9 g8 U# H( C
; }  ?; z( q/ U* w0 z! X  replicaCount: 1
$ X$ _# t  `9 c: Q7 `$ }
1 U1 O$ v5 m% c$ C- _. s! ]  image:  M; y- [7 T6 x+ C
    registry: docker.io
1 q0 X. P6 P4 R& o1 w: G    repository: jumpserver/magnus
3 H6 ~/ v( T! t9 ?    tag: v3.0.3
+ n& S+ D0 \5 S0 Z( y3 B    pullPolicy: IfNotPresent8 c' q* e$ ?) f- D# H* d4 |1 _

7 T* s! E. Q2 v9 k  command: []
4 T+ U  ?- ?2 L) K+ D7 f7 e: M2 d& }
  env: []; a. m: x" h& \4 ~3 O$ a- K

0 h) r* ^9 t# n( l  livenessProbe:) }1 `3 O3 _* m7 d$ o2 h3 U
    failureThreshold: 30
! `4 W# h* o+ S! t- e    tcpSocket:# J; A  X0 w" ~
      port: 9090
! G  k4 {; ^2 {! F2 e
; B9 |3 M+ g- l" t+ \  readinessProbe:* ^$ H# t8 m+ u8 C; g; }) j* l
    failureThreshold: 30
' U5 b6 Y3 h, ]3 ?" n( o( v$ |' |    tcpSocket:
. f4 N% `6 S" r4 d9 ?      port: 9090
$ `) n0 f+ l2 `& h* Q$ r7 @- c8 h5 H6 J5 g% b) H  `- {: }0 z# I
  podSecurityContext: {}
+ C6 \& v9 Y8 M% b; V) z    # fsGroup: 2000
  G; ~! n7 B9 l, `  v
! F' N! ?/ r/ p( y% l! M5 I6 ^  securityContext: {}
5 |$ h# E  r  K: z8 M1 B    # capabilities:3 H' u9 [& [! w7 ^0 Z; }1 o) u6 Z
    #   drop:% Y% A6 c& W9 [+ A  i1 I, d3 O
    #   - ALL, _4 v; V# H5 S
    # readOnlyRootFilesystem: true
. c) l9 u" @9 Z/ s6 w* X$ `    # runAsNonRoot: true
+ S& }( ?3 w# c- T% [2 C    # runAsUser: 10002 \" |  r7 y, j' K
8 Y% Y7 X) c& h2 K
  service:% t% h* o: Z& R
    type: ClusterIP
0 y: M8 g' `3 n. X8 d& C, v; l    mysql:
! \; S* @0 G# f0 I6 l$ E      port: 33061, C& O2 h8 E$ D4 I* }6 E
    mariadb:4 H) @8 U8 ?+ K- }- h5 O! i$ `
      port: 33062- r  T1 l) c9 O+ L8 U
    redis:
" C- _1 |; w8 z$ m- x/ ~      port: 637901 ?3 ^* ~; h* v% F9 v7 u0 d
    postgresql:+ `1 S6 N! A# N) _4 U2 N
      port: 543205 x+ T1 X& z* T6 w# D0 U
    oracle:
7 v! u  a5 O0 ~7 C9 F' {5 U6 }7 v      ports: 30000-30100/ o6 Y/ {6 z, _+ q& n/ @: A- n; F
$ a, L4 i+ w% _9 h  a+ A
  resources: {}
0 j7 I; ]$ F& I$ W7 ^+ O& P    # We usually recommend not to specify default resources and to leave this as a conscious9 T6 A! A3 v5 @4 r7 ~' S& S# l4 y
    # choice for the user. This also increases chances charts run on environments with little, {# _4 O4 ^' n) y. ?
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
0 N( `$ e( L, m4 {$ m    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  @: x2 S& {0 X# Y9 E) F' c    # limits:
: R  z- P/ \4 e+ w0 Y2 p4 R    #   cpu: 100m
. `' S2 B" \: Y) }& q' U    #   memory: 512Mi
6 o4 p0 y( {5 N" K7 G! n    # requests:& O2 B! h5 m, E6 h& }, B
    #   cpu: 100m
- G: `* E; I2 [* J0 W& |    #   memory: 512Mi$ Q& T8 o- |! s" M$ q

/ O% C# o5 [, t8 ~  persistence:
2 J4 s+ p4 e7 v2 ~0 q$ f5 c' b    storageClassName: jumpserver-data$ ^. a$ O. O- _$ v- ~; j  P
    accessModes:/ T& V  \& g9 K' E" e
      - ReadWriteMany
( J. O$ V/ _, H    size: 10Gi
; v' U; L; I! n) M2 h    # annotations: {}
) q% K3 Z" U! q    finalizers:( Y4 {% g% I+ {# l5 M% S+ D# l
      - kubernetes.io/pvc-protection/ w% b* b- V( F+ V5 n. M

0 ?" ^& N# y8 V6 ]/ S. m  volumeMounts: []
0 c# I2 D  @/ X2 U+ x! O% `
/ l- A! d  o6 j  volumes: []
- k, p7 T9 ~7 H1 n5 i  `/ g) N+ ?$ G2 q0 j( x1 H
  nodeSelector: {}
- c! O* I$ v$ G% _! k6 m4 v0 [- U* m5 d' k8 V. k! t6 g
  tolerations: []* h3 T8 `/ e) b3 w" `# X" u
+ o4 |* x( A; ^' I3 e# [& A9 W
  affinity: {}  G0 J8 \+ r& x/ S; b- [

2 Q5 U# B% V" fxpack:6 H( m2 F6 o4 T; P0 J! Q7 O
  enabled: false      # 企业版本打开此选项+ m* v+ n8 U7 E6 x9 R( P

$ E0 y  V+ f9 u" n& bomnidb:% N: u& D6 i5 Y: e2 T
  labels:
) C  U* h2 j$ ~; f    app.jumpserver.org/name: jms-omnidb; x' b2 r$ v8 O' I5 w3 r8 s
: U1 _5 c, J3 F" j$ |/ y
  config:4 {$ j2 ~9 Y; Z- R2 x) B
    log:
) A) T8 E" n1 t: t- ~      level: ERROR
2 J+ [% |7 F2 ]
4 @4 j" m8 T+ L/ Q/ @4 `2 [  replicaCount: 1) r' r' k1 P+ n& J+ S' g4 z
* O: D- I' k( V( ]& ~; z$ N2 y3 A& M
  image:
" M  j4 P" a! l* \1 `    registry: registry.fit2cloud.com2 l0 L0 i$ ?3 \7 _6 I- C. k
    repository: jumpserver/omnidb
1 E8 o3 T, v% K* U    tag: v3.0.3
# T' ^; D1 f8 S    pullPolicy: IfNotPresent) T- _" R/ t( n# R9 E8 ~

4 f' ^+ E: k1 n8 f; o0 t" D& B  command: []" M/ E1 }* t$ ^+ r: j

8 h% i- v# b5 i1 @1 t' ^  env: []
. a# S% `; Q1 B+ B9 p  F# S2 ~
/ {6 }% v) {, k8 \+ o$ a! q  livenessProbe:
, x! s: \$ z, T7 n. |- b2 i    failureThreshold: 30
0 E( r' n) o' u. R- K/ b# q( R: I    tcpSocket:+ [% x+ i8 ?3 q$ u$ O9 z5 k7 p
      port: web
' ^* v6 T/ t& {0 ]  {! ~9 \# G/ g9 Z  y- S+ i1 F7 h9 W, d( ^
  readinessProbe:
* m6 N" r% g8 z2 {2 l0 P    failureThreshold: 30
2 M9 m/ W) G& p6 v3 `    tcpSocket:
/ _/ E$ B5 i7 h% H2 ^      port: web: O- O& `# d* u2 z% c& c

; t9 P, ^9 f8 v3 r# _  podSecurityContext: {}( T2 c6 s5 z! g5 Q, [7 M, \
    # fsGroup: 2000
( P: P* h% M( O' W! I9 G9 |% w$ J  E  o% m
  securityContext: {}
* ~# F- Y) ^: a9 j, X# ~    # capabilities:' Q. y% d% o  ]) h9 s. ?
    #   drop:
" E7 e& U! R, M' `* ]    #   - ALL7 ~! |' b4 ^3 |
    # readOnlyRootFilesystem: true
- E+ S( S5 u4 f0 D    # runAsNonRoot: true
& `* I# b* c4 Z. e% m/ \5 }6 o    # runAsUser: 1000
# V7 U  o4 B2 z1 I! Z9 g& j# N/ _" e, u* |" S
  service:
7 k" w0 h- e; p8 Q9 m2 x    type: ClusterIP% U1 L/ ]: X; n2 W$ e9 T- ^4 M
    web:
3 z* I8 c9 D; V7 u  ?  m      port: 8082
6 c* v) |' y6 t4 C) v7 x" }/ E5 c2 T8 V% v2 k, c3 t. s& c
  resources: {}: m5 i! [0 g4 v6 n8 J7 M  R
    # We usually recommend not to specify default resources and to leave this as a conscious/ P6 O2 t3 I) F6 F/ e
    # choice for the user. This also increases chances charts run on environments with little
% Y# [- v5 ^0 a8 B: k) W    # resources, such as Minikube. If you do want to specify resources, uncomment the following
9 \/ F% F( d, t* U9 p! v; _% A    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.0 Q# Z( V1 ?& A' R6 @4 u) c2 Z
    # limits:, x" P2 e- r1 H# O
    #   cpu: 100m
% o# Q0 z& G2 G0 `! {6 x    #   memory: 128Mi
  Y; K+ h! ]2 w    # requests:
  e. x; V( t' L, s    #   cpu: 100m: j0 Q/ U- I& o" |0 c% D; a$ [# Q
    #   memory: 128Mi" `, t4 m  [) A, T1 }$ n

* v0 m6 r8 P4 |! ^6 n. i+ B# p  persistence:. v) ?# }" x; b: J
    storageClassName: jumpserver-data
# _% e: z0 D/ U) P- @    accessModes:8 D; z& s+ y6 X. g5 K. I
      - ReadWriteMany, N5 J, l" \% R
    size: 10Gi
7 u( |2 w, [! Q7 X" [) {    # annotations: {}  \; I! _9 F3 I! E5 q
    finalizers:
+ z$ {: m6 p5 ?+ c; ?8 M      - kubernetes.io/pvc-protection+ n% {# J6 p/ e2 j

8 ~4 u( `8 ~+ U9 r4 S# [! W  volumeMounts: []* h2 o' G/ `, }! X1 {/ @1 t
' t" ], Q+ J5 e
  volumes: []
4 e0 I8 E2 T' E! O, s: c  Y6 i$ Y  _" Y7 p1 Y7 \/ k
  nodeSelector: {}9 _3 ~" ^" T3 R! A) j9 q: ]
6 s' |4 ?3 Y) E, K
  tolerations: []
2 i; [% I+ _4 ~% p# g9 b! D  {7 `% Z( x
  affinity: {}
) N1 }; [6 z' {- `3 `. C: k, p- X" a7 I! Y1 H  K: Y7 t
razor:, D+ J1 N2 m7 l
  labels:4 U% q6 w5 _6 z3 s8 R( o9 J' ^, Y
    app.jumpserver.org/name: jms-razor# w& f: N+ F7 [6 K. x  w
% m2 Z# \0 O" ?, v# G& s" u
  config:
2 h' M$ s8 i# c1 k$ \    log:
( I% S1 V. f$ I. ]0 H1 j      level: ERROR- v0 |- I5 \! y- @
, I* C* U' O5 Y4 J: ?1 T
  replicaCount: 1  }5 d5 \" c- r, v( v
2 C5 ?& J0 q! z5 E
  image:* X$ Y6 f; p3 ~8 ?! {& @
    registry: registry.fit2cloud.com2 V7 T& P* d  t+ W
    repository: jumpserver/razor# |1 C% I8 t2 s8 n+ B  B" D
    tag: v2.28.6
( {" c' ]! v, o- F) w    pullPolicy: IfNotPresent
* Z5 q7 s1 H* E% R3 P
* D0 j: O7 W# j& H& N6 _" @  command: []1 U; |) U% V# t
/ N/ b7 m6 E' [) K7 ]0 E
  env: []
1 ~' s" Q+ U$ L4 o3 t# S5 v$ B+ @: O) \+ `" R
  livenessProbe:' P1 w8 z% L2 g' O, c: ]  @
    failureThreshold: 30
$ D5 E- J2 r, a: L' ]    tcpSocket:7 q9 c* x3 g/ m" Q0 k1 F
      port: rdp
  Y+ K0 z; g, E$ S5 O# t! Q2 I
* u. O; N3 e+ m) m1 N  readinessProbe:6 j/ h- C9 I4 Q
    failureThreshold: 30  b; ~% `2 B$ a- L$ F- E/ K2 G  j0 c
    tcpSocket:- `; n1 Z% z+ R" ?8 m( |
      port: rdp$ J. C3 b" y& y7 t, S7 V

) A. o$ B( u& S7 g9 j4 _  podSecurityContext: {}( I& n( T/ q" U4 k# R) J
    # fsGroup: 2000
% y7 r" U9 |0 e; l5 A; z1 I0 I8 y1 C$ M5 Z; l3 J2 @) [
  securityContext: {}
4 ^9 c/ `8 M  ~9 l; r/ k    # capabilities:9 l6 `5 N% M. W  [' ^) |2 U4 v, q% E* r
    #   drop:2 J( M$ C! C- z3 s5 Y: L3 D
    #   - ALL
4 g. m9 b- t: T' K* v! z6 l    # readOnlyRootFilesystem: true
$ B0 w  h2 N' A: O/ c  {; e    # runAsNonRoot: true5 G' H: Y) A" f5 `; S- S
    # runAsUser: 1000- q6 y5 Y4 l# d/ F% W

" G5 s. C( ?3 k' c* M8 a- A# }( ]  service:( o( Q2 I" ^! X- i! f
    type: ClusterIP
& w9 c, G- m5 {/ s+ l( S$ ~" ?, M    rdp:
. z( k% p6 G/ F) L      port: 33896 Y/ ]0 [  O7 B3 B" {

+ C& D9 `1 O: L0 w$ U  resources: {}
1 R  d1 X: F( o    # We usually recommend not to specify default resources and to leave this as a conscious" h1 @/ I8 P3 {' W- I
    # choice for the user. This also increases chances charts run on environments with little6 @2 u# T2 @. S! [0 [
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
( O0 h; F# A1 g3 k% Z! p    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.* ^3 R' _. P) E. E7 u8 y
    # limits:( J+ U& n8 o; q, M' @  A2 Z' z
    #   cpu: 100m
% D7 J9 L8 s$ S% ]4 q    #   memory: 128Mi
" I7 @  Q4 l6 k4 Q: o7 q: b    # requests:
2 u6 a1 i: Z" N/ f+ k0 ~5 u, a& u    #   cpu: 100m( \, K4 s0 [) g
    #   memory: 128Mi: r7 \" {2 r0 x1 b5 P4 _9 n
  n  k% Z7 |1 z. a1 f4 x* k
  persistence:6 q" z9 |$ M2 O7 T" ]* h0 x/ S
    storageClassName: jumpserver-data. Z$ ^% v( g/ g: d( S
    accessModes:
* _% b, R/ [# N- L  S      - ReadWriteMany% O# `7 O; m. R) N; M+ \
    size: 50Gi
1 C8 ]2 ]( x* ?, |0 U! o2 @2 Q    # annotations: {}
- U0 J/ e! O% r4 N* K8 y! \    finalizers:. F% A5 B+ e- k5 u1 l3 c6 Q- _
      - kubernetes.io/pvc-protection
/ G2 \' y6 m- V, e- Z3 b8 h5 S" s/ p8 D
  volumeMounts: []+ i* ]% j5 C* e; C( N6 _
% k- B$ P" i# E2 L
  volumes: []
' n+ [4 {+ P+ k: E4 @
8 ~) e1 g/ p  ]# P  nodeSelector: {}
+ g1 R1 |( I8 Y8 [
1 j* R* @0 U5 V1 P3 o9 a  tolerations: []
/ @+ q) B/ }& P% E8 o* e
% w6 d2 p" u( _- s  affinity: {}. ^7 Y# q/ o) M; V
7 ^8 i0 \( Z* c. O: ?7 W# V  v
web:. L7 g3 E& p5 E7 Z
  enabled: true
- n/ W! F; H$ o  G2 m! K3 F7 [0 L2 ~. [2 S( h0 R* l
  labels:* t) U% Z) e* Q2 _6 x2 u1 m" n
    app.jumpserver.org/name: jms-web
; L( W; x3 {) C7 G/ h& F9 w
3 Q7 F" ?4 i) J8 t3 T  replicaCount: 1! z) Y  U7 x8 q; P  N+ N3 ]3 F
* I( R3 S- `: T, V" g
  image:+ Z+ h: z4 n  Y! d, v; n
    registry: docker.io
" Q0 c" i; ^! s* K& H    repository: jumpserver/web
4 |0 [" R, \+ K  n1 l7 o9 m+ @    tag: v3.0.3
6 T& V- F2 S- O( q0 ]    pullPolicy: IfNotPresent
) U& N. M- c+ K* d5 X$ C" |6 `9 |& ]# E# i. X# U  A7 [  ?# G; k
  command: []
/ {0 H. _) a9 ?# i; \9 w  `8 Z
) D$ x; _2 o. W: E1 T3 i1 i$ W  env: []
$ X, h( r5 m: E    # nginx client_max_body_size, default 4G
6 [: U. j: r" S1 C9 I9 A7 |    # CLIENT_MAX_BODY_SIZE: 4096m
% I" T5 P3 P$ J! g$ F, n/ e: X  x! ]% y! o' I8 d6 D
  livenessProbe:" l& b5 E+ _- \$ k, b3 x4 e+ }
    failureThreshold: 303 ?6 S6 w3 `2 [) e/ a8 _
    httpGet:
& T  [& t% ^; x      path: /api/health/2 E1 k5 }' S4 D; k9 x: m
      port: web
5 r9 Z6 n8 ^* ^% i0 Y9 w
- }5 J. \6 ]6 P2 z  readinessProbe:
3 K0 S2 L& u8 V2 t0 k- _' j* `    failureThreshold: 30' z' S! ?5 e9 d8 i1 s# D3 E5 B2 L; H
    httpGet:
; a( B3 p8 R/ }. A5 e. G      path: /api/health/9 W6 {2 R, Q! j, }7 y4 _
      port: web+ v6 B9 u/ a, ?- N. z, `
' Y0 E7 P# l; N
  podSecurityContext: {}) Y% {) H: J5 A) \9 J3 K) C
    # fsGroup: 2000
6 A7 x! S" I9 [0 I5 C3 u2 x4 Q* `& l; t' o5 h! k! x' R4 T1 p
  securityContext: {}
  a: k8 K" i, W4 t    # capabilities:6 g4 e1 ~7 U- [0 S( N
    #   drop:
6 C: O% ?& c& d$ \$ A* A7 v- I    #   - ALL' [4 \9 T: \- X' A
    # readOnlyRootFilesystem: true6 X) x7 |  l) }
    # runAsNonRoot: true; [+ f- d! M2 R- }; {. d  O
    # runAsUser: 1000( X( @9 D# ]( J$ v
% G0 j9 f  Q! F" H3 `& Q
  service:9 }9 g6 s1 U. b4 c6 `4 |! H
    type: ClusterIP
& w/ e. @; D5 }9 |+ A    web:, k# @1 \& ]9 B' p! X3 K+ }
      port: 803 e' Q6 `2 }3 w0 G! s0 }7 j
9 e" Y9 x, x6 z( L, ?: c& b
  resources: {}
% [) I7 |. c: f9 A5 s: j    # We usually recommend not to specify default resources and to leave this as a conscious
/ d1 [* ?9 Y5 ]% W1 b3 d9 r" g    # choice for the user. This also increases chances charts run on environments with little
7 }0 E. |& Y1 U% @    # resources, such as Minikube. If you do want to specify resources, uncomment the following
, e8 ~5 w& B7 X1 I; m& K0 n    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  b) G6 o3 V* `# F) r* I/ w    # limits:
! w  m  {  L7 x" g) q9 ?    #   cpu: 100m' I' N2 ?+ t; P- `
    #   memory: 128Mi& [$ V- j# }$ {, U$ k  ]+ W
    # requests:2 x  _$ ~7 z7 C
    #   cpu: 100m
% L; j& I  F0 o; g    #   memory: 128Mi
7 M7 O/ f/ t- r1 G# h
  E0 R' w% M0 u" n  persistence:* f) z. [! Z& `; {1 X* s+ C! A
    storageClassName: jumpserver-data
# S# w# W0 }+ q4 n5 C# @    accessModes:
, |3 b' s) J$ y: |; A6 X7 j. J      - ReadWriteMany
' W; c! F) g( b& P    size: 1Gi, k" n% ]! f6 @6 ~, P) K
    # annotations: {}) H4 u& d# c! ?% X
    finalizers:
, a5 H1 s- z5 r      - kubernetes.io/pvc-protection7 p- i7 [, K* C( t5 R: R
4 k/ t+ ^: i6 Y4 E- B: z7 Z
  volumeMounts: []
# l4 u, Q: ~5 f# ]9 V" B2 \. q! q4 i. {5 ?* o# T( }% G
  volumes: []  C. ~" M* i$ p# ]9 g7 g
9 j; o. D9 g! k! s/ g7 ]. ?9 R6 C/ |
  nodeSelector: {}1 ~8 [8 |+ z% [

3 Q- E/ b' Z% {1 E* U  tolerations: []4 y$ V, g& S& A/ z2 v& V7 g, m
$ @6 {' A6 K7 F0 n! o) I
  affinity: {}0 }4 w  k0 `' k
2.3 安装 JumpServer⚓︎
6 r: |: q( T' R4 Y
( @: m* ^6 ~4 ~' x8 @helm install jms-k8s jumpserver/jumpserver -n default -f values.yaml
0 n3 C& j: l4 L7 A% ~/ L9 P2.4 卸载 JumpServer⚓︎
& a- O6 [  S& W, G/ {7 J% k0 l( |# c/ c) c; W: M
helm uninstall jms-k8s -n default

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:14 | 显示全部楼层
远程应用⚓︎6 t2 n" T0 }7 k0 m4 X8 {
注:社区版只支持 Website 方式。
) K0 P  t, `. c# ]1 W/ [2 I; }; o  ?) @: U4 |0 u3 B- J5 o, U/ M
1 功能简述⚓︎
! C7 ~- b/ b' b8 G) e远程应用(RemoteApp)功能是微软在 Windows Server 2008之后,在其系统中集成的一项服务功能,使用户可以通过远程桌面访问远端的桌面与程序,客户端本机无须安装系统与应用程序的情况下也能正常使用远端发布的各种的桌面与应用。5 y1 k: P! Q' O+ k* I, Q
remoteapp03
* D: v& k0 ]2 f- @& Z) t& g
% F$ W! O6 ?' I7 x% o2 应用发布机⚓︎
2 n" I' K' T) s9 T" ORemoteApp 功能需准备应用发布机环境来进行支持。
( b2 p. Z2 U+ S应用发布机是用来运行 Web 页面资产或者使用远程应用 Navicat 连接数据的程序运行主体。
0 a- o; [$ v% q% j* G/ T. q2.1 版本要求⚓︎
" i6 G: l& r& v! ?# s' d) N应用发布机为 Windows Server 服务器,具体版本要求如下:
; i) U1 K9 \( t  c9 a0 D: `( c Windows Server 2016         Windows Server 2019         Windows Server 2022
! h2 U( ]& f5 F$ r' t2.2 安装 OpenSSH⚓︎6 }% }& I( f/ s6 F! \, s) f
部署应用发布机前需要安装 OpenSSH 协议,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到 OpenSSH 安装包。9 L- Y+ `* \! t1 }. \% V
remoteapp016 s" F( y2 o- ~1 S' ~& G' `, X2 T
8 `% V. g) L4 s) ]
OpenSSH 安装包传到应用发布机桌面后,双击进行安装。
$ g( y) Z# k0 Cremoteapp028 _. \# x! K' v# K/ y
+ \# q: u4 j) g2 l5 J( t( _$ l( \9 c
2.3 创建应用发布机⚓︎; ]* b& r) j4 x; g3 }+ s/ f: ~
点击应用发布机页面的创建按钮即新建一个应用发布机。% q% [* m2 n) {& X% O# d" e0 t
remoteapp04
$ J  O- D# P1 ~" K4 }% c- N% o" M/ r6 a0 Y
详细参数说明:
4 B4 o) C2 G) ^3 K  B/ k$ T参数        说明
! n7 @4 @, {$ x名称        远程应用发布机的名称,识别信息。' d6 b# u" C8 x0 ~" w) \
IP/主机        远程应用发布机的IP信息。; h; H- N& D; U5 V
协议组        远程应用发布机支持的协议族以及协议组的端口。9 s6 f) i" w4 L
账号列表        远程应用发布机的连接账号信息。
) f/ o6 E4 c) \9 iAPI 服务        远程应用发布机的 Agent 与 JumpServer 后端 Core 组件服务的通信地址。
% [" X+ e$ u% M9 e7 a4 URDS 许可证        RDS 许可证启用选项。
+ A5 [) i; T2 |( A; [& O( \9 ^RDS 许可服务器        RDS 许可服务器信息。
$ k3 U5 Z$ ]! X/ \2 kRDS 授权模式        选择"设备"或"用户"设置授权模式。3 I- ~- H7 [! g
A.设备:允许一台设备(任何用户使用的)连接到远程应用发布机。
6 v; H9 o; h3 {3 Q/ KB.用户:授予一个用户从无限数目的客户端计算机或设备访问远程应用发布机。, k1 v9 y9 C. k, C$ ?
RDS 单用户单会话        选择"禁用"或"启用"设置单用户单会话模式。& V9 Z, e  m) f7 X: g
A.禁用:允许每个用户可以同时多台客户端电脑连接服务器远程桌面。
& r5 @1 t1 ^, E' xB.启用:禁止每个用户可以同时多台客户端电脑连接服务器远程桌面。
& D# W4 I5 n0 ]* c" dRDS 最大断开时间        如果某个会话连接达到了此最大时间,连接即断开。0 q9 s  D# F. O; X( P/ R* Z4 f
RDS 远程应用注销时间限制        远程应用会话断开后的注销时间。
) d2 s, e% e* X$ E! O" [2.4 部署应用发布机⚓︎$ w6 H9 a9 X+ G9 q( d; N
创建应用发布机后需手动执行应用发布机部署,安装 Python、Chrome、Navicat、DBeaver 或自定义远程应用。$ j& {' s& b4 B
点击应用发布机名称按钮进入应用发布机详情页中,选择发布机部署页签,点击快速更新模块的初始化部署按钮,初始化应用发布机。
8 G6 f: Q- H# n- d# o% f% \5 ]remoteapp05* h- \/ S7 a' ~; c, c

5 h0 U/ f6 U, P( l2.5 查看应用发布机详情⚓︎
, A  j6 a$ e/ n+ I# @8 r: |点击应用发布机名称按钮进入应用发布机详情页中。
' o& J; M" F2 s) l( ~2 |# j此页面包含应用发布机详情信息,包括:远程应用发布机帐号列表、远程应用、发布机部署记录等。  T% Z) m, P) }
remoteapp06
! v- K) z; ]; y7 n; A4 {3 B6 Y% I; {/ ^
详细参数说明:& b2 w; {' d2 h7 D; X1 O3 r$ m. L
模块        说明4 A: V  x9 `( U' `
详情        该模块主要包含远程应用发布机的基本信息以及简单的自动化任务,更新硬件信息、测试可连接性等。6 H% F6 l" b0 ?) h, R
账号列表        该模块主要操作远程应用发布机的账号,默认创建初 JumpServer 会创建100个系统用户支持远程应用会话。
6 F% g6 O5 ], J) Z: e  {8 T+ {, s4 P1 ?远程应用        该模块中包含默认的远程应用与自建的远程应用信息,在该模块可直接对远程应用进行部署。
2 i4 _- T+ ~) K( r- [发布机部署        该模块中主要用于远程应用发布机的初始化部署,以及部署日志的查看。1 w, T5 K. q* |* o: k+ e
活动记录        该模块中记录了远程应用发布机的活动记录信息,点击可查看活动详情。- ~' y  e; o8 m( N- y0 R9 l
3 远程应用⚓︎  q  x: ~3 C; b- K4 d
创建远程应用资源,实现远程访问目标资源,并实现密码代替功能。7 \: a1 ?/ n/ R* Y  e* f, |2 x
当前举例访问 JumpServer 页面过程(实现密码代填)( m, z- e; L" d; |1 x) J# @
3.1 创建 Website 资产⚓︎
) \- O* _  ?& h0 t点击切换至控制台视图资产管理 - 资产列表 页面中。2 w' l. c2 a' E
选中 Web 页签,点击创建 Website 资产。
+ E3 c3 y' Z/ l% B- I% K8 ^remoteapp08- e, p+ ]3 R  u# N
( h7 R1 c& V: U' O5 u$ O, R9 K
其中 选择器 参数,需要根据目标 Url 页面中的代码参数中获取。
. L& l' r# r3 k0 [; R( U我们通过 F12 打开目标 Url 的开发者工具页面,步骤如下图:
( I4 d; y7 F: E& G. D" L$ H# vremoteapp09
/ S0 R+ x; I: u4 X# `* X
4 l4 v1 y8 S) P把获取到的参数填写至创建的目标 Website 资产,参考当前页面3.1 标题第一张图片。; M1 k" V" |4 m; [. p: d; o
3.2 创建资产授权规则⚓︎
* A  O$ I3 o+ L. G- @" @点击切换至权限管理 - 资产授权 页面中。
( q9 H1 s6 w7 B创建新的授权规则,如下图:
" }% }" [9 N4 A7 X( ~remoteapp101 P; q6 ~" X; R! b
- n- a6 m! G) q7 J7 i: O
3.3 访问 Website 资产⚓︎+ e! E: A* U: h- v% b7 Z% E/ Z5 u
通过 Web终端 选中目标 Website 资产访问。2 |5 D. h8 X8 t. G% l
访问 Website 资产需要本地客户端安装 JumpServer 客户端程序,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到安装包。, e! X* O& }6 ^) g* T. a
remoteapp11
9 \$ B" F) S% J3 R
7 u, b: @. U8 Z* P4 f0 p, N( g( ^" M$ U3.4 页面效果⚓︎
$ e/ ~4 E3 `! u  J- U  q当前为远程应用页面访问效果图:
. H; D' Q& O+ ]remoteapp06
4 }' b* H2 M) R9 C' p7 z1 v! K) `5 q7 E. ^; ~' ~% _$ @
4 自定义 Applet⚓︎! y& a2 ]4 n% I
4.1 Applet 介绍⚓︎3 E+ I- f  F* \* L, X: ~
Applet 是一个包含 Python 脚本的目录,必须至少包含以下文件:7 _4 I# f+ D9 P- n, V; e3 A

; A& x) p6 X: a: y9 }, U├── i18n.yml* |4 }5 Q) e9 S: H/ x" i2 _
├── icon.png1 H1 ?* L; C# x. ?. z2 g0 M# G
├── main.py" @$ \" j/ R/ @( x3 y
├── manifest.yml
) c5 V. U1 g$ ?- T└── setup.yml
& l, Q! `3 \9 y: }文件名称作用说明:+ z  d) j, Q; c
文件名称        说明& O% U, K( H3 C4 m2 D# m
main.py        Python 代填的执行脚本。7 M" I" X. m7 N% n! F# M
icon.png        Applet 的图标
+ P' W" S7 t  z4 ~$ t; e' ?. Z( ~manifest.yml        Applet 的元数据。
0 e/ k1 h+ B# Bsetup.yml        拉起程序的安装描述。8 @' p9 C: W$ h& p  |, ~1 a) m
i18n.yml        对 manifest.yml 的国际化文件。
: K9 d- L, @5 W. b1 }- I, @3 D4.2 元数据 manifest.yml⚓︎9 N/ z3 e. B/ N$ ^% p, f, C7 y: S
manifes.yml 定义了 Applet 的元数据,如名称、作者、版本、支持的协议。
2 R. X. V% g6 h) t. |8 @  }' T$ V: q$ ^
name: mysql_workbench8 (required)
  i# u. G  K+ B4 K( d" L5 xdisplay_name: MySQL Workbench86 W4 S+ j- p/ R9 B1 b3 [& [
comment: A tool for working with MySQL, to execute SQL and design tables (required)& j! c$ ]) V" t* |; t6 W
version: 0.1 (required)
# D  F* |  `' Pexec_type: python (reserved,暂未使用)) P" f0 Z( ~* L; f0 O& D
author: Eric (required)( M; V- f3 O0 \4 Q* J" ]) m
type: general (required)
6 J. o* m* X6 @. J8 O* f. mupdate_policy: none (暂未使用)% N' I2 |8 O/ C5 ~  }3 {' J
tags: (required)# c5 u+ i4 R+ `* f$ _
  - database3 z# i6 V0 N- I( @# B% d
protocols: (required)3 I# m9 Y! a. l4 `3 X
  - mysql4 R1 t* `. ~9 U8 B8 |8 ~  m* y
详细字段说明:
9 q0 Z% \5 _2 [字段        说明! W% G5 S3 H( k8 D" g" K6 {  z
name        名称最好是字母数字,不要包含特殊字符。3 L% B# r2 L  X; _2 ?
protocols        此 Applet 脚本支持的协议。3 ]  I! I9 V" g$ {
tags        一些标签。
% C  Z; i; S! Y8 [type        主要是 General 或 Web。
+ z# D; Q* m3 x1 e, z# a% Pi18n.yml        对 manifest.yml 的国际化文件。
" o8 W8 f( K5 S" U# W4 T4 l4.3 安装条件 setup.yml⚓︎
3 o) j1 C1 e! f* d6 Hsetup.yml 定义了 Applet 拉起程序的安装方式。
, D: h" r" M: m5 P1 ]3 h. v" b* l
) q' F" C. Q6 a4 Gtype: msi # exe, zip, manual
: _8 _5 S" f2 I% C2 t$ _+ Wsource: https://jms-pkg.oss-cn-beijing.a ... y-8.0.31-winx64.msi
3 ?% H/ B& K( E& n# ]" o. T$ \arguments:
4 T: w* Z: q+ h) O& \9 J  - /qn
  D  ^( D, j6 S# `8 p/ N; Y  - /norestart
4 a( l& }2 ]. M9 `/ a0 [destination: C:\Program Files\MySQL\MySQL Workbench 8.0 CE
2 M- s- R* f# R0 H! b7 a! [: R$ Qprogram: C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQLWorkbench.exe
; E% o8 `1 J9 e* o: x1 b' rmd5: d628190252133c06dad399657666974a6 X! E" K) b: i. }* X, @7 u
详细字段说明:
! U/ b$ w% @, I% \# V字段        说明3 n  |' W( j! Q+ f* W" d
type        是软件安装的方式。, I: `/ `* p) e2 X" i' U
msi:安装软件。
# p4 `; ^+ R# gexe:安装软件。- @! n9 A, o  c9 E6 N8 n
zip:解压安装方式。0 a. m" Z5 ]# N: a6 R
manual:手动安装方式。7 A6 G2 l5 L3 E' }5 b
source        软件下载地址。
( Z% ^  }* |; l* i5 darguments        msi 或者 exe 安装程序需要的参数,使用静默安装。
( a4 W1 B# G5 ?" ]/ z5 K; J. Vdestination        程序安装目录地址。' t& ?$ k, e7 P& f: K) [
program        具体的软件地址。5 Z& I% |/ W6 c
md5        program 软件的 md5 值,主要用于校验安装是否成功。
' S1 l1 @3 U# [; E6 X( k如果选择 manual 的方式,source 等保持为空,可不校验 MD5 值,需要手动登录 Applet host(应用发布机)上安装软件。
$ E4 n0 g0 k; Q  c; E4.4 脚本执行 main.py⚓︎
7 f2 D! [3 T3 G% i' ]' B+ gmain.py 是 Python 脚本主程序。4 G9 r. ?4 n/ W$ M2 N3 J0 M
JumpServer 的 Remoteapp 程序 tinker 将通过调用 python main.py base64_json_data 的方式执行。
* {" ]3 z1 b! \4 ybase64_json_data 是 JSON 数据进行 base64 之后的字符串,包含资产、账号等认证信息。数据格式大致如下,依据 api 变化做相应调整:
0 k8 W. l9 S5 z! y4 r/ Z6 {) C9 R$ o: L/ G; k' \9 G) ]
{
/ k( @5 S2 c; k  "app_name": "mysql_workbench8"," m1 `" [# ~  X6 p$ U2 b+ _8 u4 p
  "protocol": "mysql",, n. F4 T" P  S  Y
  "user": {/ p3 {, y  {0 S
    "id": "2647CA35-5CAD-4DDF-8A88-6BD88F39BB30",/ O7 H/ K7 r5 [- l; y
    "name": "Administrator",5 z) x  u0 d4 Q6 s0 l' m
    "username": "admin". E& g9 r0 @% O: J' c9 Z% g
  },2 I5 ?6 g6 z' g9 _% O
  "asset": {
0 o6 [. V% [3 d% V% E& m% ~    "asset_id": "46EE5F50-F1C1-468C-97EE-560E3436754C",' y  a- F( K* X1 e/ K" s
    "asset_name": "test_mysql",
$ h) e1 v4 m/ p0 |5 j4 l: ^    "address": "192.168.1.1",1 }. D' j$ \0 g) J: ]& I+ u# e/ J  m
    "protocols": [6 H) i* f) n  j. W; }4 i4 h
      {
/ }8 O2 g/ b* Y6 ]) B7 U# O6 @        "id": 2,
- r7 E; I" E" l% B, p+ S( @8 C        "name": "mysql",
: E4 n/ s5 [' ]# }: K        "port": 33061 M" `2 x# ?- g* A9 `
      }
2 E5 r8 l/ @! _$ z2 P5 {+ J    ]
! [2 J' k" V, c- S1 }+ p3 c$ [  },
  G0 S: m2 z' }4 L' y5 A$ F6 D; A  "account": {
" u' t5 W5 X) l, T/ l$ s/ F    "account_id": "9D5585DE-5132-458C-AABE-89A83C112A83",8 l% ?% u7 f; g
    "username": "root",
  X0 f8 x2 v; v' Z- G    "secret": "test"' J' D0 {% W- q
  },$ [4 f! C2 `! {% C: L
  "platform": {
0 O2 d  ?3 S* J7 @& a    "charset": "UTF-8". s. I8 t2 z% S' k( K' C# Y: F1 t% \
  }3 i- R) c9 ^' }4 i5 [) G  {
}2 V$ |7 o% J8 I) Q8 n2 J5 r4 R

" u# z: g6 C) y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:48 , Processed in 0.023555 second(s), 20 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表