etcd可视化工具
1. 概述
这是一个序列总结文档。
- 第1节 安装etcd 中,在CentOS7上面安装etcd。
- 第2节 单节点运行etcd 在单节点上面运行etcd。
- 第3节 三节点部署etcd集群 在三节点上面部署etcd集群,并为etcd配置了一些快捷命令。
- 第4节 etcd TLS集群部署 在三节点上面部署etcd集群,并开启TLS协议的加密通讯。
- 第5节 etcd角色权限控制 在三节点上面部署etcd TLS集群的基础上,开启角色控制。详细可参考 https://etcd.io/docs/v3.5/demo/ 。
- 第6节 etcd证书过期处理,在etcd证书过期后,etcd相关命令行都操作不了,讲解如何处理这个问题。
- 第7节 etcd配置文件, 通过etcd配置文件来配置相关参数,然后启动etcd服务。
- 第8节 etcd可视化工具, 介绍一款好用的etcd可视化工具etcd-workbench。
1.1 VirtualBox虚拟机信息记录
学习etcd时,使用以下几个虚拟机:
序号 | 虚拟机 | 主机名 | IP | CPU | 内存 | 说明 |
---|---|---|---|---|---|---|
1 | ansible-master | ansible | 192.168.56.120 | 2核 | 4G | Ansible控制节点 |
2 | ansible-node1 | etcd-node1 | 192.168.56.121 | 2核 | 2G | Ansible工作节点1 |
3 | ansible-node2 | etcd-node2 | 192.168.56.122 | 2核 | 2G | Ansible工作节点2 |
4 | ansible-node3 | etcd-node3 | 192.168.56.123 | 2核 | 2G | Ansible工作节点3 |
后面会编写使用ansible部署etcd集群的剧本。
操作系统说明:
[root@etcd-node1 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
[root@etcd-node1 ~]# hostname -I
192.168.56.121 10.0.3.15
[root@etcd-node1 ~]#
1.2 准备工作
参考第7节 etcd配置文件, 通过etcd配置文件来配置相关参数,然后启动etcd服务。
在三个节点上面使用start_by_config.sh
启动etcd服务。
[root@etcd-node1 ~]# cd /srv/etcd/node
[root@etcd-node1 node]# ls
config logs openssl.conf start_by_config.sh start.sh
data.etcd nohup.out start_auto_ssl.sh start_no_ssl.sh stop.sh
[root@etcd-node1 node]# ./start_by_config.sh
[root@etcd-node1 node]# nohup: appending output to ‘nohup.out’
[root@etcd-node1 node]#
启动后,查看etcd集群状态:
[root@etcd-node1 ~]# ech
+-----------------------------+--------+------------+-------+
| ENDPOINT | HEALTH | TOOK | ERROR |
+-----------------------------+--------+------------+-------+
| https://192.168.56.121:2379 | true | 1.226138ms | |
| https://192.168.56.123:2379 | true | 1.153493ms | |
| https://192.168.56.122:2379 | true | 753.212µs | |
+-----------------------------+--------+------------+-------+
[root@etcd-node1 ~]# ecm
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
| ID | STATUS | NAME | PEER ADDRS | CLIENT ADDRS | IS LEARNER |
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
| a7d7b09bf04ad21b | started | node3 | https://192.168.56.123:2380 | https://192.168.56.123:2379 | false |
| d553b4da699c7263 | started | node2 | https://192.168.56.122:2380 | https://192.168.56.122:2379 | false |
| e14cb1abc9daea5b | started | node1 | https://192.168.56.121:2380 | https://192.168.56.121:2379 | false |
+------------------+---------+-------+-----------------------------+-----------------------------+------------+
[root@etcd-node1 ~]# ecs
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.56.121:2379 | e14cb1abc9daea5b | 3.5.18 | 25 kB | false | false | 23 | 974 | 974 | |
| https://192.168.56.122:2379 | d553b4da699c7263 | 3.5.18 | 25 kB | true | false | 23 | 975 | 975 | |
| https://192.168.56.123:2379 | a7d7b09bf04ad21b | 3.5.18 | 25 kB | false | false | 23 | 976 | 976 | |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
[root@etcd-node1 ~]#
可以看到命令正常执行,说明etcd服务正常!
1.3 下载ca证书等文件
从服务器端下载之前配置的一些ca证书和签名文件等。主要是以下三个文件:
- ca.crt
- node1.crt
- node1.key
[root@etcd-node1 ~]# cd /etc/etcd/ssl
[root@etcd-node1 ssl]# ll
total 20
-rw-r--r-- 1 root root 1090 Apr 6 22:47 ca.crt
-rw-r--r-- 1 root root 977 Apr 12 22:19 client.crt
-rw-r--r-- 1 root root 1675 Apr 6 23:19 client.key
-rw-r--r-- 1 root root 1038 Apr 12 22:19 node1.crt
-rw-r--r-- 1 root root 1675 Apr 6 22:58 node1.key
[root@etcd-node1 ssl]#
可以使用sz
命令将这三个文件下载到电脑本地。
2. etcd工具介绍
在https://etcd.io/docs/v3.5/integrations/罗列了etcd相关的库和工具:
以前用过一款etcd可视化工具etcdkeeper: https://github.com/evildecay/etcdkeeper
界面相对简单,没有角色和用户管理。
最近发现一款不错的etcd可视化工具 Etcd Workbench 详细可参考 etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能
可参考官方中文介绍 https://github.com/tzfun/etcd-workbench/blob/master/README_ZH.md
在这个页面 https://tzfun.github.io/etcd-workbench/ 可以下载etcd workbench的桌面app或者web服务用的jar包:
windows系统直接双击下载下来的etcd-workbench-1.1.6-windows-x86_64.exe
之类的安装包,安装桌面app即可。
2.1 桌面app的使用
双击桌面的快捷图标“Etcd Workbench”,此时会打开Etcd Workbench 桌面app:
此时,因为没有任务etcd服务器连接,需要我们手动配置一下etcd服务器信息。
此时,需要输入etcd服务器相关信息:
Name
,etcd服务器的名称,如etcd_192.168.56.121
,带一个IP信息,便于区分不同的etcd服务。Host
,etcd服务器的主机信息,此处就填写第一个节点的IP、192.168.56.121
。Port
,端口保持默认的2379即可。Namespace
,可理解为查询的键的前缀,可以保持默认为空即可。
此时点下方的“Test Connect”测试连接,可以发现会报异常:
下方有三个勾选框,Auth
、SSL
和SSH
。三个位置作用不一样。
2.1.1 Auth用户认证
勾选Auth
框,就可以设置认证的用户和密码信息。
此处账号和密码信息,可以参考之前第5节 etcd角色权限控制 在三节点上面部署etcd TLS集群的基础上,开启角色控制。其中使用了以下命令创建了相关的用户:
[root@etcd-node1 ~]# etcdctl user add root --interactive=false --new-user-password="securePassword"
User root created
# 创建用户,直接在命令行指定用户密码
[root@etcd-node1 ~]# rootetcdctl user add appA_user --interactive=false --new-user-password="securePassword"
User appA_user created
# 创建用户,直接在命令行指定用户密码
[root@etcd-node1 ~]# rootetcdctl user add appA_readonly_user --interactive=false --new-user-password="securePassword"
User appA_readonly_user created
如果作为管理员,我们就用root
这个账号信息和密码,注意,你不应让别人知道你etcd的root
账号的密码,此处是测试,使用的密码是securePassword
。
此时,虽然输出了正确的用户名和密码,尝试连接还是报错:
因为我们ETCD服务器开启了SSL认证,必须要设置相关证书才能正常连接。这就是在1.3节中下载相关证书的原因。
2.1.2 SSL认证
勾选SSL
框后,就弹出SSL相关的信息:
此时,需要进行如下操作:
Authority
: 认证中心,填写192.168.56.121
。CA File
:上传CA证书ca.crt
。Identity
: 勾选后面的enable
,即启用身份认证。此时会弹出Cert File
和Cert Key File
需要上传的选项。Cert File
:选择证书node1.crt
。Cert Key File
: 选择私钥文件node1.key
。
此时测试连接可以看到测试连接成功:
注意,此时一定要点击Save To Favorites
收藏该连接,要不然下次打开桌面App后,又要重新输入相关信息,会比较麻烦。
收藏后,左侧就会显示这个收藏的etcd服务器连接:
最后,点击“Connect”就可以连接到etcd服务器了!
2.1.3 app界面说明
进入到app后,就可以看到etcd集群各节点信息:
键值信息:
用户管理:
角色管理:
对比不同版本的键值差异:
可以看到,该工具可以非常方便的来管理etcd服务!!
2.2 浏览器web UI的使用
你可以在这个页面https://tzfun.github.io/etcd-workbench/ 下载web使用的jar,并且需要安装jdk 11。
详细参考 https://github.com/tzfun/etcd-workbench-web 。
我下载的是 etcd-workbench-1.1.4.jar
。将其上传到/srv/etcd_workbench
目录。
在这里https://github.com/tzfun/etcd-workbench-web/blob/master/server/src/main/resources/etcd-workbench.conf 可以下载官方给的配置文件示例etcd-workbench.conf
。
将编辑好的etcd-workbench.conf
也存放在/srv/etcd_workbench
目录下。
[root@etcd-node1 ~]# cd /srv/etcd_workbench
[root@etcd-node1 etcd_workbench]# ls -lh
total 15M
-rw-r--r-- 1 root root 15M May 26 22:12 etcd-workbench-1.1.4.jar
-rw-r--r-- 1 root root 2.6K May 31 21:49 etcd-workbench.conf
-rwxr--r-- 1 root root 176 May 31 22:09 start.sh
-rwxr--r-- 1 root root 102 May 31 21:56 status.sh
-rwxr--r-- 1 root root 103 May 31 22:10 stop.sh
[root@etcd-node1 etcd_workbench]# cat etcd-workbench.conf
[server]
# 注意,此配置文件应与 etcd-workbench-*.jar 之类的jar文件(如etcd-workbench-1.1.4.jar)放置在同一目录下
# Configure the port the service will run on.
# workbench WEB服务监听端口,默认8002,建议修改默认值
port = 8003
# Configure the timeout for executing instructions to ETCD server, in milliseconds.
# 链接超时时间,单位毫秒,默认3000毫秒
etcdExecuteTimeoutMillis = 3000
# Configure data storage directory.
# 数据存储目录,默认为 ./data
dataDir = ./data
# If Authentication is turned on, in order to ensure that user data is not easily cracked,
# configure the data signature key to encrypt and protect it. It must be 16 characters.
# 数据加密使用的密钥,为16字符,默认为 etcdWorkbench@*? 建议修改默认值
configEncryptKey = etcdWorkbench@*?
# When heartbeat detection is enabled, the client connection will be released if no operation
# is performed for more than 35 seconds.
#
# When heartbeat detection is turned off, the client connection will be released if no operation
# is performed for more than 2 hours.
#
# It is recommended to enable it, because it can effectively prevent OOM caused by client disconnection attacks.
# 启用心跳检测后,如果持续时间超过35秒没有操作,客户端连接将被释放
# 当心跳检测关闭时,如果超过2小时没有操作,客户端连接将被释放
# 建议启用它,因为它可以有效地防止客户端断开连接攻击引起的OOM。
# 默认值为false, 建议修改为 true
enableHeartbeat = true
[auth]
# If set to true, user must log in to use etcd workbench, and add the user field to configure the user.
# If set to false, all connection data can be used and shared by anyone!!!
# 启用认证功能,默认值为false表示未启动,true表示启动。
enable = true
# If enabled authentication, add username and password with `user` field.
# Supports repeatedly adding multiple `user` fields.
# 指定用户名和密码
user = username1:password1
user = username2:password2
[log]
# Base log level
# 日志级别
level = INFO
# Customize the log level of the specified path.
levels = io.netty:INFO,io.grpc:INFO
# Configure log storage directory.
# 日志文件存储路径
file = ./logs
# Configure log file name.
# 日志文件的名称
fileName = etcd-workbench
# Configure the log file rolling size. When this size is exceeded, a new file will be created to store the log.
# Unit MB
# 指定日志的滚动大小,单位MB. 默认10MB
fileLimitSize = 10
# Support: `std` and `file`
# 日志打印的位置
printers = std,file
[root@etcd-node1 etcd_workbench]#
提前安装一下openjdk依赖:
yum install java-11-openjdk -y
安装完成后,对应的java路径为/usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java
,查看java版本信息:
[root@etcd-node1 ~]# /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java --version
openjdk 11.0.23 2024-04-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.23.0.9-2.el7_9) (build 11.0.23+9-LTS, mixed mode, sharing)
[root@etcd-node1 ~]#
编写启动脚本start.sh
、状态查看脚本status.sh
和服务停止脚本stop.sh
:
[root@etcd-node1 etcd_workbench]# cat start.sh
#!/bin/bash
base_dir=/srv/etcd_workbench
cd "${base_dir}"
nohup /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar "${base_dir}"/etcd-workbench-1.1.4.jar &
[root@etcd-node1 etcd_workbench]# cat status.sh
#!/bin/bash
ps -ef|grep -v grep|grep --color=always java|grep --color=always 'etcd-workbench-.*.jar'
[root@etcd-node1 etcd_workbench]# cat stop.sh
#!/bin/bash
ps -ef|grep -v grep|grep java|grep 'etcd-workbench-.*.jar'|awk '{print $2}'|xargs kill -9
[root@etcd-node1 etcd_workbench]#
启动服务:
[root@etcd-node1 etcd_workbench]# ./start.sh
[root@etcd-node1 etcd_workbench]# nohup: appending output to ‘nohup.out’
[root@etcd-node1 etcd_workbench]#
[root@etcd-node1 etcd_workbench]# ./status.sh
root 2449 1 12 22:12 pts/0 00:00:00 /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar /srv/etcd_workbench/etcd-workbench-1.1.4.jar
[root@etcd-node1 etcd_workbench]#
查看nohup.out
日志:
[root@etcd-node1 etcd_workbench]# tail nohup.out
| |__' | \ ' / _| |_\/_| |_ _| |_\/_| |_
`.____.' \_/ |_____||_____||_____||_____|
Powered by JVMM https://github.com/tzfun/jvmm
Framework version: 2.4.2
2025-05-31 22:12:46.270+0800 INFO org.beifengtz.etcd.server.EtcdServer Load configuration successfully
2025-05-31 22:12:46.553+0800 INFO org.beifengtz.etcd.server.service.HttpService Please access http://192.168.56.121:8003
2025-05-31 22:12:46.554+0800 INFO org.beifengtz.etcd.server.service.HttpService Http server service started on 8003 in 180 ms
2025-05-31 22:12:46.556+0800 INFO org.beifengtz.etcd.server.EtcdServer Etcd workbench version: 1.1.4
2025-05-31 22:12:46.557+0800 INFO org.beifengtz.etcd.server.EtcdServer Etcd workbench build hash: c18b83c
[root@etcd-node1 etcd_workbench]#
日志中,提示可以通过http://192.168.56.121:8003
来访问work-bench UI服务。
在浏览器中打开该URL地址,可以看到以下效果:
此时,提示需要登陆。此时需要使用etcd-workbench.conf
配置文件中定义的用户名和密码登陆。
# 指定用户名和密码
user = username1:password1
user = username2:password2
如使用用户名username1
和密码password1
登陆:
登陆后,效果图如下:
此时看到的效果,与使用桌面app看到的效果是一样的!!
尝试输入Auth
和SSL
相关信息,具体填写可参考2.1节:
点击Test Connect
可以看到连接成功!注意,此时建议将该连接保存到收藏,即点击Save to Favorites
,然后再点击Connect
连接到ETCD服务器,避免下次登陆需要重新连接!!
此时,连接上ETCD服务器,但可以看到,功能相对本地桌面App相对来说少一些:
此种方式,如果我像新增一个新的用户登陆到WEB UI,如新增账号username3
密码信息:
# 指定用户名和密码
user = username1:password1
user = username2:password2
user = username3:password3
此时使用username3
直接登陆,会提示不正确的用户名和密码:
必须要重启etcd-workbench Web服务才能使用新添加的账号登陆:
[root@etcd-node1 etcd_workbench]# ./stop.sh
[root@etcd-node1 etcd_workbench]# ./status.sh
[root@etcd-node1 etcd_workbench]# ./start.sh
[root@etcd-node1 etcd_workbench]# nohup: appending output to ‘nohup.out’
[root@etcd-node1 etcd_workbench]# ./status.sh
root 2561 1 11 22:43 pts/0 00:00:00 /usr/lib/jvm/java-11-openjdk-11.0.23.0.9-2.el7_9.x86_64/bin/java -jar /srv/etcd_workbench/etcd-workbench-1.1.4.jar
[root@etcd-node1 etcd_workbench]#
此时再使用username3
账号才能正常登陆!
2.3 SSH Tunnel
SSH 隧道(SSH Tunneling),又称为 SSH 端口转发(SSH Port Forwarding),是一种利用SSH协议为其他协议或网络链接加密的方法。通过SSH隧道,用户可以安全地传输未加密的网络流量,通过远程服务器转发到目标目的地,保证了数据传输的私密性和安全性。
SSH隧道主要有三种类型:
- 本地端口转发(Local Port Forwarding): 将本地端口的流量转发到SSH服务器,再由SSH服务器转发到目标服务器。
- 远程端口转发(Remote Port Forwarding): 将SSH服务器端口的流量转发到本地计算机,再由本地计算机转发到目标服务器。
- 动态端口转发(Dynamic Port Forwarding): 创建一个本地 SOCKS 代理服务器,应用程序通过配置使用这个SOCKS代理,而SSH客户端负责把流量通过SSH连接转发出去。
暂时还不知道如何在etcd workbench中使用SSH隧道,后期待补!!
参考: