TiDB 生产集群实现加密通信 TLS 实践分享

网友投稿 189 2024-03-25



前言

之前笔者因为项目中的漏洞扫描,开启了集群的 TLS 加密,并输出了一篇文章:TiDB 生产集群与加密通讯TLS的辛酸苦辣 - 开启篇。文章中详细的讲解了要如何开启 TLS 加密,以及需要注意的点。

TiDB 生产集群实现加密通信 TLS 实践分享

开启 TLS 之后,笔者发现现有的某些工具无法使用了,比如 BR 全量备份的脚本、pd-ctl工具等等。这是怎么回事呢?那是因为开启了 TLS 之后,PD 节点的访问方式就已经发生了改变。以前访问 PD 节点,只需要用 http 的方式指定 ip 和端口就可以直接访问,现在却需要使用 https 的方式,除了指定 ip 和端口,还需要指定 CA 证书等文件。那么问题来了,在各种工具中,我们需要怎么设置才能正常使用呢,接下来笔者会列举一些工具的配置方法。

一、Dashboard

首先介绍我们最常用的工具--dashboard。开启了 TLS 之后,dashboard 就只能用 https 的方式访问,而且需要先安装证书,才能正常访问。

1、获取证书

使用 tiup 获取证书存放地址:

tiup cluster display tidb-test

跟进上图中的路径:/root/.tiup/storage/cluster/clusters/tidb-test/tls/

下载证书文件:client.pfx

2、安装证书

打开浏览器的“证书管理”

选择导入,并选中 client.pfx 文件

密码为tiup

无脑下一步就可以安装完成了。

3、使用证书访问 dashboard

直接跟使用 https 访问 dashboard 地址,浏览器会自动提示是否使用证书验证,点击证书后,再点击确定即可(如果访问出现问题或没有证书弹框,可重启一下浏览器)。

二、TiDB Lightning

在使用 Lightning 的时候,有两种情况,一种是直接使用 tidb 模式,这种模式使用的是逻辑导入,直接连接 tidb 节点进行导入的,所以不需要连接到 PD 节点,也就不需要使用到 CA 证书;另一种是使用 local 模式,这个模式下,lightning 需要通过 PD 节点来找到 tikv 的位置,所以只有在 local 模式下,我们需要更改 lightning 的配置文件。如果直接使用 local 模式,会有如下报错:

配置文件的更改方式如下:

官网给出的 lightning 配置文件为:TiDB Lightning 教程

# 若不配置该项,导入系统表时会出现“找不到 schema”的异常 filter = [*.*, !mysql.*, !sys.*, !INFORMATION_SCHEMA.*, !PERFORMANCE_SCHEMA.*, !METRICS_SCHEMA.*, !INSPECTION_SCHEMA.*] [tidb] # 目标集群的信息 host = "172.16.31.2" port = 4000 user = "root" password = "rootroot" # 表架构信息在从 TiDB 的“状态端口”获取。 status-port = 10080 # 集群 pd 的地址 pd-addr = "172.16.31.3:2379"

在此基础上,我们需要增加(securitytidb.security保持一致):

[security] # 指定集群中用于 TLS 连接的证书和密钥。 # CA 的公钥证书。如果留空,则禁用 TLS。 # 通过tiup找到对应文件的位置并填写 ca-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt" # 此服务的公钥证书。 cert-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt" # 该服务的密钥。 key-path = "/root/.tiup/storag 情况相同),否则与 "false" 情况相同 # * "false"       - 禁用 TLS # * "cluster"     - 强制使用 TLS 并使用 [tidb.security] 部分中指定的 CA 验证服务器的证书 # * "skip-verify" - 强制使用 TLS,但不验证服务器的证书(不安全!) # * "preferred"   - 与 "A 的公钥证书。设置为空字符串可禁用 SQL 的 TLS。 ca-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt" # 该服务的公钥证书。默认为 `security.cert-path` 的副本 cert-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt" # 此服务的私钥。默认为 `security.key-path` 的副本 key-path = "/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem"

完整配置如图:

修改配置之后,正常运行 lightning 即可:

tiup tidb-lightning -config tidb-lightning.toml

三、BR 备份

我们使用 BR 做全量备份的时候,如果不指定 CA 证书,也会遇到报错:

这个时候,我们可以根据 BR 工具的详细信息来获得帮助:tiup br --help

所以,我们在命令行中加入对应的三个参数信息(ca,cert,key)即可:

tiup br backup full --pd "10.3.70.171:2379" --storage "local:///tmp/backup" --ratelimit 128 --log-file backupfull.log --ca /root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem

四、PD CTL

我们在现场经常会遇到需要查看store信息的情况,所以需要用到PD ctl工具了。由于开启了 TLS,所以也需要增加相应的 CA 证书文件才行。我根据 TiDB Lightning 的命令行文件,直接复制 CA 文件部分,ctl 竟然报错了:

根据图上显示的内容,我们可以发现,ctl 的 CA 证书使用的参数名是 cacert ,而不是用的 ca 。更改之后,正确的命令如下:

tiup ctl:v5.1.4 pd -u https://10.3.70.171:2379 store --cacert /root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key /root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem

这里还需要注意一点,连接 PD 节点的地址为 https,而不是 http 了。

五、总结

本文主要介绍了开启 TLS 之后的 TiDB 集群中,一些常用的工具应该如何去使用。主要记住几点:

由于开启了 TLS ,所以 http 变为 https,在有配置 PD 节点访问方式的时候,要注意判断是否需要修改

只要从 PD 节点获取信息,那么这个工具肯定是需要指定 CA 证书的。

关于配置 CA 证书的参数名,可以根据对应命令的详细信息来查看,命令加 --help 即可

如果需要通过配置文件来指定 CA 文件,那么就需要到官网查看该工具的完整配置文件说明,找到 CA 证书部分,按说明填写即可。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TiDB 热点测试
下一篇:TiDB 生产集群开启 TLS 加密通讯的挑战与解决
相关文章