Consul之ACL加上token-yellowcong

这个是Consul 1.4.2 ,这个主要有5步骤,1. 创建acl.json 在配置文件夹中(-config-dir=/etc/consul),2.启动服务,启动的时候,需要指定启动目录以及数据目录。3.创建初始化密钥,这个密钥是根密钥,其他的token都是基于这个给弄出来的。4.配置agent的acl策略,然后创建token。 5.添加token到consul启动的配置文件中。6.设置匿名用户的策略为只读,解决nginx匿名用户同步访问不到数据,以及web界面,匿名用户读取不到key/val的情况。


需要注意的一点是,新版本的acl 将策略和token 分开了,老版本是 只有token的,新版本分开了,这点请大家注意了。新版本的consul兼容老版本的api接口,可以通过老得方式来创建token。

1 下载地址

链接:https://pan.baidu.com/s/1x7hFaJ-rN13EE7gKU7bHvA  

## 官网地址
https://www.consul.io/downloads.html

2. 安装

# 下载centos7 版本的consul
wget https://releases.hashicorp.com/consul/1.4.2/consul_1.4.2_linux_amd64.zip

#解压 consul
unzip consul_1.4.2_linux_amd64.zip

#拷贝consul命令到目录
cp consul /usr/local/bin/ 

# 创建目录
mkdir /etc/consul
#启动服务
#bootstrap-expect 期望的service数量
#config-dir 配置文件目录
#client 绑定的ip
#node 节点的名称
#—agent是一直运行在Consul集群中每个成员上的守护进程
#-ui:使用自带的ui
#consul agent -dev -ui -node=local   -bootstrap-expect=1  -client=0.0.0.0 -config-dir=/etc/consul

在这里插入图片描述

3. 开启acl

3.1 创建配置acl.json文件

创建acl的json配置文件,这个文件名为acl.json,放在了/etc/consul的目录下。

{
  "acl": {
    "enabled": true,
    "default_policy": "deny",
    "down_policy": "extend-cache"
  }
}

在这里插入图片描述

3.2 启动consul

#启动consul
consul agent -server -ui -node=local   -bootstrap-expect=1  -client=0.0.0.0 -bind=192.168.100.10 -config-dir=/etc/consul -data-dir=/data/consul/

启动后,可以看到global-management 类似的提示,表示开启了acl
在这里插入图片描述

3.3 创建启动token

创建完事这个token后,导致的情况就是,查看信息,需要加入密钥。 这个密钥,相当于是最原始的跟密钥,权限最大的。

#创建启动token
consul acl bootstrap

在这里插入图片描述
当我们执行完上面的命令后,日志就会输出 consul.acl: ACL bootstrap completed这段提示。
在这里插入图片描述

#查看节点,需要输入token了
consul members -token '10a2766d-c8cd-e190-477a-46f5df2b7918'

在这里插入图片描述

3.4 设定策略

3.4.1 创建策略文件agent-policy.hcl

策略文件的编写以及意义具体可参照https://www.consul.io/docs/agent/acl-rules.html

key_prefix "" {
   policy = "write"
}
node_prefix "" {
   policy = "write"
}
service_prefix "" {
   policy = "read"
}
perator = "read"
3.4.2 创建策略
#设定环境变量,这样不用每次都带-token这个参数了
export CONSUL_HTTP_TOKEN=10a2766d-c8cd-e190-477a-46f5df2b7918

#创建策略的时候,我们需要在这个策略文件名上加上一个@ ,我是一脸蒙蔽,为毛要加这个
consul acl policy create  -name "token" -description "Agent Token Policy" -rules @agent-policy.hcl

# 查看策略列表
consul acl policy list


# 根据某个id来删除策略
consul acl policy delete -id "00000000-0000-0000-0000-000000000001"

在这里插入图片描述

3.5 创建token

创建token 后,我们需要做的是获取到token的 secreted这个信息。

#我们创建一个token,需要依赖我们刚刚建立的策略
consul acl token create -description "Agent Token" -policy-name "token"

# 查看token
consul acl token list

创建完token后,有一个secretId,这个相当于是密码了,需要记住。
在这里插入图片描述

查看创建的token列表
在这里插入图片描述

3.6. 添加token到consul服务中

我们需要配置最开始配置的consul 启动文件。配置acl.json ,添加tokens到consul,然后重启consul即可,这样token 就生效了。

{
  "acl": {
    "enabled": true,
    "default_policy": "deny",
    "down_policy": "extend-cache",
    "tokens":{
       "agent":"e46b535d-12da-3920-8860-4cf44571c227"	
    }
  }
}

在这里插入图片描述## 添加数据
创建token后,插入数据,需要添加token,才可以插入数据。

curl -X PUT  -H 'x-consul-token:10a2766d-c8cd-e190-477a-46f5df2b7918' -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/sso-proxy/192.168.1.11:8080


# 查看sso-proxy 的key和val
curl -X GET -H 'x-consul-token:10a2766d-c8cd-e190-477a-46f5df2b7918'  127.0.0.1:8500/v1/kv/upstreams/sso-proxy?recurse

在这里插入图片描述

4 设置Anonymous Token

由于创建token后,导致web界面,匿名用户,没办法查看我们配置的key/val信息了,这个会影响我们nginx服务的同步操作,所以我们需要设置这个匿名token的权限
在这里插入图片描述

配置策略为读取策略, 添加可以读取用户key和val的默认权限。

key_prefix "" {
   policy = "read"
}

在这里插入图片描述
设置完权限后,可以看到token信息了。
在这里插入图片描述

5 curl创建token

5.1 创建策略

“node “” { policy = “write” } service “” { policy = “read” }”

curl -X PUT -d \
'{
  "Name": "my-app-policy",
  "Rules": "{\"key\":{\"\":{\"policy\":\"write\"}},\"operator\":\"read\"}"
}' http://127.0.0.1:8500/v1/acl/policy?token=10a2766d-c8cd-e190-477a-46f5df2b7918

可以看到这样就创建了token 这个了。
在这里插入图片描述
我们从web界面上,可以看到我们创建的策略。
在这里插入图片描述

5.2 创建token

我发现了,老版本的添加token的方式,在新版本的consul中也可以直接使用的, 这个地方我们使用的consul-token ,就是最开始创建的mmg的token。
这个权限中,我们添加了 key 的write权限,这样就可以写key/val了。

curl \
    --request PUT \
    --header "X-Consul-Token:10a2766d-c8cd-e190-477a-46f5df2b7918" \
    --data \
'{
  "Name": "Agent Token2",
  "Type": "client",
  "Rules": "key \"\" { policy = \"write\" } service \"\" { policy = \"read\" }"
}' http://127.0.0.1:8500/v1/acl/create

可以看到访问这个接口后,直接返回的是token信息,带着这个token,我们就可以进行 key/val 的修改了。 token的密钥 411a2294-bd7d-686a-fb75-79d34609a9b4。
在这里插入图片描述
在web界面中,可以看到这个token的信息。我们可以使用这个token进行认证,然后进行 key,val的操作,
在这里插入图片描述
可以看到,使用新的可以,直接创添加了key/val

curl -X PUT  -H 'x-consul-token:411a2294-bd7d-686a-fb75-79d34609a9b4' -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://127.0.0.1:8500/v1/kv/upstreams/sso-proxy/192.168.1.14:8080

在这里插入图片描述

常见问题

1 节点有数据,匿名用户看不到的问题

有些consul 用户会发现,直线没开启acl前可以看到数据,开启后看不到数据了,导致这个问题的原因是匿名用户的权限没有设置导致的。
具体设置方式,查看第 7 节。
在这里插入图片描述

参考文章

https://learn.hashicorp.com/consul/advanced/day-1-operations/acl-guide
https://www.consul.io/docs/agent/acl-rules.html
https://www.imooc.com/article/259231
https://www.jianshu.com/p/05741685af33

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狂飙的yellowcong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值