centos7使用二进制部署TLS加密etcd集群

etcd支持通过TLS协议的加密通讯,在实际企业生产环境中,出于安全规范要求,建议开启TLS加密。TLS通道可以用于加密内部的集群通讯,也可以用于加密客户端请求。

etcd的TLS有两对,一对是etcd和client端的TLS配置。一对是etcd之间的peer的TLS配置。有很多方式可以创建CA证书和私钥,其中比较流行的有两种

01.
openssl
02.
cfssl

我们目前规划集群信息如下:

01.
192.168.1.76 etcd1
02.
192.168.1.77 etcd2
03.
192.168.1.79 etcd3

官方文档推荐使用cfssl生成证书,所以我们这里今天使用cfssl进行加密,具体操作如下

首先我们需要下载cfssl和csffljson两个工具

01.
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
02.
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
03.
mv cfssl_1.6.3_linux_amd64 /usr/bin/cfssl
04.
mv cfssljson_1.6.3_linux_amd64 /usr/bin/cfssljson
05.
chmod +x /usr/bin/{cfssl,cfssljson}
06.
cfssl version
07.
Version: 1.6.3
08.
Runtime: go1.18

生成etcd证书,自签证书办法机构(CA)

01.
#生成CA证书配置
02.
cat >ca-config.json<<EOF
03.
{
04.
  "signing": {
05.
    "default": {
06.
      "expiry": "87600h"
07.
    },
08.
    "profiles": {
09.
      "www": {
10.
         "expiry": "87600h",
11.
         "usages": [
12.
            "signing",
13.
            "key encipherment",
14.
            "server auth",
15.
            "client auth"
16.
        ]
17.
      }
18.
    }
19.
  }
20.
}
21.
EOF
22.
#生成CA证书请求配置
23.
cat >ca-csr.json<<EOF
24.
{
25.
    "CN": "etcd CA",
26.
    "key": {
27.
        "algo": "rsa",
28.
        "size": 2048
29.
    },
30.
    "names": [
31.
        {
32.
            "C": "CN",
33.
            "L": "Beijing",
34.
            "ST": "Beijing"
35.
        }
36.
    ]
37.
}
38.
EOF

生成证书,会生成ca.pem和ca-key.pem文件

01.
cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

使用自签额CA签发etcd https证书

01.
#生成证书请求配置
02.
cat >server-csr.json<<EOF
03.
{
04.
    "CN": "etcd",
05.
    "hosts": [
06.
        "127.0.0.1",
07.
        "192.168.1.76",
08.
        "192.168.1.77",
09.
        "192.168.1.79"
10.
    ],
11.
    "key": {
12.
        "algo": "rsa",
13.
        "size": 2048
14.
    },
15.
    "names": [
16.
        {
17.
            "C": "CN",
18.
            "L": "BeiJing",
19.
            "ST": "BeiJing"
20.
        }
21.
    ]
22.
}
23.
EOF

生成证书,会生成server.pem和server-key.pem文件

01.
cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server

在每个etc集群下创建配置和存储,配置目录下再创建pki证书目录

01.
mkdir -p /etc/etcd/pki
02.
mkdir -p /data/etcd/

在etcd1上拷贝证书到/etc/etcd/pki/目录

01.
cp ca* server* /etc/etcd/pki/

同时也将这个证书打包分发到其他etd集群节点

01.
cd /etc/etcd
02.
tar -zcvf pki.tar.gz ./pki
03.
scp pki.tar.gz root@192.168.1.77:/root/
04.
scp pki.tar.gz root@192.168.1.79:/root/

然后在每个etcd集群节点把证书存放到指定位置

01.
tar -zxvf pki.tar.gz -C /etc/etcd/

接着我们在每个etcd集群节点上配置etcd的配置文件,其中192.168.1.76为我etcd1的IP,其他节点改成其他节点的IP,ETCD_NAME名字也根据节点情况进行修改

01.
cat /etc/etcd/etcd.conf
02.
#[Member]
03.
ETCD_NAME="etcd1" # 确保集群中命名唯一
04.
ETCD_DATA_DIR="/data/etcd" # ETCD存储目录
05.
ETCD_LISTEN_PEER_URLS="https://192.168.1.76:2380" # 修改为本机IP
06.
ETCD_LISTEN_CLIENT_URLS="https://192.168.1.76:2379" # 修改为本机IP 
07.
08.
#[Clustering]
09.
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.1.76:2380" # 修改为本机IP 
10.
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.1.76:2379" # 修改为本机IP 
11.
ETCD_INITIAL_CLUSTER="etcd1=https://192.168.1.76:2380,etcd2=https://192.168.1.77:2380,etcd3=https://192.168.1.79:2380" # 集群中三个etcd节点IP
12.
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster" # 所有节点token一致
13.
ETCD_INITIAL_CLUSTER_STATE="new"

参数说明

01.
ETCD_NAME:节点名称,集群中唯一
02.
ETCD_DATA_DIR:数据目录
03.
ETCD_LISTEN_PEER_URLS:集群通信监听地址
04.
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
05.
ETCD_INITIAL_ADVERTISE_PEERURLS:集群通告地址
06.
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
07.
ETCD_INITIAL_CLUSTER:集群节点地址
08.
ETCD_INITIALCLUSTER_TOKEN:集群Token
09.
ETCD_INITIALCLUSTER_STATE:加入集群的当前状态,new是新集群,existing表示加入已有集群

添加etcd启动服务文件,每个节点都均要添加

01.
cat >/usr/lib/systemd/system/etcd.service<<EOF
02.
[Unit]
03.
Description=Etcd Server
04.
After=network.target
05.
After=network-online.target
06.
Wants=network-online.target
07.
08.
[Service]
09.
Type=notify
10.
EnvironmentFile=/etc/etcd/etcd.conf
11.
ExecStart=/usr/local/etcd/etcd \
12.
--cert-file=/etc/etcd/pki/server.pem \
13.
--key-file=/etc/etcd/pki/server-key.pem \
14.
--peer-cert-file=/etc/etcd/pki/server.pem \
15.
--peer-key-file=/etc/etcd/pki/server-key.pem \
16.
--trusted-ca-file=/etc/etcd/pki/ca.pem \
17.
--peer-trusted-ca-file=/etc/etcd/pki/ca.pem \
18.
--logger=zap
19.
Restart=on-failure
20.
LimitNOFILE=65536
21.
22.
[Install]
23.
WantedBy=multi-user.target
24.
EOF

设置开机启动,并启动etcd服务

01.
systemctl daemon-reload
02.
systemctl enable etcd
03.
systemctl start etcd

查看集群成员

01.
etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://192.168.1.76:2379,https://192.168.1.77:2379,https://192.168.1.79:2379" member list -w table

微信截图_20240129153130.png

查看集群状态

01.
etcdctl --cacert=/etc/etcd/pki/ca.pem --cert=/etc/etcd/pki/server.pem --key=/etc/etcd/pki/server-key.pem --endpoints="https://192.168.1.76:2379,https://192.168.1.77:2379,https://192.168.1.79:2379" endpoint status --cluster -w table

微信截图_20240129153151.png


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/966

评论列表