-
部署形态
-
单点
-
集群
-
http通信集群
-
https通信集群
-
单证书部署(集群节点证书相同)
-
多证书部署(集群节点证书不同)
-
-
-
上面几种,单点和http集群没啥好说的,单证书部署的操作请参考我全手动部署kubernetes (h2c.tech) ,本文主要说的是多证书的情形。
下载etcd
访问 Releases · etcd-io/etcd (github.com) 下载etcd
下载cfssl
访问 Releases · cloudflare/cfssl (github.com) 下载cfssl,别问我为啥不直接用openssl,问就是懒。下载下面这三个:
-
cfssl
-
cfssl-certinfo
-
cfssljson
生成证书
|
|
上面用到了一个小技巧,用$(eval echo \$node$i)
来 Evaluation 获取变量值,避免直接展开成字符串,如果你直接写$(node$i)
那就会获取不到。
解析:cfssl gencert -initca cfssl-conf/ca-csr.json | cfssljson -bare ca/ca -
cfssl gencert -initca cfssl-conf/ca-csr.json
这部分是生成自签名的根CA证书和私钥。它使用-initca
标志表示这是一个CA根证书,并从cfssl-conf/ca-csr.json
文件读取证书签名请求配置。|
管道符用于将前一个命令的输出作为后一个命令的输入。cfssljson -bare ca/ca
这个部分将从管道输入解析出证书和私钥,并以ca
为前缀输出到ca/
下。即会生成ca/ca.pem
证书文件和ca/ca-key.pem
私钥文件。-
符号表示输出到标准输出,也就是终端屏幕。
另外一个类似,只有一个区别就是它指定了profile使用peer这个。
生成完成以后分发到各个节点,指定一个固定的路径给它存放,我是放到了/etc/etcd/etcd-cert/node-cert/
etcdctl证书
我还习惯单独给客户端发一个证书:
|
|
配置etcd
官方示例:
|
|
测试环境示例配置文件:
|
|
上面的配置文件用户主要需要关注的是:
-
name
-
data-dir
-
wal-dir
-
listen-peer-urls
-
listen-client-urls
-
initial-advertise-peer-urls
-
advertise-client-urls
-
initial-cluster
-
client-transport-security.cert-file
-
client-transport-security.key-file
-
client-transport-security.trusted-ca-file
-
peer-transport-security.cert-file
-
peer-transport-security.key-file
-
peer-transport-security.trusted-ca-file
其他节点与上面节点不同,需要修改的内容为:
-
name: infra0
:infra0改成对应的节点名 -
listen-peer-urls: https://172.15.110.84:2380
:172.15.110.84 改成对应机器的IP或者域名 -
advertise-client-urls: https://172.15.110.84:2379
:172.15.110.84 改成对应机器的IP或者域名 -
cert-file: '/etc/etcd/etcd-cert/node-cert/infra0.pem'
:节点公钥修改成自己对应节点的公钥 -
key-file: '/etc/etcd/etcd-cert/node-cert/infra0-key.pem'
:节点私钥修改成自己对应节点的私钥
配置systemd
|
|
配置完成以后重载:
|
|
验证
|
|
|
|
|
|
|
|