etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value) 数据库。etcd内部采用raft协议作为一致性 算法,etcd是go语言编写的。
etcd作为服务发现系统,有以下的特点:
etcd目前默认使用2379端口提供HTTP API服务,2380端口和peer通信(这两个端口已经被IANA (互联网数字分配机构)官方预留给etcd)。
即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
etcd在生产环境中一般推荐集群方式部署。由于etcd的leader选举机制,要求至少为3台或以上的奇数台。
CFSSL是CloudFlare公司开源的一款 PKI/TLS 工具。CFSSL 包含一个命令行工具和一个用于签名、验证和捆绑TLS证书的HTTP API服务。使用Go语言编写。
CFSSL使用配置文件生成证书,因此自签之前,需要生成它识别的json格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL用来为etcd提供TLS 证书,它支持签三种类型的证书:
这里全部都使用同一套证书认证。
//下载证书制作工具
wget https: //pkg.cfssl .org/R1.2/cfssl_ linux-amd64 -0 /usr/ local/bin/cfssl
wget https: //pkg.cfssl.org/R1.2/cfssljson linux-amd64 -0 /usr/local/bin/cfsslj son
wget https: //pkg.cfssl.org/R1.2/cfssl-certinfo 1 inux-amd64 -0 /usr/local /bin/cfssl-certinfo
或
curl -L https:// 4pkg.cfssl. org/R1.2/cfssl_ linux-amd64 -o /usr/local/bin/cfssl
curl -L https://pkg. cfssl .org/R1.2/cfssljson_ linux-amd64 -0 /usr/ local/bin/cfssljson
curl -L https://pkg. cfssl. org/R1.2/cfssl-certinfo linux-amd64 -0 /usr/ local/bin/cfssl-certinfo .
chmod +x /usr/local/bin/cfss1*
cfssl: 证书签发的工具命令
cfssljson: 将cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert < 证书名称>
#查看证书的信息
master节点服务器操作
[root@master1 ~] hostnamectl set-hostname master01
[root@master1 ~] su
[root@master01 ~] cd /usr/local/bin
[root@master01 bin] rz -E 将etcd-cert三个文本拖入指定目录下
rz waiting to receive.
[root@master01 bin] chmod +x *
[root@master01 bin] ls
cfssl cfssl-certinfo cfssljson
[root@master01 bin] systemctl stop firewalld
[root@master01 bin] setenforce 0
[root@master01 bin] ll
总用量 18808
-rwxr-xr-x. 1 root root 10376657 2月 17 17:08 cfssl
-rwxr-xr-x. 1 root root 6595195 2月 17 17:08 cfssl-certinfo
-rwxr-xr-x. 1 root root 2277873 2月 17 17:05 cfssljson
[root@master01 bin] cd /opt
[root@master01 opt] ls
lnmp.sh rh yum.sh
[root@master01 opt] rm -rf *
[root@master01 opt] ls
[root@master01 opt] mkdir k8s 创建k8s目录
[root@master01 opt] ls
k8s
[root@master01 opt] cd k8s/
[root@master01 k8s] rz -E
rz waiting to receive.
[root@master01 k8s] ls 上传etcd-cert.sh和 etcd.sh到/opt/k8s目录下
etcd-cert.sh etcd.sh
[root@master01 k8s] vim etcd-cert.sh
cat etcd.sh
#!/bin/bash
#以下为使用格式:etcd名称 当前etcd的IP地址+完整的集群名称和地址
# example: ./etcd.sh etcd01 192.168.64.128 etcd02=https://192.168.64.129:2380,etcd03=https://192.168.64.130:2380
ETCD_NAME=$1 #位置变量1:etcd节点名称
ETCD_IP=$2 #位置变量2:节点地址
ETCD_CLUSTER=$3 #位置变量3:集群
WORK_DIR=/opt/etcd #指定工作目录
cat <$WORK_DIR/cfg/etcd #在指定工作目录创建ETCD的配置文件
#[Member]
ETCD_NAME="${ETCD_NAME}" #etcd名称
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380" #etcd IP地址:2380端口。用于集群之间通讯
ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379" #etcd IP地址:2379端口,用于开放给外部客户端通讯
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379" #对外提供的url使用https的协议进行访问
ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}" #多路访问
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" #tokens 令牌环名称:etcd-cluster
ETCD_INITIAL_CLUSTER_STATE="new" #状态,重新创建
EOF
cat </usr/lib/systemd/system/etcd.service #定义ectd的启动脚本
[Unit] #基本项
Description=Etcd Server #类似为 etcd 服务
After=network.target #vu癌症
After=network-online.target
Wants=network-online.target
[Service] #服务项
Type=notify
EnvironmentFile=${WORK_DIR}/cfg/etcd #etcd文件位置
ExecStart=${WORK_DIR}/bin/etcd \ #准启动状态及以下的参数
--name=\${ETCD_NAME} \
--data-dir=\${ETCD_DATA_DIR} \
--listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
--listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
--advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \ #以下为群集内部的设定
--initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--initial-cluster=\${ETCD_INITIAL_CLUSTER} \
--initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \ #群集内部通信,也是使用的令牌,为了保证安全(防范中间人窃取)
--initial-cluster-state=new \
--cert-file=${WORK_DIR}/ssl/server.pem \ #证书相关参数
--key-file=${WORK_DIR}/ssl/server-key.pem \
--peer-cert-file=${WORK_DIR}/ssl/server.pem \
--peer-key-file=${WORK_DIR}/ssl/server-key.pem \
--trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
--peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
Restart=on-failure
LimitNOFILE=65536 #开放最多的端口号
[Install]
WantedBy=multi-user.target #进行启动
EOF
systemctl daemon-reload #参数重载
systemctl enable etcd
systemctl restart etcd
[root@master01 k8s] mkdir etcd-cert 创建证书目录
[root@master01 k8s] ls
etcd-cert etcd-cert.sh etcd.sh
[root@master01 k8s] mv etcd-cert.sh etcd-cert 将证书脚本放在证书目录下
[root@master01 k8s] ls
etcd-cert etcd.sh
[root@master01 k8s] cd etcd-cert/
[root@master01 etcd-cert] ls
etcd-cert.sh
[root@master01 etcd-cert] chmod +x *
[root@master01 etcd-cert] ./etcd-cert.sh 执行脚本
2021/08/13 06:54:39 [INFO] generating a new CA key and certificate from CSR
2021/08/13 06:54:39 [INFO] generate received request
2021/08/13 06:54:39 [INFO] received CSR
2021/08/13 06:54:39 [INFO] generating key: rsa-2048
2021/08/13 06:54:39 [INFO] encoded CSR
2021/08/13 06:54:40 [INFO] signed certificate with serial number 619614046809237172556931384023752917182471755986
2021/08/13 06:54:40 [INFO] generate received request
2021/08/13 06:54:40 [INFO] received CSR
2021/08/13 06:54:40 [INFO] generating key: rsa-2048
2021/08/13 06:54:40 [INFO] encoded CSR
2021/08/13 06:54:40 [INFO] signed certificate with serial number 87622395903266602853740548479298909642519650542
2021/08/13 06:54:40 [WARNING] This certificate lacks a "hosts" field. This makes it unsuitable for
websites. For more information see the Baseline Requirements for the Issuance and Management
of Publicly-Trusted Certificates, v.1.1.6, from the CA/Browser Forum (https://cabforum.org);
specifically, section 10.2.3 ("Information Requirements").
[root@master01 etcd-cert] cd /opt/k8s
[root@master01 k8s] rz -E 上传etcd压缩包
rz waiting to receive.
[root@master01 k8s] ls
etcd-cert etcd.sh etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s] tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz 解压
...
[root@master01 k8s] ls
etcd-cert etcd.sh etcd-v3.3.10-linux-amd64 etcd-v3.3.10-linux-amd64.tar.gz
[root@master01 k8s] mkdir -p /opt/etcd/{cfg,bin,ssl} 创建用于存放 etcd 配置文件,命令文件,证书的目录
[root@master01 k8s] cd /opt/etcd
[root@master01 etcd] ls
bin cfg ssl
[root@master01 etcd] cd /opt/k8s/
[root@master01 k8s] cd etcd-v3.3.10-linux-amd64/
[root@master01 etcd-v3.3.10-linux-amd64] ls
Documentation etcd etcdctl README-etcdctl.md README.md READMEv2-etcdctl.md
[root@master01 etcd-v3.3.10-linux-amd64] mv etcd etcdctl /opt/etcd/bin/ 将刚刚解压出来的etcd文件中的 etcd 和 etcdctl移动到 /opt/etcd/bin目录下
[root@master01 etcd-v3.3.10-linux-amd64] cd ..
[root@master01 k8s] cd etcd-cert/
[root@master01 etcd-cert] ll
总用量 40
-rw-r--r--. 1 root root 287 8月 13 06:54 ca-config.json
-rw-r--r--. 1 root root 952 8月 13 06:54 ca.csr
-rw-r--r--. 1 root root 206 8月 13 06:54 ca-csr.json
-rw-------. 1 root root 1679 8月 13 06:54 ca-key.pem
-rw-r--r--. 1 root root 1257 8月 13 06:54 ca.pem
-rwxr-xr-x. 1 root root 3667 6月 24 20:36 etcd-cert.sh
-rw-r--r--. 1 root root 1013 8月 13 06:54 server.csr
-rw-r--r--. 1 root root 290 8月 13 06:54 server-csr.json
-rw-------. 1 root root 1679 8月 13 06:54 server-key.pem
-rw-r--r--. 1 root root 1334 8月 13 06:54 server.pem
[root@master01 etcd-cert] cp *.pem /opt/etcd/ssl 将刚刚解压出来的etcd文件中的 私钥和公钥还有证书 移动到 /opt/etcd/ssl目录下
[root@master01 etcd-cert] cd /opt/etcd
[root@master01 etcd] ls bin
etcd etcdctl
[root@master01 etcd] ls ssl
ca-key.pem ca.pem server-key.pem server.pem
[root@master01 etcd] cd /opt/k8s
[root@master01 k8s] ./etcd.sh etcd01 192.168.64.128 etcd02=https://192.168.64.129:2380,etcd03=https://192.168.64.130:2380
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
进入卡顿状态,等待其他节点加入,需要3台同时启动
将opt目录下的文件全部传给node01和node02服务器
在这里插入代码片
将/usr/lib/systemd/system文件下的etcd.service文件传给其他两台服务器
两台node节点服务器操作