干货丨如何开启TiDB集群中的节点通信加密?

news2025/2/24 12:06:29

笔者在一个银行项目中,费尽千辛万苦,好不容易通过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_profile

tiup 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 等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue-axios的get、post请求

直接在控制台上打印axios会报错,打印fetch就不会; 因为fetch是标准,axios是第三方,要想用axios,就必须引入想应的js文件;axios-js文件下载:npm 搜索axios,点进去,往下找&…

智云通CRM:如何清除销售前被拒绝的怀疑和猜测?

在做CRM销售时,经常遇到被客户拒绝的情况,没有人喜欢被拒绝,因为拒绝辉让人痛苦、难过,但现实中又无法避免被拒绝,尤其是销售人员,对销售人员来说,被拒绝是家常便饭。遭到拒绝后,经常…

基于51单片机pwm调光护眼台灯智能检测光强光控灯设计proteus仿真原理图PCB

功能: 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前时间/模式/亮度等级 2.按’切换’键可切换四种不同的模式 a) 自动开关,自动调节亮度 b) 手动开关,自动调节亮度 c) 自动开关,手动调节亮度 d) 手动开关&#xff0…

arthas诊断工具

1.安装 linux: curl -o https://alibaba.github.io/arthas/arthas-boot.jar //是O不是零 浏览直接访问https://alibaba.github.io/arthas/arthas-boot.jar 在运行程序之前,需要运行一个java进程在内存种 java -jar arthas-boot.jar 按序号选择诊断的进程 选择序号回车 2.卸载…

​生成图片并添加文字Image.new()与ImageDraw.drawer.text()方法​

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 生成图片并添加文字 Image.new()与ImageDraw.drawer.text()方法 [太阳]选择题 以下python代码表述错误的一项是? from PIL import Image,ImageDraw,ImageFont imgImage.new(modeRGB,…

计算机网络第六章知识点回顾(自顶向下)

第六章知识点回顾1.链路层和局域网1.1网络层、链路层和物理层1.2链路层服务1.3链路层在哪儿实现?1.3.1网络适配器之间的通信1.4检错和纠错1.5如何检测与纠正错误?1.5.1编码集的检错与纠错能力1.5.2差错检测的实施1.5.3奇偶校验1.5.4循环冗余校验&#xf…

图像分割 - 区域生长

目录 1. 介绍 2. 代码详解 3. 代码 1. 介绍 分割的目的是将图像分为多个区域 常用的分割方法基于两个属性:不同区域间的灰度不连续性质(Canny边缘检测等等)、相同区域灰度的相似特征(阈值处理、区域生长等等) 区…

牛客网语法篇练习基础语法(一)

1.输出"Hello Nowcoder!"。开始你的编程之旅吧。 print(Hello Nowcoder!) 2.KiKi学会了print在屏幕输出信息,他想输出一架小飞机。请帮他编写程序输出这架小飞机。 print( *5 ** *5) print( *5 ** *5) print(**12) print(**12) print( *4 * * *4) prin…

Arduino操作MPU6050模块

MPU6050是集成三轴陀螺仪,三轴加速度计,温度传感器于一体的模块。本文档基于Adafruit_MPU6050实现MPU6050模块基本操作。 Adafruit_MPU6050库: https://github.com/adafruit/Adafruit_MPU6050 Adafruit_MPU6050依赖以下库,需要在…

Java中的char、Character和CharSequence的区别

char 与 Character char是一种基本的数据类型,Character是char类型的包装类,即通过Character创建出来的是一种对象。 Character是char的包装类,就像Integer和int,以及Long和long一样。 包装类和基本类型可以自动转换&#xff…

安泰测试-同惠TH2827精密LCR数字电桥产品性能特点

同惠(Tonghui)TH2827A/TH2827B/TH2827C型 LCR数字电桥 产品简介: TH2827A/TH2827B/TH2827C是具有多种功能和更高测试频率的新型LCR数字电桥,体积小,紧凑便携,便于上架使用。本系列仪器基本精度为0.05%,测试频率最高1M…

GitLab仓库管理系统安装详细步骤

前言 本案例安装 gitlab、jenkins、并部署springboot应用程序,所以准备了3台服务器。 服务器1:安装gitlab服务器2:安装jdk、maven、git、jenkins 因为jenkins需要jdk、maven、git服务器3:安装jdk。 jenkins自动部署的springboot…

多目标优化生态调度结果的预测方法研究——基于新蝙蝠算法(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【CNN】ZFNet——让卷积神经网络不再是一个黑盒模型。

前言 ZFNet在2013年 ILSVRC 图像分类竞赛获得冠军,错误率11.19% ,比2012年的AlexNet降低了5%,ZFNet是由 Matthew D.Zeiler 和 Rob Fergus 在 AlexNet 基础上提出的大型卷积网络。ZFNet解释了为什么卷积神经网络可以在图像分类上表现的如此出…

[MySQL]事务ACID详解

专栏简介 :MySql数据库从入门到进阶. 题目来源:leetcode,牛客,剑指offer. 创作目标:记录学习MySql学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1. 事务的概念 2. 事务的特性 3.事务控制语法…

【经验篇】Java使用ZMQ断线重连问题

简介 ZeroMQ是一个高性能的异步消息传递库,旨在用于分布式或者并发应用程序。它提供了一个消息队列,但与面向消息的中间件不同,ZeroMQ 系统可以在没有专用消息代理的情况下运行。 ZeroMQ 支持各种传输(TCP、进程内、进程间、多播…

初步认识端口服务查询--netstat

转载连接:netstat详解 目录1、语法与参数概括2、输出释义2.1 以netstat -atnlp为例,解释输出结果中各列的含义2.2、以netstat -rn为例,解释输出结果中各列的含义3、实用命令4、项目中通过netstat查询某端口是否被占用netstat命令是一个监控TC…

Spring5源码3-BeanDefinition

1. BeanDefinition BeanDefinition在spring中贯穿始终,spring要根据BeanDefinition对象来实例化bean,只有把解析的标签,扫描的注解类封装成BeanDefinition对象,spring才能实例化bean beanDefinition主要实现类: ChildBeanDefini…

ADB安装及使用详解

一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具,可以直接操作管理 Androi…

K8s高可用集群搭建

K8s高可用集群搭建1 方案简介2 集群搭建2.1 安装要求2.2 准备环境2.3 master节点部署keepalived2.4 master节点部署haproxy2.5 所有节点安装docker/kubeadm/kubelet2.6 部署k8smaster012.7 安装集群网络2.8 k8smaster02加入节点2.9 k8snode01加入集群3 测试集群1 方案简介 用到…