前言
距离我上次安装ETCD集群已经过去快1年了.
当初只是为了学习K8S 二进制安装才弄出这个.
不过目前k8s已经在生产环境中使用1年了,但K8S二进制安装还没有一次. 毕竟使用的都是云商现成的产品.
现在在重新看自己之前的文档,发现还是有一些错误.
比如:
生成了客户端证书,但是自己缺没有用到
毕竟当初初次接触, 也是参照网上的文档做出来…
正好这次抽空重新在部署一次. 就让我们从ETCD集群开始吧.
部署前准备
环境需求
关闭防火墙
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
| ./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: GITHUB_URL=https: 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
|