momo's Blog.

ETCD集群安装v2

字数统计: 757阅读时长: 3 min
2020/12/14 Share

前言

距离我上次安装ETCD集群已经过去快1年了.
当初只是为了学习K8S 二进制安装才弄出这个.

不过目前k8s已经在生产环境中使用1年了,但K8S二进制安装还没有一次. 毕竟使用的都是云商现成的产品.

现在在重新看自己之前的文档,发现还是有一些错误.
比如:
生成了客户端证书,但是自己缺没有用到

毕竟当初初次接触, 也是参照网上的文档做出来…
正好这次抽空重新在部署一次. 就让我们从ETCD集群开始吧.

部署前准备

环境需求

  • Centos7.6

关闭防火墙

1
systemctl disable firewalld && systemctl stop firewalld && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

生成证书

用到了cfssl 工具请自行到发布页面下载: Releases

关于CA,我这边简单概括一下.

默认服务端和客户端都有各自的 (证书)公钥私钥 证书里的公钥负责加密, 私钥负责解密

那通信过程中, 谁来保证证书的正确性呢?

这个时候就需要第三方参与CA
CA是通俗的来说,就是证明这个证书的合法性

CA会生成一个公钥和签名私钥, 并且通过私钥对服务端的公钥和其他内容进行签名

注意了,这个签名是 私钥签名 公钥验证.

所以: 客户端只需要拿到CA下发的公钥, 并通过这个公钥去验证服务端的证书,就能判断是此证书是否合法.

参考回答: RSA的公钥和私钥到底哪个才是用来加密和哪个用来解密?

默认证书

证书签发配置 ca-config.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"peer": {
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
],
"expiry": "87600h"
},
"client": {
"usages": [
"signing",
"key encipherment",
"client auth"
],
"expiry": "87600h"
},
"server": {
"usages": [
"signing",
"key encipherment",
"server auth"
],
"expiry": "87600h"
}
}
}
}

CA 证书配置 ca.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"CN": "CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanhai",
"L": "Shanhai",
"O": "Mu77Mu77",
"OU": "ops"
}
]
}

服务端对等证书请求 ``

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"CN": "etcd",
"hosts": [
"127.0.0.1",
"192.168.1.20",
"192.168.1.23",
"192.168.1.26",
"etcd1",
"etcd2",
"etcd3"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "Shanhai",
"L": "Shanhai",
"O": "Mu77Mu77",
"OU": "ops"
}
]
}

生成证书

1
2
3
4
5
6
# 创建CA证书
./cfssl gencert -initca ca.json | ./cfssljson -bare root-ca

# 创建对等证书

./cfssl gencert --ca root-ca.pem --ca-key root-ca-key.pem --config ca-config.json -profile=peer etcd-peer-ca.json | ./cfssljson --bare etcd

安装ETCD

下载ETCD

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ETCD_VER=v3.4.14

# choose either URL
GOOGLE_URL=https://storage.googleapis.com/etcd
GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
DOWNLOAD_URL=${GITHUB_URL}

rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
rm -rf /tmp/etcd-download-test && mkdir -p /tmp/etcd-download-test

curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz

/tmp/etcd-download-test/etcd --version
/tmp/etcd-download-test/etcdctl version
CATALOG
  1. 1. 前言
  2. 2. 部署前准备
    1. 2.1. 环境需求
    2. 2.2. 生成证书
  3. 3. 安装ETCD
    1. 3.1. 下载ETCD