当前位置: 首页 > news >正文

【ETCD】ETCD单节点二进制部署(TLS) - 教程

【ETCD】ETCD单节点二进制部署(TLS) - 教程

ETCD单节点二进制部署(TLS)

资源列表

操作系统配置主机名IP
openEuler2C4Getcd192.168.93.101

基础环境

systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname etcd

一、安装部署(单机)

  • 如果是在测试或者开发环境,想要测试和使用etcd服务,只需要部署一个单节点的etcd服务即可。

1.1、二进制文件部署

[root@etcd ~]# wget https://github.com/etcd-io/etcd/releases/download/v3.4.23/etcd-v3.4.23-linux-amd64.tar.gz
[root@etcd ~]# tar -zxvf etcd-v3.4.23-linux-amd64.tar.gz
[root@etcd ~]# mv etcd-v3.4.23-linux-amd64 /usr/local/etcd
  • 添加环境变量
[root@etcd ~]# vim /etc/profile
# 末尾添加即可
export PATH="$PATH:/usr/local/etcd"
# 刷新环境变量
[root@etcd ~]# source /etc/profile
  • 验证客户端工具是否可用
[root@etcd ~]# etcdctl version
etcdctl version: 3.4.23
API version: 3.4

1.2、添加system服务管理

# 创建配置文件目录
[root@etcd ~]# mkdir -p /etc/etcd
# 创建数据目录里
[root@etcd ~]# mkdir -p /etc/etcd/data
  • 创建system服务配置
[root@etcd ~]# cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/etc/etcd/etcd.conf
ExecStart=/usr/local/etcd/etcd --config-file=/etc/etcd/etcd.conf
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
  • 创建etcd配置文件
[root@etcd ~]# cat /etc/etcd/etcd.conf 
# 节点名称
name: 'etcd-1'
# 指定节点的数据存储目录
data-dir: '/etc/etcd/data'
# 对外提供服务的地址,客户端会连接到这里和 etcd 交互
listen-client-urls: 'http://192.168.93.101:2379,http://127.0.0.1:2379'
  • 启动etcd服务并添加开机自启动
[root@etcd ~]# systemctl start etcd
[root@etcd ~]# systemctl enable etcd
  • 除了可以使用配置文件指定配置外,也可以直接通过命令行参数指定配置,常用的命令行参数如下(推荐使用配置文件),命令行参数参考文档:https://etcd.io/docs/v3.5/op-guide/configuration/,配置文件参数文档:https://github.com/etcd-io/etcd/blob/main/etcd.conf.yml.sample
参数说明
–nameetcd节点名字如果在集群环境中,name必须是唯一的,建议用主机名称或者机器ID
–data-dir数据存储目录
–initial-clusteretcd启动的时候,通过这个配置找到其他etcd节点的地址列表,格式:节点名字1=http://节点ip1:2380,节点名字2=http://节点ip1:2380,节点名字3=http://节点ip1:2380
–initial-cluster-state初始化的时候,集群的状态“new”或者“existing”两种状态,new代表新建的集群,existing表示加入已经存在的集群。
–advertise-client-urls如果–listen-client-urls配置了,多个监听客户端请求的地址,这个参数可以给出,建议客户端使用什么地址访问etcd。
–initial-advertise-peer-urls服务端之间通讯使用的地址列表。
–listen-client-urls监听客户端请求的地址列表,格式:http://localhost:2379,多个用逗号分隔。
–listen-peer-urls服务端节点之间通讯的监听地址,格式http://localhost:2380

1.3、验证

  • 查看集群状态
[root@etcd ~]# etcdctl endpoint status --cluster -w table
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|       ENDPOINT        |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| http://localhost:2379 | 8e9e05c52164694d |  3.4.23 |   20 kB |      true |      false |         2 |          4 |                  4 |        |
+-----------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
### 回显字段含义
ENDPOINT: etcd节点的访问地址(客户端URL), 这里是 http://localhost:2379
ID: 节点的唯一成员ID(十六进制), 由etcd启动时自动生成。8e9e05c52164694d    是著名的etcd默认ID(常用于单节点测试)
DB SIZE: etcd后端数据库(boltdb)当前磁盘占用大小, 20kb表示数据量很小
IS LEADER: 是否是当前Raft协议的Leader (true=Leader(负责处理些请求) false=Follower)
IS LEARNER: 是否是学习者节点(learner) -false表示正式投票成员 -Learner是v3.4+引入的, 用于俺去那加入新节点(不参与投票)
P
PAFT TERM: 当前 Raft 任期号(Term)。每次选举 Leader 时递增。这里是 2,说明经历过一次 Leader 选举(初始为 1)
PAFT APPLIED INDEX: 已经被状态机(即 etcd KV存储)实际应用的日志索引
ERRORS: 节点状态错误信息, 为空表示监控

二、部署TLS加密

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

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

    • openssl
    • cfssl
  • 官方文档推荐使用cfssl生成证书

2.1、下载安装cfssl

[root@etcd ~]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
[root@etcd ~]# wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64
[root@etcd ~]# mv cfssl_1.6.3_linux_amd64 /usr/bin/cfssl
[root@etcd ~]# mv cfssljson_1.6.3_linux_amd64 /usr/bin/cfssljson
[root@etcd ~]# chmod +x /usr/bin/{cfssl,cfssljson}
[root@etcd ~]# cfssl version
Version: 1.6.3
Runtime: go1.18

2.2、创建默认配置文件

[root@etcd ~]# cfssl print-defaults config > ca-config.json
[root@etcd ~]# cfssl print-defaults csr > ca-csr.json

2.3、证书类型

  • 客户端证书用于服务器验证客户端身份
  • 服务器证书用于客户端验证服务器端身份
  • 对等证书由etcd集群成员使用,同时使用客户端认证和服务器端认证

2.4、创建CA证书

[root@etcd ~]# cd /etc/etcd/
[root@etcd etcd]# mkdir -p etcdca
[root@etcd etcd]# cd etcdca/
  • 修改ca-config配置
[root@etcd etcdca]# cat ca-config.json 
{
"signing": {
"default": {
"expiry": "43800h"
},
"profiles": {
"server": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth"
]
},
"client": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"client auth"
]
},
"peer": {
"expiry": "43800h",
"usages": [
"signing",
"key encipherment",
"server auth",
"client auth"
]
}
}
}
}
  • 配置证书请求
[root@etcd etcdca]# cat ca-csr.json 
{
"CN": "Etcd",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "Etcd",
"OU": "CA"
}
]
}
  • 生成CA证书
[root@etcd etcdca]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
[root@etcd etcdca]# ls
ca-config.json  ca.csr  ca-csr.json  ca-key.pem  ca.pem
### 生成的文件中有下面三个后面会用到:
ca-key.pem: CA证书密钥
ca.pem: CA证书
ca-config.json: 证书签发配置, 用CA证书来签发其他证书时需要用csr文件字段解释
CN: Common Name, apiserver从证书中提取该字段作为请求的用户名
Organization, apiserver从证书中提取该字段作为请求用户所属的组(Group)
  • 由于这里是CA证书, 是签发其他证书的根证书, 这个证书密钥不会分发出去作为client证书, 所有组件使用的client证书都是由CA证书签发而来, 所以CA证书的CN和O的名称才是有用的。

2.5、生成服务器端证书

  • 注意hosts字段需要加上etcd全部节点的IP/主机名信息以及127.0.0.1
[root@etcd etcdca]# cat server-csr.json 
{
"CN": "server",
"hosts": [
"127.0.0.1",
"192.168.93.101"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "CN",
"L": "Shanghai",
"ST": "Shanghai"
}
]
}
# 创建服务器端证书和私钥
[root@etcd etcdca]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=server server-csr.json | cfssljson -bare server
# 生成以下文件
[root@etcd etcdca]# ls server*
server.csr  server-csr.json  server-key.pem  server.pem

2.6、生成客户端证书

[root@etcd etcdca]# cat client-csr.json 
{
"CN": "client",
"hosts": [
""
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "CN",
"L": "Shanghai",
"ST": "Shanghai"
}
]
}
# 创建客户端证书和私钥
[root@etcd etcdca]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client client-csr.json | cfssljson -bare client
# 生成以下文件
[root@etcd etcdca]# ls client*
client.csr  client-csr.json  client-key.pem  client.pem

2.7、生成对等证书

  • peer证书可以统一,也可以分别生成,如果需要统一,则需要在hosts字段加上所有节点的IP/主机名信息,如果分开生成,则hosts字段只需要填写对应节点的IP/主机名信息即可
[root@etcd etcdca]# cat peer-csr.json 
{
"CN": "peer",
"hosts": [
"192.168.93.101"
],
"key": {
"algo": "ecdsa",
"size": 256
},
"names": [
{
"C": "CN",
"L": "Shanghai",
"ST": "Shanghai"
}
]
}
# 创建对等证书和私钥
[root@etcd etcdca]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=peer peer-csr.json | cfssljson -bare peer
# 生成以下文件
[root@etcd etcdca]# ls peer*
peer.csr  peer-csr.json  peer-key.pem  peer.pem

2.8、更新系统证书库

[root@etcd etcdca]# yum install ca-certificates -y
[root@etcd etcdca]# update-ca-trust

2.9、修改etcd配置并重启etcd

  • 主要是将原本的http链接全部改为https,并指定证书密钥地址
[root@etcd etcdca]# cat /etc/etcd/etcd.conf 
# 节点名称
name: 'etcd-1'
# 指定节点的数据存储目录
data-dir: '/etc/etcd/data'
# 对外提供服务的地址(客户端连接地址)—— 改为 https
listen-client-urls: 'https://192.168.93.101:2379,https://127.0.0.1:2379'
# 广播给客户端的地址(其他组件如 kube-apiserver 会用这个地址连你)
advertise-client-urls: 'https://192.168.93.101:2379'
# Peer 通信地址(集群内部通信,单节点也需配置)—— 改为 https
listen-peer-urls: 'https://192.168.93.101:2380'
initial-advertise-peer-urls: 'https://192.168.93.101:2380'
# 集群初始化配置(单节点)
initial-cluster: 'etcd-1=https://192.168.93.101:2380'
initial-cluster-token: 'etcd-cluster-1'
initial-cluster-state: 'new'
# 客户端加密
client-transport-security:
cert-file: "/etc/etcd/etcdca/server.pem"
key-file: "/etc/etcd/etcdca/server-key.pem"
client-cert-auth: True
trusted-ca-file: "/etc/etcd/etcdca/ca.pem"
# 节点加密
peer-transport-security:
cert-file: "/etc/etcd/etcdca/peer.pem"
key-file: "/etc/etcd/etcdca/peer-key.pem"
client-cert-auth: True
trusted-ca-file: "/etc/etcd/etcdca/ca.pem"
[root@etcd etcdca]# systemctl restart etcd

2.10、访问验证

[root@etcd etcdca]# etcdctl --endpoints=https://192.168.93.101:2379 --cacert=ca.pem --cert=client.pem --key=client-key.pem endpoint status --cluster -w table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.93.101:2379 | 8e9e05c52164694d |  3.4.23 |   20 kB |      true |      false |         3 |          6 |                  6 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
http://www.jsqmd.com/news/60571/

相关文章:

  • 掌握比特币:开放区块链编程全解析
  • GEO优化源头厂家口碑排行,GEO优化AI搜索/广告全案策划、制作、发布/短视频矩阵/GEO优化AI工具排名GEO优化品牌口碑推荐榜
  • 网站发布时间修改怎么修改(如何在网站后台修改文章发布时间)
  • pbootcms站点信息调用(PbootCMS站点信息调用标签详解与使用指南)
  • MATLAB归一化随机共振代码
  • 2025年11月绩效管理咨询公司专业评价:行业标杆机构实力排行
  • 全球雇佣好帮手!国际 EOR 服务商推荐Safeguard Global,企业跨境雇佣不踩坑
  • pbootcms模板tag标签调用(PbootCMS Tag标签调用全攻略:从基础到进阶)
  • pbootcms上传缩略图截取尺寸缩小变模糊解决方案(PbootCMS缩略图模糊问题解决方案)
  • 2025年减震隔音板,隔音板批发,隔音板安装厂家最新推荐:企业减震工艺与售后安装保障解读
  • Nuxt.js v4中使用quill富文本组件
  • 2025年牛油火锅底料配方批发厂家权威推荐榜单:火锅底料生产厂家‌/火锅底料工厂‌/火锅底料厂家‌精选
  • pbootcms模板导航调用方法(PbootCMS模板导航调用方法指南)
  • 仓储接口无法解析出仓储实现实例时需要手动加载仓储实现的程序集
  • 2025年上海代办注册公司排行榜:注册公司代办要花多少钱?
  • 2025年温州五大高复实力学校排行榜,资质齐全的高复专业学校
  • 读书笔记 XILINX ug1137-Zynq UltraScale+ MPSoC Software Developer Guide 软件开发者指南 Chapter3Chapter4
  • webpack配置不当导致接口信息泄露-实战复盘
  • 海外 EOR 名义雇主服务商推荐:海外雇佣公司精选
  • Raft如何维持日志一致性
  • 2025 年防爆灯源头厂家最新推荐榜,技术实力与市场口碑深度解析,挖掘优质货源平台防爆灯,工厂防爆灯,厂用防爆灯,粉尘防爆灯公司推荐
  • 2025年热门的花园铝艺凉亭/小院铝艺凉亭实力厂家TOP推荐榜
  • 深入解析:TDengine 字符串函数 CHAR_LENGTH 用户手册
  • 2025 年高端羽绒供应商指南:鸿基羽绒领衔,从源头守护品质
  • 完整教程:零基础入门C语言之文件操作
  • 2025年重庆建筑资质代办公司排名TOP5:重庆海湖集团实力
  • 上海打印机租赁/二手打印机怎么买靠谱/打印机维修/打印机上门维修推荐——上海博莱办公-服务覆盖上海十六个区
  • 【Codeforces】【Div2】1067 (cf 2158)
  • 2025年隔热耐火砖定制厂家权威推荐榜单:硅莫复合隔热砖‌/回转窑用耐火砖‌/弧形耐火砖‌源头厂家精选
  • AI大模型应用-本地部署 - 努力-