第五章 etcdctl的高级与用法

1、快照

1.1、恢复集群

生成快照:

etcdctl --endpoints=http://127.0.0.1:12379 snapshot save snapshot.db

创建etcd数据目录:

etcdctl snapshot restore snapshot.db --name m1 --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 --initial-cluster-token etcd-cluster-1 --initial-advertise-peer-urls http://host1:2380

启动etcd:

etcd --name m1 --listen-client-urls http://127.0.0.1:2379 --advertise-client-urls http://127.0.0.1:2379 --listen-peer-urls http://127.0.0.1:2380

查询结果:
第五章 etcdctl的高级与用法_第1张图片

2、访问控制

etcd 访问控制实践:

2.1、用户/角色

查看用户

etcdctl user list

创建用户

etcdctl user add zwx <username>

第五章 etcdctl的高级与用法_第2张图片
创建角色同理

etcdctl user grant-role zwx<username> zwx_role<rolename>
etcdctl user revoke-role zwx<username> hsz<rolename>

第五章 etcdctl的高级与用法_第3张图片
详细获取用户的信息

etcdctl user get zwx<username>

在这里插入图片描述
修改密码

etcdctl user passwd zwx<username>

在这里插入图片描述
删除用户

etcdctl user delete zwx<username>

在这里插入图片描述
注意:老版本可能不是delete [remove],根据文档去查看
在这里插入图片描述

2.2、权限

授予某role对某key某permission<只读>

etcdctl role grant-role zwx_role<rolename> read hsz<key>

在这里插入图片描述
授予以/foo/< key >为前缀的只读权限,等同于范围[/foo/,/foo0):

etcdctl role grant-permission zwx_role<rolename> --prefix=true read /foo/

在这里插入图片描述
授予以/foo0< key >为前缀的只写权限

etcdctl role grant-permission zwx_role<rolename> write /foo0

在这里插入图片描述
授予/foo1到/foo9[start-key,end-key)读写权限

etcdctl role grant-permission zwx_role<role_name> readwrite /foo1 /foo9

在这里插入图片描述
授予以“/foo/”为前缀的 key 的读写权限时,可使用如下命令:

etcdctl role grant zwx_role<rolename> -path '/foo/*' -readwrite

查看一个 Role 所赋予的权限

etcdctl role get zwx_role<rolename>

第五章 etcdctl的高级与用法_第4张图片
收回一个 Role 的某个权限

etcdctl role revoke-permission zwx_role<rolename> /foo0<key>

第五章 etcdctl的高级与用法_第5张图片
如果要完全移除一个Role

etcdctl role delete zwx_role<rolename>

在这里插入图片描述

2.3、root

创建root用户[不再赘述]
可使用 etcdctl 的子命令 auth 启动/禁用权限功能, etcd 管理员可以在认证
开启前后创建用户和角色。
启用权限功能

etcdctl auth enable

反之,禁止权限

etcdctl --user <root:rootpw> auth disable

在这里插入图片描述
如果想要查询特殊的 guest 角色的权限。(任何没有被授予权限的用户都具有 guest 角色)

etcdctl --user <root:rootpw> role get hsz<guestname>

在这里插入图片描述
使用用户名和密码对 etcd 进行授权的访问时,可使用如下命令:

etcdctl --user <root:rootpw> get /foo<key>

在这里插入图片描述

3、使用 TLS 加密 etcd 通信

接下来讲解创建一个使用 TLS 进行通信的 etcd 集群:
下载 cfssl与cfssljson

curl -sL -o ~/bin/cfssl http://pkg.cfssl.org/R1.2/cfssl_linux-amd64
curl -sL -o ~/bin/cfssljson http://pkg.cfssl.org/R1.2/cfssljson_linux-amd64

注意:如果下载太慢,可以直接复制该网址到浏览器直接下载即可。
初始化证书颁发机构(CA)

cfssl print-defaults config > ca-config.json
cfssl print-defaults csr > ca-csr.json

vim ca-config.json:添加peer参数。
vim ca-csr.json:修改文件
第五章 etcdctl的高级与用法_第6张图片
第五章 etcdctl的高级与用法_第7张图片
以下命令执行ca证书:

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

上面的命令执行成功后会生成以下几个文件:
第五章 etcdctl的高级与用法_第8张图片
请务必保证私钥文件ca-key.pem文件的安全,整个过程中都不会使用“*.csr”文件。
为每个 etcd 成员生成对等证书

echo '{"CN":"member1","host":["127.0.0.1"],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client - | cfssljson -bare member1

执行成功会生成三个文件
member1-key.pem
member1.csr
member1.pem

生成客户端证书

echo '{"CN":"client","host":["127.0.0.1"],"key":{"algo":"rsa","size":2048}}' | cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=client - | cfssljson -bare client

复制 TLS 证书和密钥对
将密钥对复制到所有节点的代码具体如下:
更新系统证书库

sudo apt-get install ca-certificates

配置 etcd 使用证书

etcd --name member1 --initial-advertise-peer-urls https://127.0.0.1:2380 \
--listen-peer-urls https://127.0.0.1:2380 \
--listen-client-urls https://127.0.0.1:2379 \
--advertise-client-urls https://127.0.0.1:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster member1=https://127.0.0.1:2380,member2=https://127.0.0.2:2380,member3=https://127.0.0.3:2380 \
--initial-cluster-state new \
--client-cert-auth --trusted-ca-file=./client.pem \
--peer-client-cert-auth --peer-trusted-ca-file=./client.pem \
--peer-cert-file=./member1.pem \
--peer-key-file=./member1-key.pem   
etcd --name member2 --initial-advertise-peer-urls http://127.0.0.2:2380 \
--listen-peer-urls http://127.0.0.2:2380 \
--listen-client-urls http://127.0.0.2:2379 \
--advertise-client-urls http://127.0.0.2:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster member1=http://127.0.0.1:2380,member2=http://127.0.0.2:2380,member3=http://127.0.0.3:2380 \
--initial-cluster-state new \
--client-cert-auth --trusted-ca-file=./ca.pem \
--peer-client-cert-auth --peer-trusted-ca-file=./ca.pem \
--peer-cert-file=./member2.pem \
--peer-key-file=./member2-key.pem
etcd --name member3 --initial-advertise-peer-urls http://127.0.0.3:2380 \
--listen-peer-urls http://127.0.0.3:2380 \
--listen-client-urls http://127.0.0.3:2379 \
--advertise-client-urls http://127.0.0.3:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster member1=http://127.0.0.1:2380,member2=http://127.0.0.2:2380,member3=http://127.0.0.3:2380 \
--initial-cluster-state new \
--client-cert-auth --trusted-ca-file=./ca.pem \
--peer-client-cert-auth --peer-trusted-ca-file=./ca.pem \
--peer-cert-file=./member3.pem \
--peer-key-file=./member3-key.pem

如果出现TLS key/cert (–cert-file, --key-file) must be provided for client url https://127.0.0.1:2379 with HTTPS scheme
第五章 etcdctl的高级与用法_第9张图片
说明tls不支持https,将改成http即可。
如果出现rafthttp: request cluster ID mismatch错误
第五章 etcdctl的高级与用法_第10张图片
表示之前创建的群集没有删除掉,导致数据不匹配,这时将他们删除,节点全部重新启动即可。
第五章 etcdctl的高级与用法_第11张图片

提供解决网址:https://rancher.com/docs/rancher/v2.x/en/troubleshooting/kubernetes-components/etcd/

4、测试
etcdctl --endpoints=http://127.0.0.1:2379 --cacert /etc/ssl/etcd/ca.pem --cert /etc/ssl/etcd/client.pem --key /etc/ssl/etcd/client-key.pem endpoint health

在这里插入图片描述
介绍v3的MVCC多版本并发控制
etcd v3 当前使用BoltDB 将数据存储在磁盘中。

BoltDB 只提供简单的 key/value 存储。适合“读多写少”的场景。
etcd 在 BoltDB 中存储的 key 是 reversion, value 是 etcd 自己的 key-value
组合,也就是说 etcd 会在 BoltDB 中保存每个版本。

第五章 etcdctl的高级与用法_第12张图片
第五章 etcdctl的高级与用法_第13张图片

第四章 Etcd API的使用
第六章 logagent日志的实战 [etcd+kafka+beego+taillog]最近几天比较忙,没空写博客,留下github可以先自行观看:https://github.com/SarletSKY/logagent

你可能感兴趣的:(etcdraft)