前言
百度能找到一大堆用 Helm 部署 Consul 高可用集群的文章,为啥我还要再写一篇呢?那些文章真的很省事,ACL权限控制丝毫没有涉及,就任配置中心中的配置在集群内被肆意访问,数据库密码明文在集群内展览,可以说是很感人了。
架设
既然采用了 Helm 部署,那一定有 Chart 源选择的问题,Bitnami 上的 Consul 版本遂高,但是能有官方的舒服?Bitnami 的 Consul Helm Chart 无法直接在 values.yaml 中开启 ACLs 权限控制,集群启动后再配置会出现各种问题(血一样的教训),所以一定要选用官方的 Chart 源。
如果你没有配置需求的话,官方的源可以直接部署,不需要修改 values.yaml。
待容器创建成功后,我们需要进入 Leader
容器内,输入:
consul acl bootstrap
来初始化 acl 权限控制,此时会返回一个 Secret,一定要记好它,这时候进入控制台,创建一个 Acl Token。点击创建后,在 Policy 部分,选择 Create new policy
,并在里面输入:
node_prefix "" {
policy = "write"
}
service_prefix "" {
policy = "read"
}
这将允许节点读写服务信息,并读取所有注册的服务。
创建完 Token 后你会发现 Agent 节点仍在报错:
Coordinate update blocked by ACLs: accessorID=00000000-0000-0000-0000-000000000002
因为这时候 Consul 其它节点还不知道自己应该用什么 Token 去访问 Leader
节点,这时候你需要执行如下 http 请求来高速每一个节点自己需要使用什么 Token 去访问 Leader
节点。
curl \
--request PUT \
--header "X-Consul-Token: ${BootstrapAccessToken}" \
--data \
'{
"Token": "${AgentToken}"
}' ${IP:PORT}/v1/agent/token/acl_agent_token
在每个 Consul 节点执行过后就可以发现集群在正常的运行了!
散花~