从区域部署

创建时间:2025-10-24 最近修改时间:2025-10-24

#1. 从区域部署

#1.1 主从区域网络防火墙配置

主从区域通信DeepFlow必须打通的port,以及作用
master区域-->slave区域
30417    server 健康检查、获取采集器网卡信息、策略和采集器配置的实时刷新
30035    server 云平台密钥加密
20416    server 查询数据  
30416    server  查询数据
30106    server 执行数据源新增和修改

slave区域-->master区域
30417    server  获取主区域 master 信息
30035    server  申请资源ID
30130    mysql   访问 DeepFlow 数据库
30823    fpermit 访问主区域权限认证  
1
2
3
4
5
6
7
8
9
10
11
12
13

#1.2 从区域部署

  • 按照部署工具中主区域的方法安装 K8s,并完成 DeepFlow 部署
  • 从区域控制器节点 label 配置为 slave_controller
  • 修改 values-custom.yaml 中部署参数
    • node_type=slave
    • 主区域的域名前缀 master-
    • 从区域的域名前缀 slave1-
    • customResource区域填写主区域的控制器 IP 列表
  • 部署从区域 /usr/local/deepflow/bin/df-deploy -i

#1.2.1 主区域修改配置

  • 主区域values-custom中配置:将 customResource.clusterEndpointMasterToSlave.enabled 设置为 true
  • customResource区域按实际部署情况修改从区域名称及 IP
  • 一键更新配置 /usr/local/deepflow/bin/df-deploy -u

#2. 高可用配置

#2.1 前提条件

  • 客户提供共享存储

#2.2 使用外部组件

如客户处提供 RDS等组件,可优先选用外部组件。

#2.2.1 MySQL 操作方式参考:

  • 参考 values.yaml 将该部分内容修改至 /usr/local/deepflow/templates/values-custom.yaml 中 mysql 部分:
 ## 外部 MySQL 配置
  externalMySQL:
    ## 是否启用外部 MySQL 开关
    enabled: true
    ## 外部 MySQL IP 及端口
    hostIP: 192.168.1.1
    port: 30130
    ## 外部用户支持自定义用户。密码在上面 password.mysql 配置
    username: root
1
2
3
4
5
6
7
8
9
  • 对至少 2 个以上控制节点打上 dfdb 标记
  • 执行部署流程

#2.3 DeepFlow 实现 Mysql 高可用集群

简介

自 6.6 版本起,DeepFlow 支持在部署 Mysql 时部署高可用 Mysql 集群, 以下将 Mysql 高可用集群简称为 Mysql-mha。

Mysql-mha 是通过 Proxysql 和 Mysql 主从复制集群实现的,该方案的特点为:

  • Mysql-mha 为一主多从架构
  • 正常情况下写操作读操作都会被转发至主节点
  • 当主节点发生异常时,Proxysql 会自动将读操作转发至从节点,写操作则转发失败 因此,该方案的弊端为主节点异常时 Mysql 无法进行写操作,但并不会影响页面正常使用和查询。

#2.4 部署参数

#2.4.1 K8s Label

将主节点 Mysql 所在的 K8s 节点的 Label 中增加dfdb-primary=enable以及dfdb=enable

# 主节点增加`dfdb-primary=enable`以及`dfdb=enable`
# PRIMARY_NODE 为主节点 Node 名
kubectl label node PRIMARY_NODE dfdb=enable
kubectl label node PRIMARY_NODE dfdb-primary=enable

# 查看 PRIMARY_NODE 中所包含的 Label,确保包含了`dfdb-primary=enable`以及`dfdb=enable`
kubectl get node PRIMARY_NODE --show-labels
1
2
3
4
5
6
7

将从节点 Mysql 所在的 K8s 节点的 Label 中增加dfdb-secondary=enable

# 从节点增加`dfdb-secondary=enable`
# SECONDARY_NODE 为从节点 Node 名
kubectl label node SECONDARY_NODE dfdb-secondary=enable
# 查看 SECONDARY_NODE 中所包含的 Label
kubectl get node SECONDARY_NODE --show-labels
1
2
3
4
5

#2.4.2 配置文件修改

global:
  ## MySQL architecture,`false`为单节点模式,`true`为主从复制集群
  mysqlReplicEnable: false
  mysqlReplicas: 1
  ## 是否后用Proxysql作为代理连接Mysql,默认为'true,组件通过Proxysql游问MySQL
  ## 当mysqlReplicEnable设置为'true'B/,mysqlByProxysql等要设置为'true
  mysqlByProxysql: true
  ## Mysql连接模式,`direct` or `byProxysql`, `direct`为直接连接,`byProxysql`为通过proxysql连接 
  ## 当mysqlReplicEnable设置为`true`时,mysqlConnMode必须设置为`byProxysql`
1
2
3
4
5
6
7
8
9

#2.4.3 获取镜像

由于 Mysql-mha 所使用的镜像未包含在 ISO 中,请先从以下下载地址下载镜像,并将其上传至镜像仓库:

wget http://jenkins.yunshan.net/job/extra_package/job/B_LC_RELEASE_v6_6/3/artifact/registry-mha-v6.6-3.tar.gz
1

#2.4.4 升级 DeepFlow Chart

/usr/local/deepflow/bin/deepflow-deploy -i deepflow
1

#2.4.5 注意事项

  • Mysql-mha 只支持 AMD64 架构。

#2.4.6 旧版本升级

若要将旧环境中的单点 Mysql 升级至 Mysql-mha,执行以下步骤

#2.5 部署参数

将主节点 Mysql 所在的 K8s 节点(原 Mysql 所在节点)的 Label 中增加dfdb-primary=enable

# 主节点增加`dfdb-primary=enable`
# PRIMARY_NODE 为主节点 Node 名
kubectl label node PRIMARY_NODE dfdb-primary=enable

# 查看 PRIMARY_NODE 中所包含的 Label,确保包含了`dfdb-primary=enable`以及`dfdb=enable`(原 Mysql 所在节点的 Label)
kubectl get node PRIMARY_NODE --show-labels
1
2
3
4
5
6

将从节点 Mysql 所在的 K8s 节点的 Label中增加dfdb-secondaryenable

# 从节点增加`dfdb-secondary=enable`
# SECONDARY_NODE 为从节点 Node 名
kubectl label node SECONDARY_NODE dfdb-secondary=enable
# 查看 SECONDARY_NODE 中所包含的 Label
kubectl get node SECONDARY_NODE --show-labels
1
2
3
4
5

#2.5.1 注意

- `dfdb-primary=enable``dfdb=enable`这两个 Label 需要在一个同一个节点上
- `dfdb-primary=enable``dfdb=enable`这两个 Label 只能存在于一个节点
1
2

#2.5.2 配置文件修改

参考部署 Yaml 修改

#2.5.3 执行升级

/usr/local/deepflow/bin/deepflow-deploy -e deepflow
/usr/local/deepflow/bin/deepflow-deploy -i deepflow
1
2

#2.5.4 检查 Mysql-primary 和 Mysql-secondary 的 pod 的状态

由于旧版本缺少 Binlog,从节点大概率第一次无法正常启动, 在从节点的 Pod 第一次发生 Restart 之后执行以下步骤。

#2.5.5 手动恢复从节点

获取所有 Mysql 的 Pod 的 IP

kubectl get pod -n deepflow -o wide|grep  Mysql 
1

进入 Mntnct 的 Pod,执行以下命令

# 执行主从同步命令
# SECONDARY_POD_IP 为从节点 Pod 的 IP
# 执行后会先进行 Clone,若数据较大则耐心等待
# 出现`ERROR 2002 (HY000): Can't connect to MySQL server on`则表示 Clone 成功,等待 Pod 重启

 mysql-mha-tool --dst-host SECONDARY_POD_IP

# Successfully connected to  Mysql  on opensource- mysql-mha-primary:30130 # with user root
# Successfully connected to  Mysql  on 100.117.151.85:30130 with user root
# 正在使用源主机:opensource- mysql-mha-primary 和目标主机:100.117.151.85 执# 行克隆操作
# 是否执行克隆操作 (y/n)? 
# y
# Start Clone
# --------------
# clone instance from 'root'@'opensource- mysql-mha-primary':30130 # identified by 'YSDeepFlow@3q302'
# --------------
# 
# ERROR 3707 (HY000) at line 1: Restart server failed ( Mysql d is not # managed by supervisor process).
# ERROR 2002 (HY000): Can't connect to MySQL server on '100.117.151.85' # (115)
# Clone state: 
# Waiting for clone to complete...
# Clone completed successfully.
# 正在使用源主机:opensource- mysql-mha-primary 和目标主机:100.117.151.85 执# 行主从复制操作
# 是否执行主从复制操作 (y/n)? 
# y
# Slave started, please check slave status
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
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
26
27
28

检查主从同步状态

 mysql-mha-tool --dst-host SECONDARY_POD_IP --slave-status true

# 输出中以下两个字段皆为`Yes`时表示主从状态正常
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
1
2
3
4
5

#3. 页面定制配置

#3.1 替换 SSL 证书

k8s 环境中,需先 kubectl 工具并通过证书和私钥文件创建 secret,并修改 values-custom.yaml 中的 frondEnd.customsSsl.enable=true

kubectl create secret tls cert-deepflow-front-end -n deepflow \
--cert=certs/tls.crt\
--key=certs/tls.key
1
2
3

执行如下命令 /usr/local/deepflow/bin/deepflow-deploy -uo front-end 更新服务

#3.2 修改同步 SSO 账户到 Deepflow 账户体系中的默认密码

修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yamlrearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

sso_user_pwd: "yunshan1879"
1

#3.3 登录支持 SSO

DeepFlow 添加支持 sso ,多套 DeepFlow 之间可以只登录一台 DeepFlow,实现其他 DeepFlow 免登录功能。适用于 5.5.3 及以后版本

支持 sso 需要在 系统->配置管理sso 配置项来启用该功能。

{
  "sso": {
    "sso_link": "",
    "sso_open": false
  }
}
1
2
3
4
5
6

说明:

  • sso_open 取值 true 或 false,默认false 单点登录关闭,需要支持 sso 登录的 DeepFlow 必须保证 每台 DeepFlow 中该值一致全是 true 状态
  • sso_link 需要支持 sso 登录的其他 DeepFlow 信息,如果 auth_peer 为 false,该值不需要配置,保持默认即可,自己的 DeepFlow 信息不可以写入自己的 peers_link 中,可以如下示例设置

示例:

  • 如果只有两台 DeepFlow 需要 sso
# DeepFlow_a
name:DeepFlow_A
url:https://12.34.56.78

# DeepFlow_b
name:DeepFlow_B
url:https://12.34.56.99

# DeepFlow_a 中 `sso->sso_link` 修改配置

{
  "sso": {
    "sso_link": "DeepFlow_B,https://12.34.56.99",
    "sso_open": true
  }
}

# DeepFlow_b 中 `sso->sso_link` 修改配置

{
  "sso": {
    "sso_link": "DeepFlow_A,https://12.34.56.78",
    "sso_open": true
  }
}
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
  • 如果三台 DeepFlow 或以上需要 sso
# DeepFlow_a
name:DeepFlow_A
url:https://12.34.56.78

# DeepFlow_b
name:DeepFlow_B
url:https://12.34.56.99

# DeepFlow_c
name:DeepFlow_C
url:https://12.34.56.00

# DeepFlow_a 中 `sso->sso_link` 修改配置

{
  "sso": {
    "sso_link": "DeepFlow_B,https://12.34.56.99|DeepFlow_C,https://12.34.56.00",
    "sso_open": true
  }
}

# DeepFlow_b 中 `sso->sso_link` 修改配置

{
  "sso": {
    "sso_link": "DeepFlow_A,https://12.34.56.78|DeepFlow_C,https://12.34.56.00",
    "sso_open": true
  }
}

# DeepFlow_c 中 `sso->sso_link` 修改配置

{
  "sso": {
    "sso_link": "DeepFlow_B,https://12.34.56.99|DeepFlow_A,https://12.34.56.78",
    "sso_open": true
  }
}
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
26
27
28
29
30
31
32
33
34
35
36
37
38

注意:

  • sso_link 中的 DeepFlow 名和链接,使用英文中的逗号 , 来分割,DeepFlow 名可以是中文
  • sso_link 中如果有多台 DeepFlow 需要 sso ,使用英文中的管道符 | 来分割
  • 如果通过 a 用户登录 DeepFlow_a,并 sso 到 DeepFlow_b,如果 DeepFlow_b 中没有用户 a,会创建一个 a 用户,密码默认值为 yunshan1879,可以通过修改配置来调整该值,具体步骤见 修改同步 SSO 账户到 Deepflow 账户体系中的默认密码

#3.4 单点登录

限制一个账号只能在一个地点,如果在 A 处登录后,再在 B 处登录后,A 处再次请求会提示账户已经在其他地方登录。

配置路径在 系统->配置管理 ,修改 session->session_single 值为 true

#3.5 账户安全系数配置

适用于 5.5.7 及后续版本,参考下文的 Web安全配置

#3.6 请求 API 的时间查看

网关的所有请求日志默认是输出标准,默认不记录 API 的请求信息到日志文件中,通过修改镜像配置文件/usr/local/deepflow/templates/values-custom.yamlfrontEnd一节save_api_log值为 true(如果值为 true 会记录请求信息到 pod 下的 /var/log/app.log.Y-m-d 文件中,其中 Y:年,m:月,d:日)。

保存文件后执行 /usr/local/deepflow/bin/deepflow-deploy -uo front-end 用于覆盖默认配置。

可以通过查看某一天的日志来获取后端 app 接口消耗的时间,比如 2024 年 8 月 20 号的日志 /var/log/app.log.2024-08-20

http_referer:http://10.1.4.1/dashboard,app_name:df-web,time_local:20/Aug/2024:10:26:28 +0800,remote_addr:10.23.30.241,userid:1,user_email:x@yunshan.net.cn,username:admin,request_method:GET,status:200,request_time:0.014,upstream_response_time:0.004,app_url:http://df-web.deepflow.svc.cluster.local:20825/v1/config/outerlinks,req_body_len:0,body_bytes_sent:136,db:-,table:-,orgid:1,token_key_id:,err:-
1

说明:

  • http_referer:该网页是从哪个页面链接过来的
  • app_name:后端提供改接口的 APP 名称
  • time_local:在服务器里请求开始写入本地的时间
  • remote_addr:请求方的 IP 地址
  • userid:请求人用户 ID
  • user_email:请求人用户邮箱
  • username:请求人用户名
  • request_method:请求方式
  • status:接口返回状态码
  • request_time:从接受用户请求的第一个字节到发送完响应数据的时间
  • upstream_response_time:从 Nginx 向后端建立连接开始到接受完数据然后关闭连接为止的时间
  • app_url:请求的 API 地址
  • req_body_len:请求体的大小
  • body_bytes_sent:发送给客户端的字节数,不包括响应头的大小
  • db:如果请求用了 db,记录在此
  • table:如果请求用了 table,记录在此
  • orgid:请求使用的组织 ID
  • token_key_id:如果用了永久 Token,记录在此

#3.7 DeepFlow 界面定制

#3.7.1 修改方式请参考 web 界面基本参数配置

#3.7.2 安装模式控制

通过编辑配置文件中的 INCLUDE_APPS 字段的值来切换安装模式。目前只支持npmnpb

#3.7.3 登录页面下拉框里的登录方式显示顺序

修改配置文件中的 LOGIN_LIST_SORT 里字段的顺序,比如 ['third_sso', 'deepflow', 'ldap', 'tce']

#3.7.4 全景图多选框上限控制

修改配置文件中的 FLOW_VIEW_MULTIPLE_SELECT_LEN 字段来修改多选框的上限个数。

#3.7.5 全景图资源集合上限控制

修改配置文件中的 FLOW_VIEW_MAX_RESOURCE_SET 字段来修改资源集合的上限个数。

#3.7.6 全景图折线图自定义展示个数上限控制

修改配置文件中的 FLOW_VIEW_CUSTOM_LINE_CHART_NUM 字段来修改折线图自定义展示上限个数。

#3.7.7 子视图中数据源秒级粒度选择时间范围

修改配置文件中的 SUPPORT_SECOND_DATA_TIME 字段,当选择的时间范围开始时间到当前时刻大于该范围时,不可选择秒级粒度。

#3.7.8 页面菜单控制

  • 5.7.1(包括 5.7.1)以后版本配置菜单显示如下:
    • 在 app_config_user.js 中增加HIDDEN_MENU_PATH_LIST:[]配置,并将需要隐藏的路径填入该字段中,隐藏单个页面的路径为浏览器中显示该页面时 url 中#后面,前面的部分,
      • 例如需要隐藏流量搜索页面,则配置 HIDDEN_MENU_PATH_LIST:['/platformOverview/flowView']
      • 如果隐藏整个模块页面,例如分发的所有页面,则配置 HIDDEN_MENU_PATH_LIST: ['/npb']
    • 对于从 5.7.1 之前的版本升级到 5.7.1 的,如有需要隐藏的菜单请在 app_config_user.js 配置 HIDDEN_MENU_PATH_LIST 字段

#3.7.9 浏览器标签栏图标

  • 修改标签栏图标
    • 将 /var/www/lcweb/public/images/favicon.ico 替换。 favicon 尺寸为32*32像素。

#3.7.10 平台信息内厂商信息、服务邮箱

/usr/local/deepflow/templates/rear-end/templates/configmap.yaml 中 deepflow.conf 对应的选项修改后更新进 k8s 即可。

[global]
version = DeepFlow-5.1
company = 北京云杉世纪网络科技有限公司
support_email = noc@yunshan.net.cn

# 版本信息由打包工具生成,普通情况下应禁止修改。
1
2
3
4
5
6

#3.7.11 平台外部链接信息

/usr/local/deepflow/templates/rear-end/templates/configmap.yaml 中 deepflow.conf 中下面的选项设定。

[deepflow-web]
outer_link.grafana-server = /grafana-server/

# 版本信息由打包工具生成,普通情况下应禁止修改。
1
2
3
4

#3.7.12 修改 DeepFlow 访问 token 以及 刷新 token 的过期时间

修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yamlrearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

access_token_expires: 60               # 访问 token 过期时间(一个小时,单位/分钟)
refresh_token_expires: 43200           # 刷新 token 过期时间(30天,单位/分钟)
refresh_token_renew_expires: 10080     # 刷新 token 延长过期时间(7天,单位/分钟)
1
2
3

提示

说明:

现在 web 界面支持 token 滑动过期,具体逻辑为:

  • 登陆 登陆系统,返回 refresh_token 和 access_token,并且 cache 中记录这两个 token,这两个 key 的有效期为该两个 token 的过期时间 (refresh_token 有效期可配置,暂定 refresh_token 有效期为 30 天,access_token 有效期为 2 小时)。新增配置项:是否允许续期,以及续期多久
  • 访问系统 请求接口时在 header 中携带 access_token,校验接口在验证 access_token 时,同时验证生成该 access_token 的 refresh_token 在 cache 中的有效期。存在以下几种情况
  • 访问系统间隔大于 30 天 此时访问,校验接口在验证 access_token 时发现 refresh_token 已经过期,返回状态码 401,状态值返回 EXPIRED_REFRESH_TOKEN,此时需要重新登陆
  • 距离 refresh_token 过期一周前访问系统
    • 在验证 header 中的 access_token 时如果此 token 没有过期并且 refresh_token 有效期时距离过期大于一周,验证通过,正常转发请求
    • 在验证 header 中的 access_token 时如果此 token 已经过期,返回状态码 401,状态值返回 EXPIRED_TOKEN,此时页面需要使用 refresh_token 获取新的 access_token 并记录,并重新发起请求
  • 在距离 refresh_token 过期不足一周内访问系统
    • 在验证 header 中的 access_token 时如果此 token 没有过期并且 refresh_token 有效期时距离过期不足一周,给 cache 中的 refresh_token 过期时间续期一周,验证通过,正常转发请求
    • 在验证 header 中的 access_token 时如果此 token 已经过期,返回状态码 401,状态值返回 EXPIRED_TOKEN,此时页面需要使用 refresh_token 获取新的 access_token 并记录,并重新发起请求
    • 在验证 header 中的 access_token 时如果此 token 没有过期并且 refresh_token 有效期经过续期时距离过期已经大于一周,验证通过,正常转发请求
  • 距离 refresh_token 过期不足一周内访问系统,续期一周内再次访问过系统
    • 在验证 header 中的 access_token 时如果此 token 没有过期并且 refresh_token 有效期经过续期时距离过期已经大于一周,验证通过,正常转发请求
    • 在验证 header 中的 access_token 时如果此 token 没有过期并且 refresh_token 有效期时距离过期不足一周,给 cache 中的 refresh_token 过期时间续期一周,验证通过,正常转发请求
    • 在验证 header 中的 access_token 时如果此 token 已经过期,返回状态码 401,状态值返回 EXPIRED_TOKEN,此时页面需要使用 refresh_token 获取新的 access_token 并记录,并重新发起请求
  • 距离 refresh_token 过期不足一周内访问系统,续期一周后没有再访问过系统,在一周后再次访问系统 此时访问,校验接口在验证 access_token 时发现 refresh_token 已经过期,返回状态码 401,状态值返回 EXPIRED_REFRESH_TOKEN,此时需要重新登陆

#3.7.13 修改 DeepFlow 自身账户系统在登录页显示的名称

修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yamlrearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

default_login_type_name: "DeepFlow"     # DeepFlow 登录页显示的名称
1

#3.7.14 租户允许创建组织的最大值

修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yamlrearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

tenant_org_limit: 2     # 允许创建组织数量
1

#3.7.15 子视图、模板变量、指标模板、业务相关的允许创建数量的最大值

修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yamlrearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

indicator_template_limit: 100     # 指标模板数量
template_variable_limit: 100      # 模板变量数量
dashboard:
  panel_limit: 10                 # 子视图数量
biz:
  biz_limit: 100                  # 业务数量
  biz_svc_limit: 100              # 业务服务数量
  biz_svc_grp_limit: 100          # 业务服务组数量
1
2
3
4
5
6
7
8

#3.7.16 SSO 用户默认加入组织和团队配置

修改镜像配置文件/usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 一节添加如下部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

sso_user_join_org_team:
  enable: false
  org_id: 1 # 待加入的组织 id
  team_id: 1 # 待加入的团队 id,该团队 id 必须在组织下已经存在
1
2
3
4

SSO 新账户:

如果上述配置已经添加,并且是开启状态,用户在登陆时会被加入以上的组织和团队中,否则不加入任何组织和团队。

SSO 老账户:

登陆时不会加入任何组织和团队,如果需要批量处理该类型账户加入某个组织和团队,请按照以下步骤进行处理。

获取 fauths 的 pod 名称,并进入该 pod 的 /root/fauths 目录,修改脚本权限,并执行脚本。

注意:先备份数据库,参数 org_id 和 team_id 必须存在。

kubectl -n deepflow get pod -o wide |grep fauths
kubectl -n deepflow exec -it fauths-deployment-deployment-xxxxx /bin/bash
cd /root/fauths
chmod 755 sso_user_join_org_team.py
./sso_user_join_org_team.py --org_id=1 --team_id=1
1
2
3
4
5

#3.7.17 计费模式配置

修改镜像配置文件/usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 一节 billing_method 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置

billing_method: license  # 计费模式:license 授权模式,/voucher 按量计费
1

#3.7.18 Web 安全配置

  • 过滤请求方式

系统默认允许 GET|POST|PUT|PATCH|DELETE|OPTIONS 请求,通过修改镜像配置文件/usr/local/deepflow/templates/values-custom.yamlfrontEnd一节safe_method值为 true(如果值为true会禁止如下请求 PUT|PATCH|DELETE)。

  • 开启接口防篡改和重放攻击

修改 /usr/local/deepflow/templates/values-custom.yamlfrontEnd一节crypto_open值为 true 来开启该功能,默认关闭(false)。

  • 为了防止客户端时间和服务器时间两者有少许的误差导致校验失败,可以修改/usr/local/deepflow/templates/values-custom.yamlfrontEnd一节 crypto_deviation_time 值,但是不允许该值大于 60秒,如果客户端时间和服务器时间相差太大超过 60 秒,建议使用北京时间为标准来校对两者的时间(默认是 3 秒的误差客户端时间可以比服务器时间大3秒)。

  • 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo front-end 用于覆盖默认配置。

  • 通过 系统->配置管理 来配置安全参数,默认配置内容如下

{
  "sso": {
    "sso_link": "",
    "sso_open": false
  },
  "account": {
    "account_allow_login_white_list_ip": "*",
    "account_allowed_login_max_time": 0,
    "account_allowed_login_min_time": 0,
    "account_allowed_login_time_period": false,
    "account_first_login_change_pwd": false,
    "account_login_failed_count": 0,
    "account_login_failed_locked_time": 60,
    "account_not_change_pwd_lock_time": 0,
    "account_not_login_lock_time": 0,
    "account_second_check": false,
    "read_only_admin": false,
    "use_ungrouped_type": false,
    "user_limit": 100,
    "user_tenant_limit": 200,
    "verifycode_use": false,
    "radius_account_switch": false
  },
  "password": {
    "pwd_include_case": false,
    "pwd_include_number": false,
    "pwd_include_special_chars": false,
    "pwd_include_string": false,
    "pwd_max_len": 16,
    "pwd_min_len": 8
  },
  "session": {
    "session_inactive_close": false,
    "session_inactive_close_interval": 0,
    "session_max_online": 0,
    "session_one_client": false,
    "session_single": false
  },
  "file_storage": {
    "file_storage_extension": "rpm,iso,gz,zip,tar",
    "file_storage_size": 3072,
    "file_total_size_max": 51200,
    "file_count_max": 100,
    "file_storage_support_admin": false
  }
}
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
  • 配置参数说明如下
sso:
    # 多控制器单点登录,false(默认不开启)
    sso_open: false
    # 需要多控制器单点登录的ip或domain,除了当前环境
    # 默认""
    # 只有一个控制器示例:"baidu,http://baidu.com"
    # 多个控制器示例:"baidu,http://baidu.com|qq,http://qq.com|google,http://google.com"
    sso_link: ""

password:
  # 密码最短(系统允许取值的最小值:6)
  password_min_len: 6
  # 密码最长(系统允许取值的最大值:20)
  password_max_len: 20
  # 包含数字。false(默认不校验)
  password_include_number: false
  # 包含字符串。false(默认不校验)
  password_include_string: false
  # 包含大小写。false(默认不校验)
  password_include_case: false
  # 包含特殊字符。false(默认不校验)
  password_include_special_chars: false

account:
  # 允许登录时间段。false(默认关闭)。时间段取值范围(0-23)
  account_allowed_login_time_period: false
  account_allowed_login_min_time: 0
  account_allowed_login_max_time: 0
  # 多长时间未登录,锁定账户。单位/天。0值不开启(默认),取值范围(0-365)
  account_not_login_lock_time: 0
  # 多长时间未修改密码,锁定账户。单位/天。0值不开启(默认),取值范围(0-365)
  account_not_change_pwd_lock_time: 0
  # 首次登录需要修改密码。false不开启(默认)
  account_first_login_change_pwd: false
  # 用户模块开启二次校验。false不开启(默认)
  account_second_check: false
  # 允许登录失败次数。0值不开启(默认),取值范围(0-10)
  account_login_failed_count: 0
  # 达到登录失败后,锁定时间。单位/秒,取值范围(60-600)
  account_login_failed_locked_time: 60
  # 允许登录的客户端(ip),"*"默认不限制,限制格式如:"127.0.0.1,192.168.1.1",允许最多单点登录的控制器数量(1-5)
  account_allow_login_white_list_ip: "*"
  # 登录使用验证码。false关闭(默认),当值为true时,会开启验证码同时将登录API的内容进行加密发送
  verifycode_use: false
  # 登录开启授权校验。true开启(默认)
  # verify_license: True
  # 管理员账户数量。取值(1-100)
  user_limit: 100
  # 租户账户数量。取值(1-200)
  user_tenant_limit: 200
  # 开启未分组用户类型(101)。false不开启(默认)
  use_ungrouped_type: false
  # 开启只读管理员选项。false不开启(默认)
  read_only_admin: false
  # 支持用radius认证账户登录系统。false不开启(默认)
  radius_account_switch: true

session:
  # 非活动的会话终止时间。false(默认不开启)。单位/分钟,取值范围(0-30)
  session_inactive_close: false
  session_inactive_close_interval: 0
  # 互踢下线(一个账户只能在一个地方登录)。false(默认不开启)
  session_single: false
  # 会话最大在线人数。0值(默认不限制),取值范围(0-100)
  session_max_online: 0
  # 一个客户机只能登录一个账号。false(默认不开启)
  session_one_client: false

 file_storage:
    # 支持上传的文件后缀,值等于 "*" 表示不判断文件后缀
    file_storage_extension: "rpm,iso,gz,zip,tar"
    # 单个文件最大,单位/M,(系统允许的最大值3072M)
    file_storage_size: 3072
    # 已经上传的文件总大小,单位/M
    file_total_size_max: 51200
    # 允许上传文件最大数量
    file_count_max: 100
    # 是否允许普通管理员使用该功能(超级管理员默认有权限),false(默认不开启)。
    file_storage_support_admin: false

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80

#4. OceanBase MySQL 租户模式设置

#4.1 注意

OceanBase 的数据库环境不支持运行 Grafana

#4.2 前提条件

MySQL 租户模式方式下的 OceanBase

#4.3 设置 ID 自增列相关参数

#4.3.1 原因

label

label

  • CK 字典 key 默认限制为 500000 (opens new window),超过时 CK 会报错。
  • 阿里云上创建的 OceanBase MySQL 租户模式版本为 v3.2.4.7(可通过 select version(); 查看版本)。
    • 3x 版本的 OceanBase 数据库下的表都为 NORDER 模式(分布式缓存的自增列,只保证全局唯一,分区表拥有更好的性能)。
    • NOORDER 模式的自增列中的每一个 OBServer 节点之间均保持独立,各节点可以自主从内部表获取自增区间记录到机器缓存中,从而加速自增值的生成。
    • 自增列 (opens new window)由三个变量决定:auto_increment_cache_size, auto_increment_increment, auto_increment_offset。
    • auto_increment_cache_size 配置默认为 1000000,当请求插入数据到不同的 OB 实例时,会出现 id > 1000000 的情况,最终导致 CK 查询报错。

#4.3.2 解决

-- 查看配置初始值
SHOW variables LIKE 'auto_increment%';

-- 自增的缓存个数
SET GLOBAL auto_increment_cache_size=1;

-- 自增步长,仅用于 MySQL 客户端登录
SET GLOBAL auto_increment_increment=1;

-- 确定 AUTO_INCREMENT 列值的起点
SET GLOBAL auto_increment_offset=1;

-- 退出 shell 重新登录,查看修改是否生效
SHOW variables LIKE 'auto_increment%';
1
2
3
4
5
6
7
8
9
10
11
12
13
14

提示

当表还未创建时才有效。

#4.4 设置超时时间参数

#4.4.1 原因

刚部署 DeepFlow 初始化数据库需要执行 ini.sql 里面的建表语句,耗时较长,查询、超时默认配置(10s)会超时导致 server 一直重启。

label

label

#4.4.2 解决

超时配置修改为 60s,如果还是报错可适当增加超时时长。


-- 设置查询超时时间,单位微秒
SET GLOBAL ob_query_timeout=60000000; 

-- 设置事务超时时间,单位微秒
SET GLOBAL ob_trx_timeout=60000000;

1
2
3
4
5
6
7

#4.5 手动初始化建表语句

#4.5.1 原因

server 启动时数据库初始化异常,一直重启。

label

label

#4.5.2 解决

  • 通过命令 kubectl -n deepflow edit deployments master-deepflow-server 修改 server 对应的两个Probe,修改为1000。
  • 如果还是不行,手动初始化数据库,步骤:
    1、删除 server 对应的 deploy
    2、进入 mnt-pod,drop database deepflow,然后 create database deepflow
    3`kubectl edit deploy -n deepflow master-deepflow-server`,在image同级添加 command: ["sleep","1000"]
    4、查看 mnt-pod 所在节点,进入对应节点的 server-pod,拷贝 /etc/mysgl 下的 init.sql
    5、default_init.sql、default_org_init.sql 和 org_init.sql 至 /root/debug 下
    6、进入 mnt-pod, cd /root/debug
    7、登录数据库,并 use deepflow;
    8、依次执行 source init.sgl、default init.sql、default_org_init.sql和org_init.sg
    9、继续执行 `insert into db_version set version="6.5.1.47";`(如果不清楚 version 的值是多少,先随便填一个值,等 server 起来后会有错误日志,提示预期的 version,后面再改正即可)
    10`kubectl edit deploy -n deepflow master-deepflow-server` 恢复server的配置
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10