前言
etcd与 ZooKeeper 一样,作为分布式场景下的数据共享工具,被广泛使用。在涉及'数据'或'共享'的场景中,必须优先考虑数据安全问题。因此,如何保障数据的访问和共享安全,在 etcd的发展过程中逐步得到了提升和完善。
etcd 作为分布式数据共享工具,其安全性至关重要。基于 RBAC 模型介绍 etcd 的身份认证机制,包括启动参数配置、用户角色创建及权限授权。通过 Docker 环境演示了如何使用 etcdctl 命令开启认证、验证状态及操作数据,确保容器云场景下集群数据的访问安全。

etcd与 ZooKeeper 一样,作为分布式场景下的数据共享工具,被广泛使用。在涉及'数据'或'共享'的场景中,必须优先考虑数据安全问题。因此,如何保障数据的访问和共享安全,在 etcd的发展过程中逐步得到了提升和完善。
关于容器云场景下 etcd集群的安全机制,本文将介绍其安全机制并提供相关实践。
etcd的安全机制是建立在 RBAC(基于角色的访问控制)模型的基础上。在 RBAC 中,用户(Who)、角色(How)、资源(What)通过不同的关联实现不同类型的权限控制。
本文采用 etcd最新版本(V3)对身份认证相关功能进行说明,并通过 Docker 完成。如果你需要确认自己的 etcd版本,可以通过浏览器输入 http://[你的 etcd ip]:2379/version 查看。
使用 Docker 部署时,有必要了解 etcd常用的启动参数:
| 参数名称 | 参数说明 |
|---|---|
| TZ | 即 timezone,代表时区,国内选 Asia/Shanghai |
| ETCD_NAME | etcd 节点名称 |
| ETCD_DATA_DIR | etcd 容器的数据存储目录 |
| ETCD_ADVERTISE_CLIENT_URLS | 描述当前 etcd 节点的地址 |
| ETCD_INITIAL_ADVERTISE_PEER_URLS | 描述当前 etcd 节点的通信地址 |
| ETCD_LISTEN_PEER_URLS | 描述当前节点与其他节点通信的监听地址 |
| ETCD_INITIAL_CLUSTER_TOKEN | 初始化集群 token(集群的唯一性) |
| ETCD_INITIAL_CLUSTER | 初始化集群,定义有哪些成员 |
| ETCD_INITIAL_CLUSTER_STATE | 初始化集群状态,首次为 new(新建),否则为 existing(已存在) |
| ALLOW_NONE_AUTHENTICATION | 允许免密登录,设置为 yes |
启动完成后,可以借助 etcdctl实现用户、角色、资源的创建和授权等操作:
# 查看 etcd 用户列表
etcdctl user list
# 添加一个用户
etcdctl user add [USER_NAME]
# 查看 etcd 角色列表
etcdctl role list
# 添加一个角色
etcdctl role add [ROLE_NAME]
# 为角色赋予读写权限
etcdctl role grant-permission [ROLE_NAME] --prefix=true readwrite [DATA_DIR]
# 查看用户的角色
etcdctl user get [USER_NAME]
# 为用户添加角色
etcdctl user grant-role [USER_NAME] [ROLE_NAME]
开启认证可通过以下命令完成:
# 查看是否已开启身份认证
etcdctl auth status
# 开启认证,并指定用户和密码
etcdctl auth enable --user="" --password=""
本次以一个单节点为例,进行相关演示。
输入 docker exec -it etcd-node1 /bin/bash,可进入容器内部。
输入 etcdctl auth status,若状态为 false,代表未开启。
输入 etcdctl user list,若返回空白,代表此时未创建任何用户。
创建一个用户(如 root)并设置密码:
etcdctl user add root
# 按提示输入密码
输入 etcdctl --user=root --password=xxx --endpoints etcd 或集群 auth enable,成功开启认证。
带用户执行验证命令,若状态为 true,代表已开启。
开启身份认证后,检验是否生效。直接输入 etcdctl put [KEY] [VALUE] 会因未指定操作用户而失败。需指定用户后再操作:
etcdctl --user=root --password=xxx put key value
查看添加结果,确认写入成功。
容器云场景下,etcd的安全机制建立在用户身份认证的基础上。各位可通过本文进行相关设置,保障数据的安全访问。当然 etcd也支持使用证书保障数据的安全传输(集群内部、客户端)。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online