前言

百度能找到一大堆用 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 节点执行过后就可以发现集群在正常的运行了!


散花~

最后修改:2022 年 04 月 13 日
如果觉得我的文章对你有用,请随意赞赏