干货丨如何开启TiDB集群中的节点通信加密?
创始人
2024-02-09 09:18:54
0

笔者在一个银行项目中,费尽千辛万苦,好不容易通过PoC测试。

就当一切就绪,准备正式上线时,突然传来了噩耗:未通过银行内部的漏洞扫描,发现存在高危漏洞,需要马上进行修复。

这可给我吓坏了,赶紧查看了银行提供的漏洞报告,如下:

报告中也给出了解决办法:

1、给 TiDB 组件间通信开启加密传输

2、通过控制指定 IP 及端口来限制访问的范围

这两种方案各有利弊。于是结合现场情况,笔者选择了第一种方案,操作简单且安全性更高。

那么问题来了,该如何开启TiDB集群中的 PD 节点通信加密呢?

对现有集群开启TLS

#  什么是TLS

TSL的全称是传输层安全性协议(英语:Transport Layer Security,缩写作TLS),与前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。

网景公司(Netscape)在1994年推出首版网页浏览器,网景导航者时,推出HTTPS协议,以SSL进行加密,这是SSL的起源。IETF将SSL进行标准化,1999年公布第一版TLS标准文件。

随后又公布RFC 5246 (2008年8月)与RFC 6176(2011年3月)。在浏览器、邮箱、即时通信、VoIP、网络传真等应用程序中,广泛支持这个协议。

主要的网站,如Google、Facebook等也以这个协议来创建安全连线,发送数据。目前已成为互联网上保密通信的工业标准。

#  现有 TiDB 集群中的 TLS

在已部署完成的 TiDB 集群中有两种方法开启TLS:

  • 手动开启TLS,即使用 openssl 为每个组件生成对应的自签名证书,然后在每个组件中修改配置,增加证书与密钥的加载使用。(想详细了解可以查阅:为 TiDB 组件间通信开启加密传输 | PingCAP Docs);

  • 使用高版本的 TiUP 组件,自动创建并使用证书文件与密钥,一条命令开启集群的 TLS。

手动开启 TLS 的方案不仅繁琐,而且出问题的概率偏高。为了尽快解决问题,笔者当时选择了使用高版本 tiup 开启 TLS 的方案。

#  使用 TiUP 开启 TLS

1、集群情况介绍

本文使用 TiDB 集群版本为 v5.1.4,使用的 TiUP 版本为 v1.11.0。如果集群中有 TiFlash 组件,需升级到 v5.2.4 以后的版本。

2、升级 TiUP 版本

该功能对 TiUP 版本是有要求的,必须使用 TiUP v1.10.0 以后的版本。

升级 TiUP 的方法很简单,如果是在线的集群,直接使用命令:tiup update --self && tiup update cluster 即可完成 TiUP 和 TiUP cluster 组件的升级。

如果是离线集群,有两个方法:

· 方法一:下载最新版部署介质

(本文以 v6.1.0 为例)tidb-community-server-v6.1.0-linux-amd64.tar.gz,解压后找到 TiUP 与 TiUP cluster 组件的二进制文件。分别在压缩包 tiup-v1.10.2-linux-amd64.tar.gz  与 cluster-v1.10.2-linux-amd64.tar 中。可直接使用二进制文件进行后续的操作,但是这样做可能会有风险,新老版本的 TiUP 交替使用,可能会有未知问题。不推荐使用这种方法。

· 方法二:下载最新版部署介质,使用命令更新 TiUP  和 TiUP cluster 组件:

tar xzvf tidb-community-server-v6.1.0-linux-amd64.tar.gz && \ sh tidb-community-server-v6.1.0-linux-amd64/local_install.sh && \ source /home/tidb/.bash_profiletiup update cluster

由于local_install.sh脚本会自动执行 tiup mirror set tidb-community-server-v6.1.0-linux-amd64 命令,将当前镜像地址设置为 tidb-community-server-v6.1.0-linux-amd64

所以升级完成之后,我们需要使用命令 tiup mirror set 将镜像源切换到生产环境中使用的镜像路径中,避免误操作导致的其他问题。

3、检查节点服务状态

使用命令systemctl status node_exporter-9100.service 检查是否有多于一个 node_export service

如果有多个 node_exporter service ,则会导致 PD 扩容加载失败,会在 PD 扩容时出现无法启动的问题。

所以启动前可以先停止 node_export 服务:systemctl stop node_exporter-9100.service

4、缩容 PD 节点

如果有多个 PD 节点,则需要把 PD 节点缩容到只剩一个,否则会有如下报错:

使用缩容命令:

tiup cluster scale-in tidb-test -N 10.3.70.172:2379,10.3.70.173:2379

检查缩容节点进程及端口资源是否释放,避免后续扩容PD时,资源冲突导致加载失败。

5、开启 TLS

开启 TLS 只需要一个命令:tiup cluster tls tidb-test enable,需要注意的是,该操作会重启集群,需要找到合适的时间进行操作。

开启 TLS 之后,能够发现集群信息中,增加了证书和密钥的路径,以及dashboard中显示的不再是 http,而是 https 的访问网址了。

6、检查 TLS 是否成功开启 

执行命令:

tiup ctl:v5.1.4 etcd --endpoint=https://10.3.70.171:2379 --ca-file=/root/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert-file=/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key-file=/root/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem member list

检查启用 TLS 是否成功,只需要确认 peerURLs 是否为 HTTPS 即可。

成功开启 TLS 之后,记得扩容在第4步中缩容的 PD 节点

写在最后 

1、目前看来,在 asktug 上,选择开启 TLS 的人比较少,很少能看到相关的帖子,所以笔者想把自己的经验分享出来,给需要开启 TLS 的同学一些操作建议。

2、开启 TiDB 现有集群 TLS 的方法还是挺简单的,一个命令足矣。但依然要注意相关的限制,比如要求的版本以及缩容 PD 节点的步骤,操作时需要万分小心。

3、开启 TLS 后,所有通过 HTTP 访问 PD 节点的连接,都需要改为 HTTPS,并且要把证书加上。这一点在我们使用周边工具时,需要注意,比如 br 备份、lightning 等。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...