为 TiDB 组件间开启 TLS 和数据加密存储

    本部分介绍 TiDB 集群如何开启 TLS 验证,TLS 验证支持:

    • TiDB 组件之间的双向验证,包括 TiDB、TiKV、PD 相互之间,TiKV Control 与 TiKV、PD Control 与 PD 的双向认证,以及 TiKV peer 之间、PD peer 之间。一旦开启,所有组件之间均使用验证,不支持只开启某一部分的验证。
    • MySQL Client 与 TiDB 之间的客户端对服务器身份的单向验证以及双向验证。

    MySQL Client 与 TiDB 之间使用一套证书,TiDB 集群组件之间使用另外一套证书。

    1. 准备证书。

      推荐为 TiDB、TiKV、PD 分别准备一个 server 证书,并保证可以相互验证,而它们的各种客户端共用 client 证书。

      有多种工具可以生成自签名证书,如 ,easy-rsacfssl

      这里提供一个使用 cfssl 生成证书的示例:生成自签名证书

    1. ./tikv-ctl --host="127.0.0.1:20160" --ca-path="/path/to/ca.pem" --cert-path="/path/to/client.pem" --key-path="/path/to/clinet-key.pem"
    2. ```

    请参考 。

    开启数据加密存储

    1. 生成 token 文件。

      token 文件存储的是密钥,用于对用户数据进行加密,以及对已加密的数据进行解密。

    2. 配置 TiKV。

      1. [security]
      2. cipher-file = "/path/to/cipher-file-256"

    目前 TiKV 数据加密存储存在以下限制:

    • 对之前没有开启加密存储的集群,不支持开启该功能。
    • 同一集群内部,不允许部分 TiKV 实例开启该功能,部分 TiKV 实例不开启该功能。对于加密存储功能,所有 TiKV 实例要么都开启该功能,要么都不开启该功能。这是由于 TiKV 实例之间会有数据迁移,如果开启了加密存储功能,迁移过程中数据也是加密的。