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

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

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

文章目录

  • ETCD单节点二进制部署(TLS)
    • 资源列表
    • 基础环境
    • 一、安装部署(单机)
      • 1.1、二进制文件部署
      • 1.2、添加system服务管理
      • 1.3、验证
    • 二、部署TLS加密
      • 2.1、下载安装cfssl
      • 2.2、创建默认配置文件
      • 2.3、证书类型
      • 2.4、创建CA证书
      • 2.5、生成服务器端证书
      • 2.6、生成客户端证书
      • 2.7、生成对等证书
      • 2.8、更新系统证书库
      • 2.9、修改etcd配置并重启etcd
      • 2.10、访问验证

资源列表

操作系统配置主机名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

  • 下载地址:https://github.com/cloudflare/cfssl/releases
[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证书

  • 由于各个组件都需要配置证书,并且依赖CA证书来签发证书,所以我们首先要生成号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: Truetrusted-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: Truetrusted-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.dtcms.com/a/569271.html

相关文章:

  • 小网站 收入请简述网站制作流程
  • 抗辐照MCU芯片在无人叉车领域的性能评估与选型建议
  • 什么是LLM?
  • Java/PHP源码解析:一站式上门维修服务系统的全栈实现
  • MPU6050 DMP 移植中 mpu_run_self_test () 自检失败的原因与解决方法
  • 系统端实现看门狗功能
  • 算法--二分查找(二)
  • 没有网站备案可以做诚信认证嘛商城网站大概多少钱
  • 保定市场产品投放策略分析
  • Linux网络——连接、TCP全连接队列TCPdump抓包
  • Firefox 浏览器:引领网络浏览新时代
  • 【个人成长笔记】解决在Linux/Windows系统中 git pull 之后提示有未提交的更改错误信息(亲测有效)
  • 分布式训练一站式入门:DP,DDP,DeepSpeed Zero Stage1/2/3(数据并行篇)
  • 优化网站的目的佛山标书设计制作
  • Slurm:高性能计算集群的调度利器
  • Qt 开发终极坑点手册图表版本
  • 2019阿里java面试题(一)
  • 云手机与云服务器之间的关系
  • 网站建设的经验东莞大岭山楼盘最新价格表
  • 网站策划书 范文兰州装修公司哪家口碑最好
  • SNN最新文献合集-1104(会议论文)
  • 简单理解:FreeRTOS 中,信号量(Semaphore)函数及其作用
  • 【计算机网络】IO复用方法(三)——poll
  • 企业门户网站建设方案及报价广告网名
  • 【海思】在Ubuntu20.04上搭建可以成功编译Hi3559AV100的环境_20251104
  • Vue中iFrame跨窗口通信实现与源码解析
  • 做设计有哪些接私活的网站做钓鱼网站获利3万
  • git常用的指令-(工作中常用)
  • <数据集>yolo航拍交通目标识别数据集<目标检测>
  • 做标准件网站在ppt里面做网站链接