微服务实战系列之玩转Docker(十八)

导览

前言

etcd与zooKeeper一样,作为分布式场景下的数据共享工具,变得"人见人爱"。当然它俩之间的异同,博主在这里暂且不表。那么该谈点啥呢?博主认为但凡提到"数据"一词,甚至"共享",必须优先考虑数据安全问题。

殊不知,"当你为自己开启了方便之门,与此同时,也会为他人带来捷径。一正一反,皆是因果"。因此,如何保障数据的访问和共享安全,在etcd的发展过程中,逐步得到了提升和完善。

话不多说,关于容器云场景下etcd集群的第三篇,博主开始大话它的安全机制,并提供相关实践。愿为你的数据之身披上一件无法突破的如意"金盾"

Q:如何保障容器云环境下etcd集群的数据安全

一、安全机制

etcd的安全机制是建立在RBAC模型的基础上。如果你还不懂RBAC,可查阅相关资料,这里不再赘述。简单一句话,RBAC是基于角色的访问控制(Role-Based Access Control )。在 RBAC 中,用户 (Who)、角色 (How)、资源(What)通过不同的关联实现不同类型的权限控制。可以通过下图加深理解:

有了这个思想认知后,咱们一块来看,ectd是如何做到这些的。

身份认证必学必看

本文博主采用etcd最新版本(V3)对身份认证相关功能进行说明,并通过docker完成。如果你需要确认自己的etcd版本,可以通过下面的方法完成。

即打开浏览器输入http://[你的etcd ip]:2379/version,回车可得到如下结果:

1. 启动参数

既然使用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

2. 授权命令

启动完成后,我们可以借助etcdctl实现用户、角色、资源的创建和授权等操作。

powershell 复制代码
# 查看etcd用户列表
etcdctl user list
# 添加一个用户
etcdctl user add [USER_NAME]
# 查看etcd角色列表
etcdctl role  list
# 添加一个角色
etcdctl role add [ROLE_NAME]
# 为角色[ROLE_NAME]赋予[DATA_DIR]的读写权限
etcdctl  role grant-permission [ROLE_NAME] --prefix=true readwrite [DATA_DIR]
# 查看用户[USER_NAME]的角色
etcdctl user get [USER_NAME]
# 为用户[USER_NAME]添加角色[ROLE_NAME]
etcdctl user grant-role [USER_NAME] [ROLE_NAME]

3. 开启认证

开启认证比较简单了,可通过以下命令完成:

powershell 复制代码
# 查看是否已开启身份认证
etcdctl auth status
# 开启认证,并指定用户和密码
etcdctl auth enable --user="" --password=""

二、应用实践

通过第一节的介绍,我们可以顺利完成实操。本次博主以一个单节点为例,进行相关演示,请紧随博主的步伐,不可三心二意哦~

1. 访问容器

输入docker exec -it etcd-node1 /bin/bash,可观察执行结果:

如上图,已成功进入容器内部。

2. 查看认证是否开启

输入etcdctl auth status,可观察执行结果:

如上图状态为false,代表未开启。

3. 查看是否已创建用户

输入etcdctl user list,可观察是否已创建用户(用户是认证的前提):

如上图,一片空白,代表此时未创建任何用户。

4. 创建用户

无用户,那么就创建一个呗,比如root,可观察结果:

如上图,创建root并设置一个密码。

5. 开启认证

输入etcdctl --user --password --endpoints etcd或集群 auth enable,可观察结果:

如上图,成功开启了认证。

6. 验证是否开启

我们可以通过以下命令进行验证(带用户 ),可观察结果:

如上图状态为true,代表已开启。

7. 验证数据

开启身份认证后,我们可检验一下它是否生效,输入etcdctl put [KEY] [VALUE],可观察结果:

如上图,添加失败,因为未指定操作用户。所以接下来应该怎么办?指定用户呗。

查看添加结果:

完美!

结语

容器云场景下,etcd的安全机制建立在用户身份认证的基础上。各位盆友可通过本文进行相关设置,保障数据的安全访问。当然etcd也支持使用证书保障数据的安全传输(集群内部、客户端),未来博主有时间再补充说明。

走过的、路过的盆友们,点点赞,收收藏,并加以指导,以备不时之需哈~

系列回顾


微服务实战系列之玩转Docker(十七)
微服务实战系列之玩转Docker(十六)
微服务实战系列之玩转Docker(十五)
微服务实战系列之玩转Docker(十四)
微服务实战系列之玩转Docker(十三)
微服务实战系列之玩转Docker(十二)
微服务实战系列之玩转Docker(十一)
微服务实战系列之玩转Docker(十)
微服务实战系列之玩转Docker(九)
微服务实战系列之玩转Docker(八)
微服务实战系列之玩转Docker(七)
微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生

相关推荐
风落无尘1 小时前
Stable Diffusion WebUI & ComfyUI 完整安装教程:官方部署+一键整合包+Docker容器化(2026最新)
docker·容器·stable diffusion
元拓数智4 小时前
智能分析落地卡壳?先补好「数据关系+语义治理」这层技术基建
大数据·分布式·ai·spark·数据关系·语义治理
CodeMartain6 小时前
Dify Windows 原生部署(无 Docker、纯本地)
运维·docker·容器
春天花会开1317 小时前
Kubernetes 高可用架构实战指南
架构
llrraa20108 小时前
配置docker国内镜像源
运维·docker·容器
阿里云云原生8 小时前
阿里云 STAROps 全域智能运维平台发布!从“被动救火”到“主动自治”
云原生
码云之上8 小时前
万星入坞·其三:SDK 轻量组件如何优雅地"点亮"
性能优化·架构·前端框架
枫叶林FYL8 小时前
【强化学习】3 双系统持续强化学习:快速迁移与元知识整合架构手册
人工智能·机器学习·架构
AI科技星8 小时前
哥德巴赫猜想1+1基于平行素数对等腰梯形网格拓扑与素数渐近密度的大偶数满填充完备性证明
人工智能·线性代数·架构·概率论·学习方法
GIS数据转换器8 小时前
农村生活污水治理智慧管控平台
大数据·人工智能·分布式·数据分析·生活·智慧城市