找回密码
 注册
楼主: admin

jumpserver集群模式部署

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:11 | 显示全部楼层
部署 Elasticsearch 服务⚓︎
, p; ^3 E% S: |提示& E0 r- _0 \$ u, E

5 x* Y0 G1 S8 s: M" O9 S集群部署请参考 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)/ @+ V, g* w+ m. ?2 F) a
1 准备工作⚓︎
8 {6 [$ R% N4 Y9 m6 N& w1.1 环境信息⚓︎
/ F2 {& K+ t' `, HElasticsearch 服务器信息如下:& ?+ O& h+ N9 s
, N, Q$ ~( Q) O2 z+ I! \1 R2 u) ]) A
192.168.10.514 O  b1 j- q' P
2 安装配置 Docker 环境⚓︎
9 M) ?$ C" F  m0 Q9 O  q0 C+ S2.1 安装 Docker⚓︎
7 [- N. E5 G4 w; F
9 s4 J- o, o- l; I; M. Gyum install -y yum-utils device-mapper-persistent-data lvm2
8 Q/ T6 E/ @6 H2 q4 `4 nyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  {3 `: q) g# W2 v- C6 _- vsed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo1 i0 }+ B9 y! G' F$ z& l/ |
yum makecache fast
4 n$ `6 W: ]+ d: n( C$ h' ^yum -y install docker-ce
  l4 T9 [+ g/ [2.2 配置 Docker⚓︎! r9 z" [) z- V" }% H+ L' h8 b

2 |. A8 p  S! P+ G' t( |mkdir /etc/docker/) H* y) ?  {0 h1 l  N# L
vi /etc/docker/daemon.json7 E9 c3 C7 H3 L" m8 c$ U

; k% q/ i! |, R8 B' Y{
; K. W+ u' H1 I* `2 \  "live-restore": true,
4 ?7 X( Z# e  G$ d4 m& f  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],
: i  A' v$ \( p$ V- _7 p  "log-driver": "json-file",
2 o' ]! |: p" G3 X* H  "log-opts": {"max-file": "3", "max-size": "10m"}
; b( E! T. h+ X+ Y3 a) a" q}7 B" B5 w! ]5 C) H$ A& ^
2.3 启动 Docker⚓︎* p4 H' m1 A9 S2 l  r# X  Y) l

- t. J% a% ]6 E/ Gsystemctl enable docker" @  G+ }) y. Q, r9 A
systemctl start docker
! v0 ^) c3 V% k. u* f2 R& S# O3 安装配置 Elasticsearch⚓︎
9 [! {1 V- z& r/ \  K  `0 C3.1 下载 Elasticsearch 镜像⚓︎
8 F& }% e6 f% e  A6 ?
  B, {# u& b3 H+ \  F& Cdocker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6
6 O1 I4 K* u2 Z! Q; |0 W9 Y* F* r" Z/ D' W" t' F+ }2 U5 M
7a0437f04f83: Pull complete1 a' e9 b6 O: M2 p9 x4 j1 d
7718d2f58c47: Pull complete
0 ]. O" z7 w0 qcc5c16bd8bb9: Pull complete
! C1 t. k" O" J% ?4 Re3d829b4b297: Pull complete5 C. k/ \! R  w) E/ L+ s2 s9 |0 p
1ad944c92c79: Pull complete  l  G; t; J; c5 B" t& H% @) w
373fb8fbaf74: Pull complete! [" k$ \* \3 B4 u6 A7 r0 t) h
5908d3eb2989: Pull complete) i1 \8 q* c# y# ?4 ~3 T
Digest: sha256:81c126e4eddbc5576285670cb3e23d7ef7892ee5e757d6d9ba870b6fe99f1219
+ g4 r: E$ D9 O3 |) yStatus: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.17.6; Z; Q) \7 W9 X- b8 [
docker.elastic.co/elasticsearch/elasticsearch:7.17.6
/ h. U# `' Y3 F7 _; i( `0 m. ~
, t* F+ l; j5 \4 h3 d* e8 u3.2 Elasticsearch 持久化数据目录创建⚓︎
7 e( x8 [. I- G+ h% U) [+ U. e  q' {7 V9 ~2 ^# C  S% `
mkdir -p /opt/jumpserver/elasticsearch/data /opt/jumpserver/elasticsearch/logs! l; r' g! j5 @7 p0 U& e
3.3 启动 Elasticsearch 服务⚓︎
; K' I# h" l5 D: r" S0 h* P7 B
* E9 j6 d4 w) g5 o, {## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失2 H% W) i2 M, V- [& X0 ]
# 9200                                  # Web 访问端口( ^. w: h4 i: v
# 9300                                  # 集群通信' w& i. O! @  }3 x
# discovery.type=single-node            # 单节点( B6 F; _1 X- U
# bootstrap.memory_lock="true"          # 锁定物理内存, 不使用 swap3 R& q: _" A6 U9 l; }# x
# xpack.security.enabled="true"         # 开启安全模块: P% u# Z' {& Z$ h
# TAKE_FILE_OWNERSHIP="true"            # 自动修改挂载文件夹的所属用户
- S! l: i, d: J+ b0 T# ES_JAVA_OPTS="-Xms512m -Xmx512m"      # JVM 内存大小, 推荐设置为主机内存的一半" i2 c! a5 n% F/ n& {
# elastic                               # Elasticsearch 账号- U) F) g" W& M: Z7 N
# ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q     # Elasticsearch 密码: K2 T* m2 Q1 [7 c; d5 Y

; j, e" q, z* f2 a5 z. fdocker 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! Y/ n. E5 g4 B# O' k
3.4 在 JumpServer 中配置 Elasticsearch⚓︎9 f: t. |1 `3 e* S; z
访问 JumpServer Web 页面并使用管理员账号进行登录。4 e2 @+ k5 I/ s6 G
点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [命令存储] 下方选择 [创建] 选择 [Elasticsearch]
2 X# ^; S& v, Z4 Z+ w根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],命令存储选择 [jms-es],提交。
3 c& X# Q" G1 {1 ^+ G/ y# K+ u选项5 o4 X6 I2 B# y, b% Q) H

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:12 | 显示全部楼层
注意事项⚓︎6 J4 I- f& `  S( s+ K
1 关于集群模式的环境升级⚓︎' F/ h- T  s/ C5 C  ^
更新前请一定要做好备份工作( |/ d6 W; s! c0 [: S2 V" M
  z$ o& G0 c0 t8 G8 r
升级前请关闭所有 JumpServer 节点。  Y+ E3 {9 z5 N3 z
在任意一个 JumpServer 节点按照升级文档完成升级操作。! y! `" c3 q; x. ?  l; H2 r* H8 N: a
仔细检查该节点升级过程确保无异常。" Z# @  y8 ~- x; ]6 `
然后按照升级文档对其他 JumpServer 节点升级即可。  m' h8 a+ W" ?! @* d
从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录。
" E- C  M3 m  O4 m7 r) U8 \% {( D- s  O. s
cd /opt
% `" M7 v* r6 X. ~0 ?tar -xf jumpserver-offline-installer-v3.0.3-amd64-246.tar.gz
) ?" u3 F/ J9 b$ rcd jumpserver-offline-installer-v3.0.3-amd64-246( o6 k5 C& |% B) b8 w* v6 V/ F8 K* f

) U1 t) T' m6 y0 \& _) }0 p  Q# 额外节点可以设置 SKIP_BACKUP_DB=1 跳过数据库备份, 第一个升级节点不要跳过备份
# ?, T/ h4 I! H, m0 S8 s( B( u' uexport SKIP_BACKUP_DB=1& C- [% e  i' L* J
./jmsctl.sh upgrade
& Z! k: R4 N3 g7 z! [! [./jmsctl.sh start
: h5 v% A$ @9 C6 X) R

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:13 | 显示全部楼层
在线安装⚓︎
) U' J! ]5 S$ d7 N& a& G4 n* }1 环境要求⚓︎: i# @  S5 a- h5 q$ {
Kubernetes 1.20+: m& k( |+ U: l9 t
Helm 3.0, _1 Q% t2 `+ U; V7 }+ P; Y5 x7 ?
2 安装部署⚓︎1 a3 i  m6 I& \- b7 m+ R( U
2.1 添加 JumpServer 的 Helm 源地址⚓︎
7 b2 a0 x" y7 ^. m, ^& I! ~5 `- P2 F0 [6 W1 ~# M: [
helm repo add jumpserver https://jumpserver.github.io/helm-charts
% w7 E6 O7 ^) phelm repo list9 ?- c! y9 F( S: c7 b
2.2 编辑 JumpServer values.yaml 文件⚓︎
" _  z- h+ r! f1 n) C& \1 Z, s: f+ m/ z, k9 ?9 ~
vi values.yaml
" j4 F' _( V+ b) D4 {- [& c3 n2 l9 Z( u% H
# 模板 https://github.com/jumpserver/he ... pserver/values.yaml
; ?$ p. n( Z0 z$ t# Default values for jumpserver.
4 o$ L6 j6 x7 H# This is a YAML-formatted file.
" M* _" k" p% H- E, `0 G+ @# Declare variables to be passed into your templates.
/ P* l/ h7 P; q$ V# @2 k% Q3 J: M! U/ S6 d
nameOverride: ""0 I& A# T- ^, |) a1 p3 m7 J
fullnameOverride: ""
( a: [# m; Z/ Y+ Y" |* u; y" ?. Q0 {: m+ D$ e
## @param global.imageRegistry Global Docker image registry
: ?7 @# k7 H; B## @param global.imagePullSecrets Global Docker registry secret names as an array2 r5 K. t( }- M: ]' M2 F2 B
## @param global.storageClass Global StorageClass for Persistent Volume(s)0 e/ m3 F' X2 w* g# J1 b( ~
## @param global.redis.password Global Redis™ password (overrides `auth.password`)
( W) {8 @2 h" ]4 f' O* U2 g##1 A2 r* m, C+ E& l, F
global:; C& b5 ^/ K/ V+ y7 j5 X1 Q! D
  imageRegistry: "docker.io"    # 国内可以使用华为云加速8 z6 ]/ J; W+ l" K% h# v
  imageTag: v3.0.3             # 版本号
% t( V$ K2 J7 I6 L& ~  ## E.g.
  T- \& a4 K# T  #  imagePullSecrets:8 q! M2 }- L4 L. L% E' }1 B% ^* q; }
  #    - name: harborsecret6 w* }! r6 x! |% R. a. O* G: E
  #
2 P# m9 x6 y( \7 F: G" C' I  s4 V  #  storageClass: "jumpserver-data") {; c# X# \: l9 w% X
  ##( ^! r6 J1 ?) i: Q. X0 F, `
  imagePullSecrets: []9 F8 ?; S6 H' m6 l* V
    # - name: yourSecretKey5 p& y+ a# X6 D* I, G3 n: @) f
  storageClass: ""              # (*必填) NFS SC* G9 Z5 v: \- r- [8 c
' B2 y* Y  L. q6 c8 m- I
## Please configure your MySQL server first
* v/ X& S( l: G/ W+ z: v+ g## Jumpserver will not start the external MySQL server./ ^* \# L3 J& A& _
##" w& d; |! v8 r7 u, U) @) x" s
externalDatabase:               #  (*必填) 数据库相关设置
" N" N! R; ~. Z$ H4 k4 X$ H4 E  engine: mysql
- m1 C; o0 P7 C, e  host: localhost
% Z! ^4 k* q. ]' x# y  port: 3306
" u1 Z& k6 j  |9 w: ^  user: root6 a0 P* y5 q9 n: t$ W( b9 z6 _4 [
  password: ""
* |) C" b! a: j5 Y3 e  database: jumpserver- Z/ r4 `2 l5 u# {. Z% |

1 {) V0 `$ P# u## Please configure your Redis server first+ R8 O! E7 w' }8 X, V4 S) C
## Jumpserver will not start the external Redis server.( x+ m4 r( n' }/ B
##
" P1 f4 C( z, p4 zexternalRedis:                  #  (*必填) Redis 设置
; _. x4 _, J- s- C$ E  host: localhost
/ F# V% W4 \. G7 E/ D# k5 a  port: 6379
6 s8 R5 R9 H. l3 m+ G  password: ""  C8 h+ ~& `% N7 c9 a$ U7 V! ?
7 u: |2 x- |/ T2 W5 w
serviceAccount:7 S6 N2 y. t' B
  # Specifies whether a service account should be created/ g2 h1 v8 }3 H9 f8 o9 W( M
  create: false
8 D' @  K2 f# S' {  # The name of the service account to use.* ~! C: Z5 E2 }3 ~
  # If not set and create is true, a name is generated using the fullname template
% Z; \+ p- K) Z) h. a6 \& s. ~  name:
+ u+ C# {5 F/ b& F$ [4 Z$ [" x  B6 X7 P" J! }! x
ingress:
- z4 G6 Q5 Z& N  enabled: true                             # 不使用 ingress 可以关闭$ Y- k# T* P  N
  annotations:: k- V. ?7 Y) {% H- t
    # kubernetes.io/tls-acme: "true"7 r6 T! I- f0 ^  j& {
    compute-full-forwarded-for: "true"
( V; [; p4 l' D3 g7 z5 Z    use-forwarded-headers: "true"
5 }) f' u: S# Q' f, y    kubernetes.io/ingress.class: nginx, Z- m1 ~$ T* g& d$ i# d
    nginx.ingress.kubernetes.io/configuration-snippet: |
( c. ~7 V' |* i- Y2 G       proxy_set_header Upgrade "websocket";6 {$ f/ V' T) U; a  E) \
       proxy_set_header Connection "Upgrade";8 ?) e, T% N: d: m. n9 t7 n; |% b
  hosts:1 n( A5 u, J( r" S0 i3 t
    - "test.jumpserver.org"                 # 对外域名1 [; Z) k- H7 V! i' g
  tls: []  y: h' C! E( e( F2 m/ o
  #  - secretName: chart-example-tls+ F. u% t9 k" g  H: k
  #    hosts:# h% X2 M4 c* Y0 a. L6 U2 \
  #      - chart-example.local
  {( z  _& n1 `6 {7 g' g- t
( S4 P% y! ^3 Qcore:
! T1 p6 t3 u/ B' _6 z5 j2 h  enabled: true6 g- c# k6 Y; H& D/ o- [
/ u# L( b! V( h8 Z: `3 T3 F# k; U' K7 s
  labels:7 U2 h$ A$ A' |- Z
    app.jumpserver.org/name: jms-core
- N+ c( ?: F5 c/ i+ r7 v+ |
2 r- t' Q  G: \  config:
5 H  i( c4 {$ i5 k/ C$ ~    # Generate a new random secret key by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
5 Y  x2 j% {; ]' s2 H) P    # secretKey: "B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy"
( \' m2 m" c  f    secretKey: ""                            #  (*必填) 加密敏感信息的 secret_key, 长度推荐大于 50 位- _" j/ F) F- q/ X$ \- Z8 ^; m- P
    # Generate a new random bootstrap token by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
  j6 `9 J' j5 B: x& J- i  p    # bootstrapToken: "7Q11Vz6R2J6BLAdO"
* S) q+ u. ]8 A    bootstrapToken: ""                       #  (*必填) 组件认证使用的 token, 长度推荐大于 24 位  u3 j. m$ i4 U2 n0 f. W
    # Enabled it for debug' d$ I. o6 a- ^/ K  I) F
    debug: false
7 A2 `' u4 [4 Q    log:
: g( d7 c  e# ~8 K3 L      level: ERROR
4 Z5 r: c* n6 O* C% L
5 G" o" b! a% t* ^) Z  replicaCount: 1$ C3 B. q. b' U, |( [, e& `

8 ~* f: D0 ?  q/ f% L  image:
" @. d# A* C8 ^* J$ b9 _    registry: docker.io) N  }5 k( y& b% t- C3 M9 G
    repository: jumpserver/core* j2 s  \6 x) Q0 I
    tag: v3.0.3
) x0 Y  p& m% K5 v5 S6 U% B$ u    pullPolicy: IfNotPresent, r& [9 o  j5 [: O
% {3 ~4 e$ h5 j! e- L' l. P
  command: []
$ }6 h' z- G3 B( x: i. M5 A3 l- N6 p# Q9 p6 {: v* |
  env:
* J& }! j5 F. O, I% Z    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#core) ~/ L; x& W( T2 |! R1 W  Z7 d
    SESSION_EXPIRE_AT_BROWSER_CLOSE: true# s  R( L6 q) J$ n  u" Y
    # SESSION_COOKIE_AGE: 86400
4 o& S8 d; F+ i5 j; v+ U    # SECURITY_VIEW_AUTH_NEED_MFA: true6 h+ O6 J: h, T+ x

) e3 \0 S# p9 t7 q  livenessProbe:1 F7 U$ H; c2 Q6 V- x! c* W' H2 }; [' ^
    failureThreshold: 30; y  u9 w2 b9 M$ s
    httpGet:
: Y5 ^% r! ^. n, |5 O- W      path: /api/health/
9 U; O7 R% r: _+ J1 u: @# ^0 Y      port: web
8 i1 J  _/ F3 n% y
6 K8 L; o5 Y6 X  readinessProbe:3 ^6 w+ V/ L! @. ?. g, p
    failureThreshold: 307 m# O$ z6 o( H: M
    httpGet:$ S  v( e2 u. i0 A& r
      path: /api/health/0 l7 D. z- w# A. w  _, J6 s
      port: web
& X' j8 P' J3 a2 v" Q
' P% y1 i8 Y# H* d6 p  podSecurityContext: {}
8 J! n3 i: g, y! L- |; R, ]) I    # fsGroup: 2000
# W2 q, c8 N' o. J) _5 Y! d
6 h4 o$ r- e7 a# y, G; U  securityContext: {}# s! x1 v( e3 _  Z2 N# z
    # capabilities:8 l& ]5 Y8 \( A, N- @
    #   drop:' b1 F1 n7 K  }6 T
    #   - ALL; I& R( a5 k5 @/ P4 w" o
    # readOnlyRootFilesystem: true
! T2 S4 d; E0 U% F$ V) j    # runAsNonRoot: true
- C% @4 u4 C2 x# g: f    # runAsUser: 10003 Q4 w0 R& f7 w+ A: U6 |
& M) y; g$ c, W* s9 g5 a! F( }7 N
  service:
3 P/ ~: {+ y$ r. r+ A! Q    type: ClusterIP
0 J' @$ {& s1 ]1 ]% }5 I    web:4 i( y% u' g1 Z5 ]2 l! \4 s5 K  I
      port: 8080
  ?: [1 ^% R  M7 _3 ]8 |6 ^) X6 I
. P# I0 R0 V% g1 X  resources: {}
  G$ E+ B9 \( i. L    # We usually recommend not to specify default resources and to leave this as a conscious/ z$ N2 |" B0 ?" c- K# Q2 T/ _' d
    # choice for the user. This also increases chances charts run on environments with little
; v0 B# l/ z. |" J8 o5 u. u2 D    # resources, such as Minikube. If you do want to specify resources, uncomment the following
5 N: J7 v- v+ M, P0 O9 E    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.) j% m7 H) T1 T; t
    # limits:
3 p$ w3 d7 h9 i7 Q    #   cpu: 1000m2 \( f+ J! D5 Q
    #   memory: 2048Mi
/ L7 W3 F3 b1 U  t    # requests:& M' ], e. f7 q1 c/ Y$ H
    #   cpu: 500m
! u4 i. c3 t7 p0 O    #   memory: 1024Mi5 J5 I6 D+ U7 i4 Z
  {! Q, `/ u  e1 C
  persistence:9 d, H( t  K. B, E  l" y4 E
    storageClassName: jumpserver-data" X' r3 M! g0 \7 h6 A9 l# y& f8 a
    accessModes:+ i. L( N/ Y+ m6 i2 k' |7 k* |
      - ReadWriteMany; u9 t) E" d- Y& }
    size: 100Gi6 \- B! E$ [8 o' R  Z
    # annotations: {}' V9 M1 {& u3 d- @2 V# n& j
    finalizers:
- H. N  k9 ~1 p* U7 j9 U2 W      - kubernetes.io/pvc-protection
: k: d9 B4 E  e+ N2 o7 _& C6 F    # subPath: ""
5 ^9 e7 Q  J  I1 _, w& [& t) \# n    # existingClaim:( G( m. h, A1 N' e! y
% I3 ?/ W/ `# G; |, G- r
  volumeMounts: []& C9 T4 s4 S( S8 ?' |: d) \' S

9 O: P* C& X5 }2 q9 q3 A  volumes: []
- w+ \1 z( o. a  J' M5 Z/ q& o/ F
4 c1 f$ d( [/ P  nodeSelector: {}4 W0 f/ ~( a7 {) u7 B4 p
' W+ O( s& |4 Y- i: i
  tolerations: []
3 e/ B8 i" i( w' b
. z( S, i% J7 y0 H" I- _' P  F  affinity: {}
/ x( q" e5 l: M# s% m
. [7 {, W" X- f" W  Ckoko:) W8 G4 z6 K) Y
  enabled: true' y  P+ M/ H9 A7 l

$ ?: t9 }; r8 J9 q  labels:( Z8 k1 y9 a6 k$ E3 s, E! }
    app.jumpserver.org/name: jms-koko9 r8 N  L& ]3 |
. k& b$ t' Q0 \3 i# J+ {
  config:* k* f4 L8 C( V  _1 l
    log:
3 X! t4 m8 j6 j+ v4 M4 @      level: ERROR' Y% b8 ?8 j" I! g; n0 q

3 M1 D( z9 J6 K$ [3 Z! m0 Y  replicaCount: 1
. o6 e; z) Y# @8 R
# v6 B- C6 ^3 ]% |+ K  image:* l& x  c4 O- a- o9 W0 M2 j4 [
    registry: docker.io
4 G- F$ E* K6 f. Y. V, ~: M- s    repository: jumpserver/koko
; P1 S! ]8 L( r+ f* o    tag: v3.0.3
/ L, e$ P/ x# F4 l, N8 c  c. K* \  _    pullPolicy: IfNotPresent
' Y8 i) W' q5 i; u+ D' C, F; v" v, r% y; P* C
  command: []( z0 M' U1 d  I
( B3 r6 z  {( {  q0 d
  env: []
# m6 u3 D! N6 I* `    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#koko
/ }% H- ?& G, J/ b" d; Q3 u    # LANGUAGE_CODE: zh  z# v3 a( S# ]5 n
    # REUSE_CONNECTION: true  c, j) |  o( }: \, i: [' T4 K2 {
    # ENABLE_LOCAL_PORT_FORWARD: true
* o3 J+ e* C9 q& w: a  v    # ENABLE_VSCODE_SUPPORT: true4 K; r3 ^* y! e7 {- S% Z7 S; b
% }1 E+ q1 W0 t1 S# |' N
  livenessProbe:
' V5 W5 q4 q0 ?" A) w4 W    failureThreshold: 30
( g# g+ N1 v, e0 c! f    httpGet:
1 _4 X8 Z; ?2 C      path: /koko/health/' z7 ~5 P, N" I4 K
      port: web
- j, b- j9 E+ z$ ^
$ N6 ~" k) C5 ?( v; L2 M0 S& }: g  readinessProbe:
8 C, H5 Q; J, c/ X# s3 d5 ~    failureThreshold: 30! l8 D+ _: }" N. f) _: _3 f9 R7 c
    httpGet:
# z5 T8 ?/ j* o- ~# B/ h      path: /koko/health/
8 E$ P8 ]5 W9 w6 e      port: web
: d( C. J* k' Q2 A7 i) o! M% H& {  r' G5 f* ^+ X: W4 F
  podSecurityContext: {}
. F, _" E- @- O0 W  {4 K    # fsGroup: 2000
8 h+ t4 H5 F- C1 Q" A$ K) u1 o) @  P- d
  securityContext:
* Z# o) e0 M. S1 D- i- S    privileged: true
% Z+ M. }0 }2 F* L" X3 z- E    # capabilities:' e, b3 n+ ?0 A2 c
    #   drop:9 N9 o3 G! [$ M
    #   - ALL8 j3 }# M5 `0 B$ [, v' p# L/ Z8 U0 T
    # readOnlyRootFilesystem: true8 s" O# c3 Z/ q. y" V
    # runAsNonRoot: true; f4 V! I7 I" I
    # runAsUser: 1000
- m" l# a  c, s0 }; D7 K. ~) r0 {' G/ M3 V/ b/ q4 O
  service:- ?0 o  p, D2 a' C# W0 X
    type: ClusterIP
* @0 m  F. X' ]7 X' P- s    web:8 ~# k7 H2 R$ D! B, J9 v; C
      port: 5000
3 T9 X$ K) }9 P* D& r; `5 S" |8 x    ssh:" k) [1 r7 c% g. j1 |5 G
      port: 2222
9 l/ Y7 r4 K  K4 J3 F- i9 d
' e& f" |/ Y8 z# X4 a  resources: {}
' z' b, Q) q+ m    # We usually recommend not to specify default resources and to leave this as a conscious
+ z8 f& e. f! P& Y" k) k2 c    # choice for the user. This also increases chances charts run on environments with little
: T, l* j8 P, E( ]# t" ~    # resources, such as Minikube. If you do want to specify resources, uncomment the following8 B0 ?: ?; X, f3 y5 }0 j) Y
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.2 R8 _4 _6 Z: V7 w4 a: ^6 _
    # limits:6 x9 D2 O/ M0 m% |2 Q0 b0 x# H
    #   cpu: 100m( A3 q: r" g9 M  m$ o
    #   memory: 128Mi1 c0 J( g9 M7 {$ \$ s2 v
    # requests:
/ B2 a# x4 I- b3 ]2 Q& @. m    #   cpu: 100m- J( p& E- h9 Y% ^1 Z2 S' [2 `# h
    #   memory: 128Mi
/ K- O$ y2 j0 w
" M8 p- b1 \1 P: p7 d  persistence:
: C- e/ u2 ^' K, l  F0 I6 m/ V/ ]    storageClassName: jumpserver-data
( x* G7 I5 ?& N2 n" \: N8 D$ a  |    accessModes:
" C# m& ^* a7 M* u* c; U8 E      - ReadWriteMany
- I: u$ H* j, W  R    size: 10Gi
+ r( e8 {5 p; s* G! P    # annotations: {}
9 U( D( w* x4 E  l    finalizers:, D$ k  ?! l6 }% a
      - kubernetes.io/pvc-protection
4 W8 R" k% k4 p5 a1 X
0 G% A/ {0 f3 p/ z  volumeMounts: []
4 ?% h2 F/ e5 K/ I1 f. r: a2 z7 K; P& b8 K0 w( n
  volumes: []
/ n. ~+ {7 t# w8 L9 D. [. c2 @0 |2 i# i8 O% d& Z. O4 k, l6 w6 b( V! c
  nodeSelector: {}  f1 A9 C1 _; @% N2 {

# b# c4 ~3 g$ \- I" `( C$ P" `  tolerations: []( y# h9 E; C3 m) y2 n" h
3 K  t8 W3 \% v5 u+ y
  affinity: {}( h4 o+ L( i: L. r+ z9 ^4 d

+ z0 ^( g# X$ j  F; d# Elion:
& ^; d9 q6 U" J3 s8 a# F  enabled: true/ ?; N3 A" z6 C/ n; w  B0 R  a: X( }

4 h; e3 T6 u- F0 U: Y4 r  labels:0 j# X5 b& m) Q
    app.jumpserver.org/name: jms-lion2 t8 y/ [" n/ k) |9 b( }
" |( g6 i1 z' h3 S! R
  config:- s/ _  C0 P0 B
    log:6 \% \5 V, V* b- D& W2 h- K" M
      level: ERROR
, R4 V, F5 X" r0 r8 d
8 k3 u. l& U% Z8 ]; p  replicaCount: 1
; d/ e0 Y4 o$ e# O6 x! Q; _$ v8 i6 z: m5 g( w4 _) L+ W& {
  image:
( |' `+ x7 H! E  |    registry: docker.io
9 H9 A7 V4 l  G7 P0 o    repository: jumpserver/lion
8 ~) Z* K" |9 D' Y4 `% A2 M* g    tag: v3.0.3
. Z2 u) Z3 ]$ o4 @! ^    pullPolicy: IfNotPresent
6 @' j. d6 \6 W# h! Y- i
5 ~  v6 O- ^2 ~% h# b7 x  command: []
# q& Q/ H6 s6 I
" U. X7 p; X% T1 S  env:
# A+ h* x3 a7 ^' J    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#lion
6 M& ^4 N+ k* y' v. p! F    JUMPSERVER_ENABLE_FONT_SMOOTHING: true, O  Z! h* w) X2 O% _+ O$ H
    # JUMPSERVER_COLOR_DEPTH: 32
' [7 z) P: _! e) _( ^    # JUMPSERVER_ENABLE_WALLPAPER: true
& v* Y5 W# \9 m0 m% x2 c    # JUMPSERVER_ENABLE_THEMING: true: a. |2 v# G, y
    # JUMPSERVER_ENABLE_FULL_WINDOW_DRAG: true7 K- [! X" g" w6 \2 X- M! F- B
    # JUMPSERVER_ENABLE_DESKTOP_COMPOSITION: true
! j& D4 ], ?- o4 a    # JUMPSERVER_ENABLE_MENU_ANIMATIONS: true- d6 J: q# u: }3 c) ]5 h

" j) k1 \4 M4 X& ]! K1 O: [  livenessProbe:
. l# N( l4 z+ v" |! {$ v    failureThreshold: 30* |) _, Y" H) K( ]
    httpGet:! w* b3 p# r  r0 h2 u6 ]! y8 W
      path: /lion/health/
, F+ ]( a+ o* F. M* w: l9 b0 l& M      port: web5 O6 l6 l, _% k/ A; r
! P2 r& j6 D2 A5 J
  readinessProbe:
" R3 m1 V; G  v. b, i" v    failureThreshold: 30: b% c$ T% E7 _  }. }
    httpGet:* k5 |- R, r: Q
      path: /lion/health/' P$ B+ l- C8 d: l, V) G6 r
      port: web: S# W: c; J5 n& J5 ~
- A- R0 M9 Q6 T" E
  podSecurityContext: {}
5 f9 |, ~) s4 B( t    # fsGroup: 2000# z( j8 O) P6 s  i; J' O1 F, A
' Z/ z- |( l. F  `# E0 _1 l: O
  securityContext: {}# q1 s8 h% c0 ^  k# k* |6 V
    # capabilities:
7 s! [( Q& u4 A; k6 ]5 j5 X    #   drop:$ |# E1 X& e) O; [* Y  q7 [
    #   - ALL
5 X  G% z: t* r" \    # readOnlyRootFilesystem: true! V$ ]. @$ k' R7 H) h! @
    # runAsNonRoot: true, ?+ n, y( S4 f7 `4 X
    # runAsUser: 1000
! ?4 g! g5 h7 }7 [. d# |; ~
- e/ _8 J" K  I- a$ z2 K  service:
) R- {+ m" x4 `+ z% t    type: ClusterIP; ^3 h# a9 |+ v' G: R3 |5 ?+ M
    web:) W4 P! |: [9 t3 Z' j. K
      port: 8081
% p- A& Y& ~8 x2 o& L0 j4 ^
# E$ T/ @* C" h5 H  resources: {}- W$ z1 _9 }7 D  [! U3 ?, W8 }* s" ^7 {( a
    # We usually recommend not to specify default resources and to leave this as a conscious9 Y/ ?( P* c$ p) _( ~
    # choice for the user. This also increases chances charts run on environments with little
2 X$ t3 j$ t3 P/ ]    # resources, such as Minikube. If you do want to specify resources, uncomment the following0 y5 O1 l9 ^* a3 D0 ~
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
+ ^0 S- J) w; P    # limits:) y3 _7 }6 B" x* E5 n9 Q' }2 z
    #   cpu: 100m$ [- p% v, y. u
    #   memory: 512Mi
) t) k5 p* a. z5 s' B) z    # requests:
0 o" Z8 t1 B' K* }2 r    #   cpu: 100m4 ?+ w% J. V, a7 a! k* r
    #   memory: 512Mi
# g& h9 j; D* n% q2 G0 E7 C$ D" t* B$ M8 ~1 S
  persistence:
4 z' Q4 n" X/ }    storageClassName: jumpserver-data
, U7 _6 W% o+ C' I& f    accessModes:6 m7 A9 ~1 Y1 ~. T; {) r
      - ReadWriteMany5 c1 I# p5 G7 h# e  j. u: O
    size: 50Gi5 k; U$ p+ o: `
    # annotations: {}
- W/ H; K7 C* m' _! e* w    finalizers:
2 H7 c0 i0 I' @0 ~/ P      - kubernetes.io/pvc-protection
) \! w6 X( Y! ]4 b' f$ V4 M9 J& R" f
  volumeMounts: [], e7 _4 v7 K. M# J

, }) r* b. L0 N  L4 s  volumes: []( h7 k$ S3 x6 N" l5 T

" Y; s0 d9 E$ T3 B& K1 C8 |  nodeSelector: {}
) m; H% y2 l5 D- ]: D
/ z; O* U: G  ~7 @2 |  tolerations: []
- Y+ D2 {; ~" F, p3 s+ t7 h/ Q8 R" H
  affinity: {}
% l* K) R! D5 c9 o, k8 o( s+ S. I! W' `3 q4 m
magnus:# U9 l# R* ~/ t8 o
  enabled: true
' P4 |$ e! r9 Z- L9 K3 y
) \( `- r! \1 n; n7 ~  labels:
/ F9 Q& B0 c$ b% O    app.jumpserver.org/name: jms-magnus' `5 l6 Y1 p* _) w

; m0 _% i$ |8 K  config:
( i& S, V) d/ ?! d0 _0 A+ T( c    log:5 D) C% Z2 g, N. X
      level: ERROR2 |. i% r% o9 C- i& N

; _: \" A' F* j0 h7 Y% P) I2 s5 G- F  replicaCount: 1
: X3 Y: a& O& c( B$ s! X+ x5 v3 n$ _
  image:! q0 {7 Q7 V7 u
    registry: docker.io; R2 T3 O( K: _0 N8 o$ R: P
    repository: jumpserver/magnus' R, Z# f" J% L# ]& e
    tag: v3.0.31 S9 j3 m" b. A( n: w$ l
    pullPolicy: IfNotPresent
6 G% n+ F) s' i9 c1 n3 b* ^
6 u. Z- n+ Q/ I3 J  command: []7 @; s+ [! ]! u$ k5 {. Y. r' L

1 L' ^% n, j8 H' S/ K; W  env: []
. C2 t2 Q+ |! r% z  ~. s# D& q+ s' t, N1 K* B- w
  livenessProbe:
# O; W. J  ^8 V# Q. P. O    failureThreshold: 305 Q: Y8 x, f9 W
    tcpSocket:+ y" a# n: l, n5 H% i
      port: 9090
8 g  N0 \% @5 B8 c+ ]9 Z, e+ i+ v) Z, j$ T/ V
  readinessProbe:
6 l3 f, m* ]% R/ `    failureThreshold: 30  [2 U4 G9 O% J! \
    tcpSocket:
: [& ^6 h; x  ?! b/ r: S0 ]% b9 q      port: 9090
" g8 a9 D; u7 ~7 L8 N! E" y
$ M" n+ i. Q- p. n( s. i  podSecurityContext: {}
6 v6 |' c4 N6 ?) w8 X    # fsGroup: 20008 S/ x. f6 x! B) ?- r" g& f
* L% ^9 w* Y. i, F" L
  securityContext: {}
& B7 w8 T; H( u, J5 w; p    # capabilities:2 O' |. g. L; w: ?' N
    #   drop:
. _( V! `9 s: r9 r* I    #   - ALL  l1 Z9 K2 a3 ^0 H2 }
    # readOnlyRootFilesystem: true1 i0 _% I2 u( g( N  n
    # runAsNonRoot: true
3 i+ T) `( D  m* u4 _% y    # runAsUser: 1000
' u, R/ G0 h1 x% T2 b5 m0 n/ o7 i2 L( i( u5 D
  service:
' i, @. O" [, p* _    type: ClusterIP
# l" v$ m7 K6 E. @    mysql:
. \5 h( ?! C& v; O3 [      port: 33061( n5 j1 `3 v1 w0 {& b
    mariadb:
  U+ i/ H& v( l1 [      port: 33062
0 Q- e1 Z/ Q3 A+ i. r. [    redis:
# Z- @8 I+ D% F+ |& i      port: 637901 R, E1 p! }  w9 D" E: o7 \! y) w
    postgresql:
! E3 D) h2 d# ]& Y* t      port: 543206 ]) }& b9 b9 b6 L: q' ^
    oracle:  v* @6 {, U4 Z; r) t7 t( C
      ports: 30000-30100
! Z" o. q/ T& Y2 T  j- F3 s, t
; X& I% X$ y7 [/ G' b  C  resources: {}
0 S' B( H# h6 s- y! g    # We usually recommend not to specify default resources and to leave this as a conscious
3 i* v7 i$ @$ H3 o) b, U+ G    # choice for the user. This also increases chances charts run on environments with little9 g, f* \# m" K9 M
    # resources, such as Minikube. If you do want to specify resources, uncomment the following( Q3 V8 g8 q  m
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'./ i4 {& G# u/ ]6 }7 Y& r: D9 l
    # limits:
  f! H1 C9 a' G% [    #   cpu: 100m; c- \* p' X/ W0 g$ n" j& s! ]
    #   memory: 512Mi) b) H. l- n, N; B
    # requests:
) }2 I  B0 Z5 M+ `, Z+ n    #   cpu: 100m
( M* D: t" e$ K& o$ y  d- h    #   memory: 512Mi  _5 T- U9 S5 v5 l' h
; }6 Y3 j% O1 X; n' I$ I+ N
  persistence:# I4 f" h" M- n0 r; Y. z
    storageClassName: jumpserver-data- Y( c6 \* O, Z; x( x, Q
    accessModes:
, H. G- {+ ^+ H* P$ M  q1 x1 Q      - ReadWriteMany: |" {6 s( q1 X4 M' }
    size: 10Gi' e. @" k$ x/ Y( I$ |! t# K
    # annotations: {}  l* Z* P, g' O$ v; n
    finalizers:
" i/ H  D- R: p( N! Y      - kubernetes.io/pvc-protection
$ M6 L8 L; A' C, ~. l
( @! S- _/ C) Q/ r  volumeMounts: []
+ B- E  _1 {; k+ O" D8 }: I
& K" E( A( f1 Z( P% F  volumes: []3 C/ f* }2 K* Z7 Z( @

/ t% T$ g+ D) c" w9 M- v  nodeSelector: {}
* Z: j" L0 r- j$ \
7 q5 b; A; o8 x& G  tolerations: []
9 U. n  |# j$ N9 d$ G8 W, e1 x$ J0 t9 L- |' y+ ]2 _/ h  |
  affinity: {}( y1 w, O4 u8 @% O

, X# V! x/ }8 Y6 w* g3 o- x# fxpack:6 `; L1 M& O5 C  w0 r
  enabled: false      # 企业版本打开此选项5 `- l: s* i9 p0 ^% V" B

, Z3 {4 F9 I% [4 s! g" Homnidb:. V& e% ~# z) b; D! M# K) F1 b
  labels:
/ j: K9 l' P, ^2 j    app.jumpserver.org/name: jms-omnidb, w* p$ l- i& J+ D7 f; D6 N

7 }6 A* l! h& v/ F% |% u9 L  config:. s0 o1 E9 f6 L" f0 x  T
    log:1 F, F( E3 [3 A, Y
      level: ERROR  H! h- x2 R4 f2 w6 d) W. v

: k0 x* I& Y' n1 V' p9 e  replicaCount: 1
7 L+ R: D8 l6 B8 Q) ^5 N/ ~3 j$ c: H/ J, ]( M! u% x, r  Y% O8 q
  image:
8 K- ]( U0 A1 q) M8 F- B    registry: registry.fit2cloud.com
% i9 P2 S" }2 |* |    repository: jumpserver/omnidb4 ?, z' u4 o, Z5 v- r4 \
    tag: v3.0.3
  t: e; j4 H/ S    pullPolicy: IfNotPresent* _5 i2 u' A9 L7 f

- f* P/ i( |" I- F4 K9 G( N  command: []2 e0 t7 i  _  R8 C# A8 I$ h
( T# p. \2 h* M4 ~( b' p
  env: []: P' O+ h& b  c7 ]2 u( O* m
6 |  h' g, ^3 @  j4 H
  livenessProbe:6 I2 A9 J( E; {) C: G8 v8 l# q
    failureThreshold: 30* V0 b: G- P4 ~* K6 i% \
    tcpSocket:
' W; d* m! `; x7 t      port: web
" f6 i* G3 {6 L
2 v, s- ?7 d& L3 P" d$ g9 t  readinessProbe:. g/ S) p) l/ U1 C* ^
    failureThreshold: 30% z: M3 H# G' z/ \- @7 }! X
    tcpSocket:
2 u0 n" B5 n) s5 t! Y      port: web
7 G9 p5 Y1 m, w9 @
( O% k' T0 M; w. Z1 r; W4 _- H" O  podSecurityContext: {}
  @7 ~$ ^% V; |) ]) `$ N    # fsGroup: 2000; A% i7 m2 u- n, r" K' b
8 `$ v$ L* y7 b6 a. S6 q
  securityContext: {}% w* E3 c3 z7 ~7 \( z
    # capabilities:0 j5 L! V: t$ A8 `5 x5 _
    #   drop:
: s" b3 k1 K5 T% g$ S    #   - ALL
- i6 [# O& Z; K+ P7 W( `5 E    # readOnlyRootFilesystem: true$ g9 [" b0 K7 i# N& s
    # runAsNonRoot: true
" a: t. {: O, L7 [; Z    # runAsUser: 1000
# b: h6 L/ v+ Y* \  V& E/ F3 \. R: R) F. r; w
  service:
0 Z8 W) A+ p% s- I( ]    type: ClusterIP
+ v" A8 l9 R5 i6 z  p" j" U    web:! X3 W: z! |4 B$ R
      port: 8082
2 r0 H; w0 P) v$ Q4 m* T" a) a) \/ X' ?) M' \
  resources: {}
) y* x5 G! d1 P+ K    # We usually recommend not to specify default resources and to leave this as a conscious
7 C3 J8 d; _9 n    # choice for the user. This also increases chances charts run on environments with little
- ~( _' d$ \2 K0 x. \; e6 X    # resources, such as Minikube. If you do want to specify resources, uncomment the following8 d# F) L* M6 H" M. ~
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.7 H6 _6 X/ R3 Q/ ~" u' I
    # limits:
# S( ?3 v- b4 o1 [5 c/ V9 X    #   cpu: 100m
' g- P, m8 W+ N# F    #   memory: 128Mi
3 q) A4 ?, B* N: ?( [    # requests:
: h! R  c! ^& ^3 J& V( ]    #   cpu: 100m: d( a( \& O3 _4 b7 d
    #   memory: 128Mi  T( ~/ E4 G$ x" D# g/ Q) U: K9 x

8 X% x. p2 K3 d' P" ~  persistence:# u) W& f/ x7 a9 B
    storageClassName: jumpserver-data& v% h% O  U2 I0 [* a1 c* P
    accessModes:
5 ~) b  ~5 E; u7 ~, Z6 m6 r      - ReadWriteMany; e" [# i6 m- j0 \
    size: 10Gi) Q+ G+ z+ W: B2 [! f' t9 C
    # annotations: {}: [& D) v. ~  E( ]8 I4 X0 F; K. P
    finalizers:& \4 J. ~6 r, O/ V/ B8 E: r6 `" }
      - kubernetes.io/pvc-protection; L& T! d) o1 u! s; @1 {9 ]

" h' v! N' T( a7 @- V5 y7 c  volumeMounts: []
9 j( |6 O3 q) m$ A0 c" J% Z) w
. m9 ^7 F2 D( O3 j$ i0 ~) s/ M1 Y7 n  volumes: []
( ?+ \8 Y! Y! H' D3 V
8 I+ p, n3 c' l  {: a6 q" ^. p  nodeSelector: {}
" C$ B$ j0 O- Z" b
- }( V) L4 W8 o+ d  tolerations: []/ d0 T8 \- [1 ?" w; M; @

9 Y: R  W# B# ]' v# s  affinity: {}
( f  n: Y! c; o+ U5 a* e4 e# n3 ^( k2 W1 Q  p% c
razor:: f2 R2 C* G9 h8 {4 H! U6 i/ [
  labels:; K+ E8 d- n; U4 s0 j* b
    app.jumpserver.org/name: jms-razor0 G2 E% Q) u$ c; L" ]
% e, ^, L' g) ^8 h2 |
  config:
% A5 n  M5 @$ r  @3 U% H5 A    log:* R( L& q+ G0 Y( V# O' r0 k- P4 I( d
      level: ERROR
6 ~* \6 [2 J* r4 s+ ~& E
; m! t$ @8 A4 d/ i8 z! o% l  replicaCount: 14 K. J- o$ a) C/ G/ @/ F3 |2 W* S
1 W- y: b. T( A3 l6 `
  image:
7 K/ u3 z3 X$ G+ j6 x0 ?  @! e5 u    registry: registry.fit2cloud.com& E$ F2 S/ c- U, I; a+ p% N
    repository: jumpserver/razor  a% J' _( y5 e4 J1 [7 R8 @9 X- Z
    tag: v2.28.6: Y5 s; C- f3 T
    pullPolicy: IfNotPresent! P& B; v% t7 I! r# M

" _  U: b8 ?- R& u4 v2 _5 K5 R2 E9 b  command: []" F) q- _+ g+ b/ |; C" ~' V
0 ^, O6 l! @4 x1 X6 j- @
  env: []
0 y$ }9 ?* y* f0 ]& [2 \% e
( F1 e5 F/ [6 |6 h8 H4 S+ l  livenessProbe:, \. r& u. _/ P4 T
    failureThreshold: 30
, s9 W1 F3 W: V0 n2 d    tcpSocket:
1 `$ X6 m5 Y- ]6 L+ B      port: rdp
: U6 z; k5 H% q6 q% I1 h8 D7 {9 v# g6 s& E
  readinessProbe:0 D/ k4 Q4 t' T* ^0 Q/ F. i
    failureThreshold: 30; w4 P4 L& f8 V3 |& O
    tcpSocket:' T; {8 z6 f0 f  x& X/ m: j5 q
      port: rdp, V0 ^# E2 v; h# c2 p- r

1 V& _. }% y8 E7 e  podSecurityContext: {}1 U, v- I4 V  {, ~6 i
    # fsGroup: 2000/ z2 ~5 x% {) x# @
. O( H* w! v! d/ g7 E
  securityContext: {}
8 f" E) ]. j1 b9 k+ J5 P$ Z8 T8 n$ K9 K    # capabilities:
$ f7 R) x( p# B    #   drop:
& E! W; `1 I9 _    #   - ALL
4 _4 ]% N1 ?, v5 c( H* B* ?3 v9 t! N    # readOnlyRootFilesystem: true, _6 f% J, A4 p5 `/ \) v! @4 f) p
    # runAsNonRoot: true
5 B/ P/ u; W% W, R( k( A1 X/ U    # runAsUser: 1000
& L7 z$ Q, Q3 |5 C, r" I4 e, q- d! D3 F7 w* L& R- [
  service:
; Z6 ~& s- c0 L2 }  }    type: ClusterIP
& y& |( w% j. E7 h+ G4 R5 T    rdp:
4 D2 P- z1 Q7 e* O6 X      port: 3389: Y  e* O' B! |

  o1 {& K$ d" G1 k; z8 \  resources: {}
1 G& E( z9 H! i' s    # We usually recommend not to specify default resources and to leave this as a conscious
) v7 l- M2 w; K4 v+ Z, |    # choice for the user. This also increases chances charts run on environments with little
+ V7 A# J8 m$ V4 Q/ P    # resources, such as Minikube. If you do want to specify resources, uncomment the following4 `3 s" c' m0 X  O4 ?1 u7 e- g, e
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
" v6 G: Y/ m% s& e9 {7 z8 }7 C1 H    # limits:
" a9 ~1 J2 Q8 q; l1 f: e    #   cpu: 100m
2 i7 o# E% d% \: f* _    #   memory: 128Mi
  |# Z8 S0 v6 k* s* b" G    # requests:+ n( d" V3 m- @8 d' \4 R: G
    #   cpu: 100m
  a- I/ b6 |' F- F    #   memory: 128Mi
& q+ C' p" v- N2 {( G1 h1 }- |1 n: S5 ^' O9 A8 @
  persistence:
7 M  x) f5 j1 f) S( J    storageClassName: jumpserver-data
' ^$ S5 k" }4 }; H    accessModes:# E; b2 O. e& v6 u+ H9 E, c2 ]
      - ReadWriteMany% K+ I% R; B/ Y' w1 |' B
    size: 50Gi
, H. H3 X% B. L5 S/ h+ Y    # annotations: {}3 s7 e: v$ b5 S" G+ j
    finalizers:% [% I/ b3 o1 q) n3 R
      - kubernetes.io/pvc-protection
+ R- p3 \) \& s/ K+ E  E4 ?# z, @5 @0 c- J' M$ i4 f8 Y* b8 [
  volumeMounts: []
6 @4 m8 c" K0 g  K0 G# W& p: L7 w# z2 B# t- n, ?& V
  volumes: []
" e" T7 G9 {! n1 a; Q4 t3 k6 S$ o' q! }1 S* X; V1 L8 l
  nodeSelector: {}
, h5 z  u0 Z9 a- W, C  x" q
5 V; j( j; Z( j/ z$ C$ D  tolerations: []  N3 r# F0 m3 s# {4 S

0 l3 F( W- l* l& O1 J* u3 w& w, J  affinity: {}
! _! \4 [9 v: {% V2 z' v/ D3 q' V. X  Z
web:
% p' x5 `0 N# U2 n6 @9 r( _. Y  enabled: true6 G  \1 V) c! [8 T; k
9 H) r  X1 A8 J& f7 }
  labels:% W& Z; m! }! ~. R" X3 R
    app.jumpserver.org/name: jms-web
. E9 I. E6 y' x! h: O6 U1 D% `
- C+ a# @0 b' a  r- I  replicaCount: 1; a$ D' j( ^- r6 U1 D

# V" B* N& [& W  y  image:
+ l3 S) L! C2 F+ Q2 w& i4 q    registry: docker.io
/ P5 {3 s' Q: J+ l    repository: jumpserver/web
+ f- D2 u' F7 U( N. N    tag: v3.0.3* W  r' J& @2 E  v8 `. b6 f8 G6 _
    pullPolicy: IfNotPresent
  f8 {6 ~7 t3 o% q7 y& K* m
4 J: x6 m3 g+ H$ a: o0 G: q- w; s7 ^/ ?  command: []3 E' W+ V  I* R3 ^
) q( F( Y1 @" L
  env: []
3 K4 C* ?3 {1 L% \# _& P6 ]7 @    # nginx client_max_body_size, default 4G' K& s, N$ y! I# _
    # CLIENT_MAX_BODY_SIZE: 4096m
* f# L: p' z. n5 b9 w
# z5 s5 \' a2 ]8 f" \6 c- k1 H  livenessProbe:
4 G) R- }- ]# N- H( f& L% E$ L9 i    failureThreshold: 30
' ?# M$ {3 @" q    httpGet:. r- B) ^# a  }9 H3 u" x
      path: /api/health/4 j% }2 W& g$ W% s* ^5 X
      port: web( U; }# o2 X+ {* F0 C
7 q4 c1 G" m( I8 n
  readinessProbe:2 I0 D! F  t- p) j
    failureThreshold: 30  Z* |' @' K) N/ N' ?7 @4 D2 s
    httpGet:
/ b% o$ h+ P3 U3 U$ [+ m5 B/ X! T6 b      path: /api/health/
/ }3 U9 o* }$ p& m. Z      port: web
: @- L0 }; V  `* n# |* V
- U9 V3 j. R; b: [  podSecurityContext: {}
2 A* T2 |+ m' V; R1 O  a1 |2 f1 L    # fsGroup: 20002 l8 r+ p9 G8 |
+ j- F' D( P# ]. I6 u) d7 Y9 D
  securityContext: {}1 E# ^& C9 u1 R9 o
    # capabilities:
& F% L: M$ G+ `4 k" c$ X2 t) a    #   drop:
; A+ f" |0 o( l/ T# D3 H3 R    #   - ALL# K$ [' K% J% c$ j
    # readOnlyRootFilesystem: true
' V  e; q: W& B2 S  u, }    # runAsNonRoot: true
" v6 Y7 d8 V4 K) i& H* z5 F1 ]    # runAsUser: 10003 `1 r5 k, r/ R" p! m

" D1 P. N" z( }& Q1 U1 s( N  service:" m6 t5 w6 a" @) y9 }: @
    type: ClusterIP& C& c, Q7 D0 B  K
    web:0 H6 [6 ]. n7 u8 [
      port: 805 E+ ]/ \2 R% _5 c' w3 ~

+ g# b$ V! d; A; Y' C  resources: {}( v& e0 c* J/ ]: J5 g) N, Y
    # We usually recommend not to specify default resources and to leave this as a conscious
- R' A7 u, F6 O    # choice for the user. This also increases chances charts run on environments with little3 Y  O+ Z4 R+ r9 I/ y
    # resources, such as Minikube. If you do want to specify resources, uncomment the following' M+ T' v; x2 [
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
& i; x1 o6 b5 B) a& D( }) c+ V) W' n    # limits:
# s$ O! k1 x/ w& d0 i2 Q. v    #   cpu: 100m
# ]% D1 c1 M! x, \) x9 |    #   memory: 128Mi
: F0 l, b. o1 E0 i) ?    # requests:
" R7 u9 T: M/ w' Z8 ~, ~5 j( C. x    #   cpu: 100m
% r% Q  R* h0 n/ G    #   memory: 128Mi1 X7 Z9 u0 g4 e1 w8 L, S

: }, |  e5 V& {0 c1 r) f  persistence:( i4 K/ C) |6 ^0 [% X6 r
    storageClassName: jumpserver-data' y/ ~4 X( y. y/ j: T
    accessModes:
9 G3 h& N* W1 a( U- T$ h      - ReadWriteMany) ?+ Z- ]4 z2 r* I( K
    size: 1Gi# @/ C( K+ E/ L4 r* K/ T! x
    # annotations: {}) N! g4 @* I2 a; C  z! ]; I
    finalizers:
: ^" S0 E: B$ K; n) Y2 Y      - kubernetes.io/pvc-protection" t5 U+ d5 R& r) m
; {. c$ J3 B3 m# C% z: A" z
  volumeMounts: []
% w% u3 T6 u. f* O* v# w$ u, [* Q% P& d5 H: A: q' F9 k
  volumes: []
7 b1 d  V: N+ N: g' u, `' S: ^- Z% l2 q# M) x5 X  [8 B" [9 l
  nodeSelector: {}
& b/ b( K2 o1 @. N! e( u' U) d: |6 Z5 a3 }% L' k
  tolerations: []+ t+ C  J! j' n

6 d/ K' E! b9 _6 h' M4 C" d  affinity: {}/ U& b( ^  j3 @( Z
2.3 安装 JumpServer⚓︎) _; j/ }7 A5 k* j& G9 s

0 J0 O! Y/ u8 R9 P/ `( u1 \helm install jms-k8s jumpserver/jumpserver -n default -f values.yaml6 n( B, C/ ^* Z4 \: v5 \, y
2.4 卸载 JumpServer⚓︎2 H" `5 S9 T( D7 a* [$ B+ o

6 {+ j+ j2 O; a) q( Ahelm uninstall jms-k8s -n default

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-8 10:00:14 | 显示全部楼层
远程应用⚓︎0 B+ f% P% [- j7 F1 k1 ~9 C+ n
注:社区版只支持 Website 方式。
6 ^) H8 I* i1 H$ j1 j/ d# z) B0 w8 y
1 功能简述⚓︎
7 [% O6 T9 C' q, g$ {& m远程应用(RemoteApp)功能是微软在 Windows Server 2008之后,在其系统中集成的一项服务功能,使用户可以通过远程桌面访问远端的桌面与程序,客户端本机无须安装系统与应用程序的情况下也能正常使用远端发布的各种的桌面与应用。
7 Z  [6 x6 Y6 o$ ~* nremoteapp03/ c1 m7 H& N3 k6 x: l8 E2 s

1 y4 G$ Y" Z; p2 G2 应用发布机⚓︎
3 F5 z/ v2 @8 o. j0 O9 L4 h0 ]RemoteApp 功能需准备应用发布机环境来进行支持。
8 i( Y$ l' Y& J7 |& p5 w" k应用发布机是用来运行 Web 页面资产或者使用远程应用 Navicat 连接数据的程序运行主体。
2 @$ }0 p( m, `+ q9 s7 L2.1 版本要求⚓︎: L1 m: u5 D6 m! H$ K8 ~
应用发布机为 Windows Server 服务器,具体版本要求如下:. W  F! F$ L: M( z1 w3 \! j4 `
Windows Server 2016         Windows Server 2019         Windows Server 2022) z; P' K- ~- j6 L4 Y
2.2 安装 OpenSSH⚓︎- E- ?; Z' i% q0 j. f! y
部署应用发布机前需要安装 OpenSSH 协议,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到 OpenSSH 安装包。
. N& A) _5 t: ]- `5 d+ ]6 H1 ~# Uremoteapp01( u' c) l0 Q# {: _2 Z% b

' v8 z/ v1 X. E- R* g  d1 hOpenSSH 安装包传到应用发布机桌面后,双击进行安装。
. b, t" J6 i$ V' x( Zremoteapp02( R8 Y+ Z: [1 t, U# w/ ~
4 t& a* X# T5 p! ~, s
2.3 创建应用发布机⚓︎# |+ A, P1 i$ P% A  l1 }* O& z! w
点击应用发布机页面的创建按钮即新建一个应用发布机。7 Q2 |7 P; A: r$ P! `8 n  v
remoteapp04" c: }9 k2 d5 A  G, b, _, G5 S
5 E% x+ l4 E- r
详细参数说明:0 P" c) S( q# U# T2 q. `
参数        说明
8 m$ b6 B! z/ J0 Q# v; o名称        远程应用发布机的名称,识别信息。
( w3 w9 e. C6 rIP/主机        远程应用发布机的IP信息。1 \, D, O5 i3 e+ l
协议组        远程应用发布机支持的协议族以及协议组的端口。0 P+ p7 f3 u; _" D& Z
账号列表        远程应用发布机的连接账号信息。
6 D" @4 A& t/ a3 TAPI 服务        远程应用发布机的 Agent 与 JumpServer 后端 Core 组件服务的通信地址。
2 u! B# @  K) a+ |; w) u3 q/ uRDS 许可证        RDS 许可证启用选项。
$ ?+ b& r) I( PRDS 许可服务器        RDS 许可服务器信息。
7 W/ z+ i' u0 GRDS 授权模式        选择"设备"或"用户"设置授权模式。
  R; U1 Y( w/ M6 Y( UA.设备:允许一台设备(任何用户使用的)连接到远程应用发布机。2 Y! ?5 Q/ P, S% x$ S5 }; `
B.用户:授予一个用户从无限数目的客户端计算机或设备访问远程应用发布机。& o, ?/ n2 p7 m+ F& H  q, i
RDS 单用户单会话        选择"禁用"或"启用"设置单用户单会话模式。
1 e5 e, J7 l7 }" p* u  ~8 V4 B' jA.禁用:允许每个用户可以同时多台客户端电脑连接服务器远程桌面。
- N/ A7 `! R1 g4 z2 j1 p) qB.启用:禁止每个用户可以同时多台客户端电脑连接服务器远程桌面。
7 e( @( r' E1 G9 r9 Z2 D3 GRDS 最大断开时间        如果某个会话连接达到了此最大时间,连接即断开。
3 V# H4 Z$ O4 z. [: ?0 L7 nRDS 远程应用注销时间限制        远程应用会话断开后的注销时间。+ B- {3 K; y7 ]4 ~- w
2.4 部署应用发布机⚓︎$ t$ \4 i# K. n" ^5 L' f! T
创建应用发布机后需手动执行应用发布机部署,安装 Python、Chrome、Navicat、DBeaver 或自定义远程应用。3 G  c9 F$ n1 w# ?; F4 ^
点击应用发布机名称按钮进入应用发布机详情页中,选择发布机部署页签,点击快速更新模块的初始化部署按钮,初始化应用发布机。0 |1 o$ R5 N' `* i, P
remoteapp05
7 K7 m8 f) _2 `* g' C7 H3 |  N: g
2 x; |0 _: x$ W  S5 W( _4 E/ l! X2.5 查看应用发布机详情⚓︎
: R) G0 ~/ @$ Y1 g) R* F点击应用发布机名称按钮进入应用发布机详情页中。
2 B1 q& ~9 k. y: t2 _) Y& q; Z% E此页面包含应用发布机详情信息,包括:远程应用发布机帐号列表、远程应用、发布机部署记录等。
9 k' P% J3 q7 q3 h/ n. d; tremoteapp06# a$ L8 g$ \( A2 m
. E+ p/ c$ R' e5 P) Y7 S! f$ g8 i
详细参数说明:
$ s' z' Q0 }, P+ D模块        说明5 a0 \( b8 d1 h* h( ~+ o8 V
详情        该模块主要包含远程应用发布机的基本信息以及简单的自动化任务,更新硬件信息、测试可连接性等。
' w; w$ G0 u/ A( o0 G6 c: Z" K账号列表        该模块主要操作远程应用发布机的账号,默认创建初 JumpServer 会创建100个系统用户支持远程应用会话。; I( I& n6 m) o4 G
远程应用        该模块中包含默认的远程应用与自建的远程应用信息,在该模块可直接对远程应用进行部署。7 j) p6 Z8 J& r
发布机部署        该模块中主要用于远程应用发布机的初始化部署,以及部署日志的查看。) e* [' |3 z0 Z7 D) A
活动记录        该模块中记录了远程应用发布机的活动记录信息,点击可查看活动详情。
) [6 f) X7 x  @) o8 s9 \8 l+ \3 远程应用⚓︎; T# e, ]0 z. [+ ]+ H! V+ Z2 T
创建远程应用资源,实现远程访问目标资源,并实现密码代替功能。
- l5 m4 u" g. A1 v8 a当前举例访问 JumpServer 页面过程(实现密码代填)
/ G8 u; u7 O' W( x# a! f3.1 创建 Website 资产⚓︎) J+ n8 h/ Q6 R  S' r4 u
点击切换至控制台视图资产管理 - 资产列表 页面中。7 A3 k6 ?- |: L- W
选中 Web 页签,点击创建 Website 资产。
1 k5 F; j- p9 F! H2 v  ~remoteapp088 J4 x7 y9 d0 h

! T- Q" A' H& s其中 选择器 参数,需要根据目标 Url 页面中的代码参数中获取。! n) @- Q: [8 s) ^. P9 t6 D
我们通过 F12 打开目标 Url 的开发者工具页面,步骤如下图:
& q5 _4 ]% S0 t$ iremoteapp091 u  k; ]9 @6 l
3 g- M$ @' r+ [5 m. o" x
把获取到的参数填写至创建的目标 Website 资产,参考当前页面3.1 标题第一张图片。
! b) D6 m' o. H+ A. U( u3.2 创建资产授权规则⚓︎
3 u  t5 z$ e, U; C; \& q6 P点击切换至权限管理 - 资产授权 页面中。9 R# c! L- }& e- |8 c: y5 L
创建新的授权规则,如下图:
5 N: h' j. u/ [  X8 c9 aremoteapp10* e. g: T* |( z' L% p6 `

, G% C: c7 X+ i: T. P3.3 访问 Website 资产⚓︎; J  O3 [+ T3 w) [. ?
通过 Web终端 选中目标 Website 资产访问。
5 B* K( w" S" L- g# l4 S访问 Website 资产需要本地客户端安装 JumpServer 客户端程序,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到安装包。2 x( d% H$ g3 ]1 E* w* {
remoteapp115 U* u( [3 w' Q9 ]

5 ~  o) T4 ]$ N* Z' R3 h3.4 页面效果⚓︎
1 f) U, D1 v. Z0 z当前为远程应用页面访问效果图:. C, v% z! c7 o- e" p; s
remoteapp06
  w; i6 x1 W' z" o- o( b( O' T" _3 `# |8 [3 }
4 自定义 Applet⚓︎
. R/ N# D$ s/ c) B9 D$ m+ X4.1 Applet 介绍⚓︎( q  @! h% ]6 {( E' v: r
Applet 是一个包含 Python 脚本的目录,必须至少包含以下文件:( q7 B! c$ U4 s8 {$ L+ \+ n. ]
3 C! y' F+ q' L: |8 ~+ s
├── i18n.yml; }* k% ?8 m5 @# f% }) v, Y
├── icon.png
4 n& I# ?( j* Q├── main.py
, p  a; _# ^! d1 E- m4 v├── manifest.yml* x1 B  u, g; E8 w+ Y1 f/ P
└── setup.yml
# ~3 c' I8 ~6 g7 E' b+ `文件名称作用说明:
* F( R% a5 a* X2 b; D文件名称        说明
* Y% o$ P* N$ O! O4 Imain.py        Python 代填的执行脚本。  @! z' r5 T5 n. B( e
icon.png        Applet 的图标8 i  s( U7 d3 t
manifest.yml        Applet 的元数据。
  y* [" K% ]. K+ g" D) ]8 S7 a$ tsetup.yml        拉起程序的安装描述。
- H4 Y" b: O/ F& H7 u& r: j4 G4 ui18n.yml        对 manifest.yml 的国际化文件。
, V% ~! X* T3 g  T4.2 元数据 manifest.yml⚓︎! p- D9 [* y5 D5 [& u8 O
manifes.yml 定义了 Applet 的元数据,如名称、作者、版本、支持的协议。
; Z- U2 N+ V4 N4 \$ {; Z) Q
7 I0 m: \6 r9 H0 v) x: l* u. _% g4 qname: mysql_workbench8 (required)% c; m% Q& e* m" X6 T' a4 d; _1 P
display_name: MySQL Workbench8
& E# N8 O0 H: Q: Jcomment: A tool for working with MySQL, to execute SQL and design tables (required)
% {9 L/ Z" a" c$ ^7 B& v' ^version: 0.1 (required)
- s; J5 K- z  {5 D8 Vexec_type: python (reserved,暂未使用)9 `, i7 f5 u3 X% [& J, O
author: Eric (required)
; W2 n* p+ l; g; Atype: general (required)
3 g$ k0 ]" w: X8 ?update_policy: none (暂未使用)/ H% m  Y  f4 v
tags: (required)# F' L/ m& @+ p; z. }3 Y- e1 y4 s
  - database) U. y" x3 o% W, R& n2 D$ H2 C
protocols: (required)1 h0 R. N9 \* v: i* A: n
  - mysql2 U6 ~( S" _8 X% ]
详细字段说明:
; `5 ?' Q. C- O" s2 r字段        说明
! v$ j  Z, t  r5 aname        名称最好是字母数字,不要包含特殊字符。$ C1 E0 P1 _5 H$ k1 {: G3 q
protocols        此 Applet 脚本支持的协议。
8 S& m, N$ e& ^6 ~+ I( Y" D/ ktags        一些标签。6 q- \# f# Q0 f! x& D( t
type        主要是 General 或 Web。4 z" `# m$ K9 \0 E
i18n.yml        对 manifest.yml 的国际化文件。
6 N" D. c9 F9 I) s+ R4.3 安装条件 setup.yml⚓︎
' n* ~9 X( J2 d' a, Vsetup.yml 定义了 Applet 拉起程序的安装方式。9 g" f8 v4 n9 _4 h$ R- k3 ?

" ^$ i2 v3 y: H' o/ A9 Q8 Ftype: msi # exe, zip, manual
5 h) i& n0 ]2 S! ]- y% Csource: https://jms-pkg.oss-cn-beijing.a ... y-8.0.31-winx64.msi
% d" s& o; E. x& D- T. p; _arguments:
$ i; K6 q! U' K" U1 |% n  - /qn
/ m7 J0 O& y: n' b  - /norestart3 f% K# }. d: e
destination: C:\Program Files\MySQL\MySQL Workbench 8.0 CE
. N) t* \, s5 Lprogram: C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQLWorkbench.exe
0 y5 z2 m9 C& f' n) I9 C8 D% mmd5: d628190252133c06dad399657666974a
8 v0 F' q1 {$ k( h  z$ ~详细字段说明:
) g! I( {8 B. P! W  {& R字段        说明
9 S% _! e1 `+ {* k. O2 u9 J5 Jtype        是软件安装的方式。
, C8 O! [9 U8 x( {; m6 n4 [2 Bmsi:安装软件。
* z! L) G3 j& r2 w* c4 [% T1 ~exe:安装软件。
4 Y  a- h/ Y( t4 L$ {zip:解压安装方式。' @. Q6 }4 z- C* {3 H  a
manual:手动安装方式。
, I' B3 [, X3 b  y: \source        软件下载地址。
7 l1 y1 L9 C; u0 ~* barguments        msi 或者 exe 安装程序需要的参数,使用静默安装。# c5 }4 x& u: ?) g) `
destination        程序安装目录地址。
9 I  ^0 B8 M& Nprogram        具体的软件地址。# {1 y+ a) i% f+ W
md5        program 软件的 md5 值,主要用于校验安装是否成功。. Y% a) g7 s1 m9 m9 W1 ?
如果选择 manual 的方式,source 等保持为空,可不校验 MD5 值,需要手动登录 Applet host(应用发布机)上安装软件。( `: i( H7 |  q8 i3 M) b' p( z
4.4 脚本执行 main.py⚓︎
2 {4 ?& Z8 X0 f9 T# h4 ymain.py 是 Python 脚本主程序。: X6 t! _3 h; _( `* I
JumpServer 的 Remoteapp 程序 tinker 将通过调用 python main.py base64_json_data 的方式执行。1 x  [8 a2 V( @+ r+ i4 d8 ^5 S
base64_json_data 是 JSON 数据进行 base64 之后的字符串,包含资产、账号等认证信息。数据格式大致如下,依据 api 变化做相应调整:
8 R4 G2 y$ `( R9 h8 R9 q' A, d. |5 a) t: F- n+ h+ m; v. ^
{3 I' ]4 Q; t( d8 q' C/ b2 R
  "app_name": "mysql_workbench8",3 I1 B8 |6 Y0 R+ c6 c; S: _8 |
  "protocol": "mysql",
8 B5 B; _" C2 U, j  "user": {
0 c5 ]7 x; F2 H; o; ]& \2 U    "id": "2647CA35-5CAD-4DDF-8A88-6BD88F39BB30",. f; ~0 b, @4 h& G
    "name": "Administrator",
4 `: d0 t: S0 C- J. _, R. h! G    "username": "admin"/ I6 o& i6 r  {& o$ l
  },
1 [+ J' Y9 \5 D5 v( P4 c% C  "asset": {
) h, a* \% j( i& `" R" ?7 k    "asset_id": "46EE5F50-F1C1-468C-97EE-560E3436754C",
* ]# T' L; e8 T4 D8 Z9 H    "asset_name": "test_mysql",, F4 t* e6 w3 s5 Y4 |) n# L2 A
    "address": "192.168.1.1",
' V8 b* }' E, _' L3 C3 Q    "protocols": [, e2 g2 x: e7 R
      {
3 v# N/ V# m* {& B        "id": 2,
0 N+ E4 m: X& O  t( J+ q' H0 w        "name": "mysql",0 {% a% {" x; F4 K) q3 S! N
        "port": 3306( t, Z/ w) v- c/ H5 H
      }* C/ q  \- _$ C4 L
    ]. m. [* g1 M7 i3 R. S. G
  },) X3 g, L5 c2 G
  "account": {
  T1 q6 F6 v+ g    "account_id": "9D5585DE-5132-458C-AABE-89A83C112A83",- T6 ~. L# B2 }0 |6 J5 L8 f
    "username": "root",
, I8 B- p9 |! B: P8 b5 n) d3 P    "secret": "test") l" u6 ?+ c  Z, B
  },, K, S3 s# F- z& H+ y
  "platform": {6 l: j) B% l& u" `
    "charset": "UTF-8"2 C& A2 I; U* U# [/ h) u/ q
  }7 b! a/ M7 Z3 S; O8 _' O: ~
}* {) }4 ^$ I7 D2 i
4 {  D" F4 Y& C/ X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 02:02 , Processed in 0.024286 second(s), 19 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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