从区域部署
#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 访问主区域权限认证
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
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
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
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`
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
#2.4.4 升级 DeepFlow Chart
/usr/local/deepflow/bin/deepflow-deploy -i deepflow
#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
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
2
3
4
5
#2.5.1 注意
- `dfdb-primary=enable`与`dfdb=enable`这两个 Label 需要在一个同一个节点上
- `dfdb-primary=enable`与`dfdb=enable`这两个 Label 只能存在于一个节点
2
#2.5.2 配置文件修改
参考部署 Yaml 修改
#2.5.3 执行升级
/usr/local/deepflow/bin/deepflow-deploy -e deepflow
/usr/local/deepflow/bin/deepflow-deploy -i deepflow
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
进入 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
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
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
2
3
执行如下命令 /usr/local/deepflow/bin/deepflow-deploy -uo front-end 更新服务
#3.2 修改同步 SSO 账户到 Deepflow 账户体系中的默认密码
修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置
sso_user_pwd: "yunshan1879"
#3.3 登录支持 SSO
DeepFlow 添加支持 sso ,多套 DeepFlow 之间可以只登录一台 DeepFlow,实现其他 DeepFlow 免登录功能。适用于 5.5.3 及以后版本
支持 sso 需要在 系统->配置管理 中 sso 配置项来启用该功能。
{
"sso": {
"sso_link": "",
"sso_open": false
}
}
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
}
}
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
}
}
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.yaml中frontEnd一节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:-
说明:
- 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 字段的值来切换安装模式。目前只支持npm和npb。
#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 字段
- 在 app_config_user.js 中增加
#3.7.9 浏览器标签栏图标
- 修改标签栏图标
- 将 /var/www/lcweb/public/images/favicon.ico 替换。 favicon 尺寸为
32*32像素。
- 将 /var/www/lcweb/public/images/favicon.ico 替换。 favicon 尺寸为
#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
# 版本信息由打包工具生成,普通情况下应禁止修改。
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/
# 版本信息由打包工具生成,普通情况下应禁止修改。
2
3
4
#3.7.12 修改 DeepFlow 访问 token 以及 刷新 token 的过期时间
修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 部分, 保存文件后执行/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天,单位/分钟)
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.yaml 中 rearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置
default_login_type_name: "DeepFlow" # DeepFlow 登录页显示的名称
#3.7.14 租户允许创建组织的最大值
修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 部分, 保存文件后执行/usr/local/deepflow/bin/deepflow-deploy -uo rear-end 用于覆盖默认配置
tenant_org_limit: 2 # 允许创建组织数量
#3.7.15 子视图、模板变量、指标模板、业务相关的允许创建数量的最大值
修改或新增镜像配置文件 /usr/local/deepflow/templates/values-custom.yaml 中 rearEnd 部分, 保存文件后执行/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 # 业务服务组数量
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 必须在组织下已经存在
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
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 按量计费
#3.7.18 Web 安全配置
- 过滤请求方式
系统默认允许 GET|POST|PUT|PATCH|DELETE|OPTIONS 请求,通过修改镜像配置文件/usr/local/deepflow/templates/values-custom.yaml中frontEnd一节safe_method值为 true(如果值为true会禁止如下请求 PUT|PATCH|DELETE)。
- 开启接口防篡改和重放攻击
修改 /usr/local/deepflow/templates/values-custom.yaml中frontEnd一节crypto_open值为 true 来开启该功能,默认关闭(false)。
为了防止客户端时间和服务器时间两者有少许的误差导致校验失败,可以修改
/usr/local/deepflow/templates/values-custom.yaml中frontEnd一节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
}
}
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
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
- 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%';
2
3
4
5
6
7
8
9
10
11
12
13
14
提示
当表还未创建时才有效。
#4.4 设置超时时间参数
#4.4.1 原因
刚部署 DeepFlow 初始化数据库需要执行 ini.sql 里面的建表语句,耗时较长,查询、超时默认配置(10s)会超时导致 server 一直重启。

label
#4.4.2 解决
超时配置修改为 60s,如果还是报错可适当增加超时时长。
-- 设置查询超时时间,单位微秒
SET GLOBAL ob_query_timeout=60000000;
-- 设置事务超时时间,单位微秒
SET GLOBAL ob_trx_timeout=60000000;
2
3
4
5
6
7
#4.5 手动初始化建表语句
#4.5.1 原因
server 启动时数据库初始化异常,一直重启。

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