一、部署操作
1.集群节点规划:
2.准备cfssl证书生成工具(cfssl使用json生成证书,相比于openssl更方便使用)
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64
chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 cfssl-certinfo_linux-amd64
mv cfssl_linux-amd64 /usr/local/bin/cfssl
mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
mv cfssl-certinfo_linux-amd64 /usr/bin/cfssl-certinfo
以上操作时先下载下cfssl所需要的相关的软件包,其中第一个安装包的作用是创建证书、签发证书和管理证书,第二个安装包的作用是处理和转换cfssl输出的json数据,第三个安装包用于查看和解析证书的详细信息。之后的操作命令是赋予这三个文件的可执行权限并将它们移动到/usr/bin目录下可以使这些工具在任何地方通过命令行调用
3.生成etcd证书:
#创建工作目录
mkdir -p ~/TLS/{etcd,k8s}
cd ~/TLS/etcd
自签CA:
cat > ca-config.json << EOF
{
"signing": {
"default": {
"expiry": "87600h"
},
"profiles": {
"www": {
"expiry": "87600h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
EOF
cat > ca-csr.json << EOF
{
"CN": "etcd CA",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "Beijing",
"ST": "Beijing"
}
]
}
EOF
分别将上面这些有关CA的信息分别写入这两个配置文件中
生成证书:
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
这段命令表示根据ca-csr.json配置文件生成一个CA证书请求CSR和相应的私钥,然后后面部分的命令表示将输出的json数据转换成证书和密钥并保存为文件且文件名基于ca不带扩展名,根据文件的内容自动生成扩展名
之后会生成相应的ca.pem和ca-key.pem文件
2.使用自签CA签发etcd https证书
创建证书申请文件
cat > server-csr.json << EOF
{
"CN": "etcd",
"hosts": [
"192.168.31.71",
"192.168.31.72",
"192.168.31.73"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"L": "BeiJing",
"ST": "BeiJing"
}
]
}
EOF
其中hosts字段中ip为所有etcd节点的集群内部通信IP
生成证书:
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www
server-csr.json | cfssljson -bare server
上述命令的执行结果是生成server.pem和server-key.pem文件
该命令的具体操作过程是使用ca.pem和ca-key.pem用作为签名证书和私钥的CA证书签署服务器证书
3.从github中下载二进制文件:
https://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-
v3.4.9-linux-amd64.tar.gz
4.部署etcd集群:
创建工作目录并解压二进制包
mkdir /opt/etcd/{bin,cfg,ssl} -p
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz
mv etcd-v3.4.9-linux-amd64/{etcd,etcdctl} /opt/etcd/bin
创建etcd配置文件
cat > /opt/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.31.71:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.31.71:2379"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.31.71:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.31.71:2379"
ETCD_INITIAL_CLUSTER="etcd-1=https://192.168.31.71:2380,etcd-2=https://
192.168.31.72:2380,etcd-3=https://192.168.31.73:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
• ETCD_NAME:节点名称,集群中唯一
• ETCD_DATA_DIR:数据目录
• ETCD_LISTEN_PEER_URLS:集群通信监听地址
• ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
• ETCD_INITIAL_ADVERTISE_PEERURLS:集群通告地址
• ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
• ETCD_INITIAL_CLUSTER:集群节点地址
• ETCD_INITIALCLUSTER_TOKEN:集群 Token
• ETCD_INITIALCLUSTER_STATE:加入集群的当前状态,new 是新集群,existing
表示加入已有集群
5.systemd管理etcd:
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/opt/etcd/cfg/etcd.conf
ExecStart=/opt/etcd/bin/etcd \
--cert-file=/opt/etcd/ssl/server.pem \
--key-file=/opt/etcd/ssl/server-key.pem \
--peer-cert-file=/opt/etcd/ssl/server.pem \
--peer-key-file=/opt/etcd/ssl/server-key.pem \
--trusted-ca-file=/opt/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/opt/etcd/ssl/ca.pem \
--logger=zap
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
上述命令操作表示该服务会在网络服务启动之后启动并且会确保服务在网络完全可用时启动,之后的命令操作表示指定环境配置文件的路径,etcd启动时会读取此文件中的配置并且定义了启动服务的命令,之后设置了服务端的证书和私钥用于加密通信以及设置了与集群成员通信的证书和私钥。最后指定了信任的ca证书确保连接的安全性
6.拷贝生成的证书:
将之前生成的证书拷贝到配置文件中的路径:
cp ~/TLS/etcd/ca*pem ~/TLS/etcd/server*pem /opt/etcd/ssl/
7.启动并设置为开机自启动:
systemctl daemon-reload
systemctl start etcd
systemctl enable etcd
8.将上面节点1所有生成的文件拷贝到节点2和节点3:
scp -r /opt/etcd/ root@192.168.31.72:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.31.72:/usr/lib/systemd/system/
scp -r /opt/etcd/ root@192.168.31.73:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.31.73:/usr/lib/systemd/system/
之后分别在节点2和3上分别修改etcd.conf配置文件中的节点名称和当前服务器的名称