@@ -19,7 +19,8 @@ summary: 在 Kubernetes 上如何为 TiDB 集群组件间开启 TLS。
1919
2020 > ** 注意:**
2121 >
22- > 在集群创建后,不能修改此字段,否则将导致集群升级失败,此时需要删除已有集群,并重新创建。
22+ > - 在集群创建后,不能修改此字段,否则将导致集群升级失败,此时需要删除已有集群,并重新创建。
23+ > - 若集群无法重建且需要启用 TLS,请参阅[ 将非 TLS 集群升级为 TLS 集群] ( #将非-tls-集群升级为-tls-集群 ) 。
2324
24253 . 配置 ` pd-ctl ` ,` tikv-ctl ` 连接集群。
2526
@@ -1645,3 +1646,88 @@ summary: 在 Kubernetes 上如何为 TiDB 集群组件间开启 TLS。
16451646 cd /var/lib/cluster-client-tls
16461647 /tikv-ctl --ca-path=ca.crt --cert-path=tls.crt --key-path=tls.key --host 127.0.0.1:20160 cluster
16471648 ` ` `
1649+
1650+ # # 将非 TLS 集群升级为 TLS 集群
1651+
1652+ 本节介绍如何为现有的非 TLS TiDB 集群启用 TLS 加密通信。
1653+
1654+ > ** 注意:**
1655+ >
1656+ > 该操作仅适用于无法重建的现有集群。在开始操作前,请确保已充分理解每个步骤及其潜在风险。
1657+
1658+ 1. 如果集群包含多个 PD 节点,需要先将 PD 节点数量缩减为 1 个。
1659+
1660+ 2. 参考[第一步:为 TiDB 集群各个组件生成证书](# 第一步为-tidb-集群各个组件生成证书)生成 TLS 证书,并创建 Kubernetes Secret 对象。
1661+
1662+ 3. 启用 TLS:
1663+
1664+ 你可以选择以下两种方法之一启用 TLS:
1665+
1666+ - 方法 1:执行以下命令更新 TiDB 集群配置,等待 PD Pod 完成重启后继续下一步。
1667+
1668+ ` ` ` shell
1669+ kubectl patch tc ${cluster_name} -n ${namespace} --type merge -p ' {
1670+ "spec": {
1671+ "tlsCluster": {
1672+ "enabled": true
1673+ }
1674+ }
1675+ }'
1676+ ` ` `
1677+
1678+ 输出示例:
1679+
1680+ ` ` ` shell
1681+ tidbcluster.pingcap.com/basic patched
1682+ ` ` `
1683+
1684+ - 方法 2:参考[第二步:部署 TiDB 集群](# 第二步部署-tidb-集群)启用 TLS,同时设置 `cert-allowed-cn` 配置项(TiDB 为 `cluster-verify-cn`),用于验证集群间各组件证书的 CN (Common Name)。
1685+
1686+ 4. 配置 PD 节点:
1687+
1688+ 1. 使用 ` kubectl exec` 进入 PD Pod 并安装 etcdctl。详细安装步骤可参考 [etcdctl 安装指南](https://etcd.io/docs/v3.4/install/)。安装完成后,etcdctl 位于解压后的文件夹目录下。
1689+
1690+ 2. 查看 etcd 成员信息,此时 ` peerURLs` 使用 HTTP 协议:
1691+
1692+ ` ` ` shell
1693+ ./etcdctl --endpoints https://127.0.0.1:2379 --cert /var/lib/pd-tls/tls.crt --key /var/lib/pd-tls/tls.key --cacert /var/lib/pd-tls/ca.crt member list
1694+ ` ` `
1695+
1696+ 输出示例:
1697+
1698+ ` ` ` shell
1699+ # memberID status name peerURLs clientURL isLearner
1700+ e94cfb12fa384e23, started, basic-pd-0, http://basic-pd-0.basic-pd-peer.pingcap.svc:2380, https://basic-pd-0.basic-pd-peer.pingcap.svc:2379, false
1701+ ` ` `
1702+
1703+ 记录以下信息用于下一步操作:
1704+
1705+ - ` memberID` :示例中为 ` e94cfb12fa384e23` 。
1706+ - ` peerURLs` :示例中为 ` http://basic-pd-0.basic-pd-peer.pingcap.svc:2380` 。
1707+
1708+ 3. 将 etcd member 的 ` peerURLs` 从 HTTP 更新为 HTTPS 协议:
1709+
1710+ ` ` ` shell
1711+ ./etcdctl --endpoints https://127.0.0.1:2379 --cert /var/lib/pd-tls/tls.crt --key /var/lib/pd-tls/tls.key --cacert /var/lib/pd-tls/ca.crt member update e94cfb12fa384e23 --peer-urls=" https://basic-pd-0.basic-pd-peer.pingcap.svc:2380"
1712+ ` ` `
1713+
1714+ 输出示例:
1715+
1716+ ` ` ` shell
1717+ Member e94cfb12fa384e23 updated in cluster 32ab5936d81ad54c
1718+ ` ` `
1719+
1720+ 4. 查看更新后的 ` peerURLs` ,确保已更新为 HTTPS 协议:
1721+
1722+ ` ` ` shell
1723+ ./etcdctl --endpoints https://127.0.0.1:2379 --cert /var/lib/pd-tls/tls.crt --key /var/lib/pd-tls/tls.key --cacert /var/lib/pd-tls/ca.crt member list
1724+ ` ` `
1725+
1726+ 输出示例:
1727+
1728+ ` ` ` shell
1729+ e94cfb12fa384e23, started, basic-pd-0, https://basic-pd-0.basic-pd-peer.pingcap.svc:2380, https://basic-pd-0.basic-pd-peer.pingcap.svc:2379, false
1730+ ` ` `
1731+
1732+ 5. 如果之前进行了 PD 节点缩容,请将其扩容为原有数量。
1733+ 6. 等待 TiDB 集群中的所有 Pod 完成重启。
0 commit comments