0
0
0
0
博客/.../

利用CDC切换实现开启TLS

 cchouqiang  发表于  2025-12-31

一、背景

PD组件存储的是TiKV的元数据信息,pd在启动时没有指定证书校验(--cacert 参数),并且没有通过防火墙等实施访问控制,PD组件的接口和数据就会直接暴露给外部,导致未授权访问漏洞。如果这些接口能够被未经认证的用户访问,那么就意味着存在安全风险。

而熟悉TiDB的小伙伴都知道,开启TLS时会对集群进行停机操作,对于一些业务场景,希望不停机开启TLS,对于此需求,可以利用CDC切换来实现开启TLS不停机。

二、环境准备

准备两套TiDB集群,使用CDC搭建主备集群,创建changefeed,保证数据同步。

集群拓扑如下:

三、操作步骤

1、进行灾备切换

通过CDC进行灾备切换,详细内容请参考:https://pingkai.cn/docs/pingkaidb/stable/ticdc-overview/

确保应用都连接到灾备集群,主集群无应用连接

2、停止cdc ,pause changefeed,记录tso

执行cdc pause ,记录tso,后面创建cdc链路需要加上此tso

./cdc cli changefeed pause -c up-cdc

3、原主集群进行开启tls

缩容pd为1个,如果集群有5个pd,则需要缩容4个

tiup cluster scale-in tidb-test -N IP1:Port,IP2:Port

4、开启tls

在主集群上执行开启tls命令

tiup cluster tls tidb-test enable --wait-timeout 500
#确保Reload PD Members 执行成功,否则后续扩容pd会失败。

5、确保pd开启tls成功,可以用如下命令验证:

tiup ctl:v8.5.3 pd -u https://ip:2379 member --cacert /home/tidb/.tiup/storage/cluster/clusters/tidb-test/tls/ca.crt --cert /home/tidb/.tiup/storage/cluster/clusters/tidb-test/tls/client.crt --key /home/tidb/.tiup/storage/cluster/clusters/tidb-test/tls/client.pem

查看输出内容,是否已经带证书了,member显示的 “https”,否则后期扩容pd会失败

如果开启TLS过程中失败了,需要执行disable命令,在重新开启tls即可

tiup cluster tls tidb-test disable

6、扩容pd节点

扩容pd为3个

tiup cluster scale-out tidb-test ./scale-out.yaml

7、创建changefeed,带上证书

将ca证书传到cdc服务器上

创建changefeed时,需要加上证书,并指定「步骤2」的tso

./cdc cli changefeed create \
    --server=http://IP:8300 \
    --sink-uri="mysql://root:123456@127.0.0.1:4000/?ssl-ca=ca.crt&ssl-cert=client.crt&ssl-key=client.pem" \
    --changefeed-id="simple-tls-task" --start-ts xxx

cdc上游开tls,需要在全局加 --cacert --cert --key;

下游开tls,需要加上下游的证书,写在 --sink-uri参数里

上下游都开tls,里外都要加证书参数

8、进行灾备切换

重复上述步骤「2-7」,将灾备集群也启用TLS

9、业务验证

业务测进行验证,相比之前,需要加上证书来连接,否则会连不上。

四、总结

1、需要加固pd组件,可以开启TLS;

2、想要保持停机时间最短,可以采用CDC灾备切换方式,轮流开始TLS。

0
0
0
0

版权声明:本文为 TiDB 社区用户原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接和本声明。

评论
暂无评论