Skip to content

Commit

Permalink
zh: update tls doc for tiflash (pingcap#654)
Browse files Browse the repository at this point in the history
* update tls doc for tiflash

* Apply suggestions from code review

Co-authored-by: Ran <[email protected]>

* Apply suggestions from code review

Co-authored-by: Ran <[email protected]>
  • Loading branch information
DanielZhangQD and ran-huang authored Aug 21, 2020
1 parent c0da0e5 commit dde81d9
Showing 1 changed file with 130 additions and 11 deletions.
141 changes: 130 additions & 11 deletions zh/enable-tls-between-components.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,16 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
本文主要描述了在 Kubernetes 上如何为 TiDB 集群组件间开启 TLS。TiDB Operator 从 v1.1 开始已经支持为 Kubernetes 上 TiDB 集群组件间开启 TLS。开启步骤为:

1. 为即将被创建的 TiDB 集群的每个组件生成证书:
- 为 PD/TiKV/TiDB/Pump/Drainer 组件分别创建一套 Server 端证书,保存为 Kubernetes Secret 对象:`${cluster_name}-${component_name}-cluster-secret`
- 为 PD/TiKV/TiDB/Pump/Drainer/TiFlash 组件分别创建一套 Server 端证书,保存为 Kubernetes Secret 对象:`${cluster_name}-${component_name}-cluster-secret`
- 为它们的各种客户端创建一套共用的 Client 端证书,保存为 Kubernetes Secret 对象:`${cluster_name}-cluster-client-secret`
2. 部署集群,设置 `.spec.tlsCluster.enabled` 属性为 `true`
3. 配置 `pd-ctl``tikv-ctl` 连接集群。

> **注意:**
>
> * TiDB v4.0.5, TiDB Operator v1.1.4 及以上版本支持 TiFlash 开启 TLS。
> * TiDB v4.0.3, TiDB Operator v1.1.3 及以上版本支持 TiCDC 开启 TLS。
其中,颁发证书的方式有多种,本文档提供两种方式,用户也可以根据需要为 TiDB 集群颁发证书,这两种方式分别为:

- 使用 `cfssl` 系统颁发证书;
Expand All @@ -36,13 +41,12 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']

mkdir -p cfssl
cd cfssl
cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json
```

2. `ca-config.json` 配置文件中配置 CA 选项
2. 生成 `ca-config.json` 配置文件

``` json
```shell
cat << EOF > ca-config.json
{
"signing": {
"default": {
Expand All @@ -69,15 +73,13 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
}
}
}
EOF
```
> **注意:**
>
> 这里的 `profiles internal``usages` 必须添加上 `"client auth"`。因为这套证书会同时作为 Server 和 Client 端证书使用。

3. 您还可以修改 `ca-csr.json` 证书签名请求 (CSR):
3. 生成 `ca-csr.json` 配置文件:
``` json
```shell
cat << EOF > ca-csr.json
{
"CN": "TiDB",
"key": {
Expand All @@ -94,6 +96,7 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
}
]
}
EOF
```
4. 使用定义的选项生成 CA:
Expand Down Expand Up @@ -383,6 +386,47 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=internal ticdc-server.json | cfssljson -bare ticdc-server
```
- TiFlash Server 端证书
首先生成默认的 `tiflash-server.json` 文件:
{{< copyable "shell-regular" >}}
```shell
cfssl print-defaults csr > tiflash-server.json
```
然后编辑这个文件,修改 `CN``hosts` 属性:
```json
...
"CN": "TiDB",
"hosts": [
"127.0.0.1",
"::1",
"${cluster_name}-tiflash",
"${cluster_name}-tiflash.${namespace}",
"${cluster_name}-tiflash.${namespace}.svc",
"${cluster_name}-tiflash-peer",
"${cluster_name}-tiflash-peer.${namespace}",
"${cluster_name}-tiflash-peer.${namespace}.svc",
"*.${cluster_name}-tiflash-peer",
"*.${cluster_name}-tiflash-peer.${namespace}",
"*.${cluster_name}-tiflash-peer.${namespace}.svc"
],
...
```
其中 `${cluster_name}` 为集群的名字,`${namespace}` 为 TiDB 集群部署的命名空间,用户也可以添加自定义 `hosts`
最后生成 TiFlash Server 端证书:
{{< copyable "shell-regular" >}}
``` shell
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=internal tiflash-server.json | cfssljson -bare tiflash-server
```
6. 生成 Client 端证书。
首先生成默认的 `client.json` 文件:
Expand Down Expand Up @@ -452,6 +496,22 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
kubectl create secret generic ${cluster_name}-drainer-cluster-secret --namespace=${namespace} --from-file=tls.crt=drainer-server.pem --from-file=tls.key=drainer-server-key.pem --from-file=ca.crt=ca.pem
```
TiCDC 集群证书 Secret:
{{< copyable "shell-regular" >}}
``` shell
kubectl create secret generic ${cluster_name}-ticdc-cluster-secret --namespace=${namespace} --from-file=tls.crt=ticdc-server.pem --from-file=tls.key=ticdc-server-key.pem --from-file=ca.crt=ca.pem
```
TiFlash 集群证书 Secret:
{{< copyable "shell-regular" >}}
``` shell
kubectl create secret generic ${cluster_name}-tiflash-cluster-secret --namespace=${namespace} --from-file=tls.crt=tiflash-server.pem --from-file=tls.key=tiflash-server-key.pem --from-file=ca.crt=ca.pem
```
Client 证书 Secret:
{{< copyable "shell-regular" >}}
Expand Down Expand Up @@ -910,6 +970,65 @@ aliases: ['/docs-cn/tidb-in-kubernetes/dev/enable-tls-between-components/']
创建这个对象以后,`cert-manager` 会生成一个名字为 `${cluster_name}-ticdc-cluster-secret` 的 Secret 对象供 TiDB 集群的 TiCDC 组件使用。
- TiFlash 组件的 Server 端证书。
```yaml
apiVersion: cert-manager.io/v1alpha2
kind: Certificate
metadata:
name: ${cluster_name}-tiflash-cluster-secret
namespace: ${namespace}
spec:
secretName: ${cluster_name}-tiflash-cluster-secret
duration: 8760h # 365d
renewBefore: 360h # 15d
organization:
- PingCAP
commonName: "TiDB"
usages:
- server auth
- client auth
dnsNames:
- "${cluster_name}-tiflash"
- "${cluster_name}-tiflash.${namespace}"
- "${cluster_name}-tiflash.${namespace}.svc"
- "${cluster_name}-tiflash-peer"
- "${cluster_name}-tiflash-peer.${namespace}"
- "${cluster_name}-tiflash-peer.${namespace}.svc"
- "*.${cluster_name}-tiflash-peer"
- "*.${cluster_name}-tiflash-peer.${namespace}"
- "*.${cluster_name}-tiflash-peer.${namespace}.svc"
ipAddresses:
- 127.0.0.1
- ::1
issuerRef:
name: ${cluster_name}-tidb-issuer
kind: Issuer
group: cert-manager.io
```
其中 `${cluster_name}` 为集群的名字:
- `spec.secretName` 请设置为 `${cluster_name}-tiflash-cluster-secret`
- `usages` 请添加上 `server auth``client auth`
- `dnsNames` 需要填写这些 DNS,根据需要可以填写其他 DNS:
- `${cluster_name}-tiflash`
- `${cluster_name}-tiflash.${namespace}`
- `${cluster_name}-tiflash.${namespace}.svc`
- `${cluster_name}-tiflash-peer`
- `${cluster_name}-tiflash-peer.${namespace}`
- `${cluster_name}-tiflash-peer.${namespace}.svc`
- `*.${cluster_name}-tiflash-peer`
- `*.${cluster_name}-tiflash-peer.${namespace}`
- `*.${cluster_name}-tiflash-peer.${namespace}.svc`
- `ipAddresses` 需要填写这两个 IP ,根据需要可以填写其他 IP:
- `127.0.0.1`
- `::1`
- `issuerRef` 请填写上面创建的 Issuer;
- 其他属性请参考 [cert-manager API](https://cert-manager.io/docs/reference/api-docs/#cert-manager.io/v1alpha2.CertificateSpec)。
创建这个对象以后,`cert-manager` 会生成一个名字为 `${cluster_name}-tiflash-cluster-secret` 的 Secret 对象供 TiDB 集群的 TiFlash 组件使用。
- 一套 TiDB 集群组件的 Client 端证书。
``` yaml
Expand Down

0 comments on commit dde81d9

Please sign in to comment.