大家好,感谢阅读。
我对 Consul 还很陌生。我已经阅读了文档并练习了一段时间,因此我能够在几个节点上正确配置 Consul。
现在我想启用 ACL,以便管理 Consul 集群的安全性,但我无法实现这一点。我遵循以下指南: https://learn.hashicorp.com/consul/security-networking/production-acls#create-the-agent-policy。
我的场景:
- 节点 1:'引导'节点。IP:172.20.10.41。
- 节点 2:‘从属’节点。IP:172.20.10.40
我的期望是:
- 让 consul 启动并运行,并使用 ACL 来控制哪些进程/节点可以连接到集群并读取/写入信息。
我可以在一个 Consul Agent 上启用 ACL,并使用以下命令运行它:
consul 代理 -server -bootstrap -config-dir=/etc/consul/conf.d/agent.json -data-dir=/tmp/consul/ -ui -client=0.0.0.0
这是我的 agent.json 文件:
{
"primary_datacenter": "dc1",
"acl" : {
"enabled": true,
"default_policy": "allow",
"down_policy": "extend-cache"
}
}
一旦 Consul 启动并运行,我就会运行
# consul acl 引导程序
这让我
AccessorID: 3c354e3c-2d1c-24b1-41ce-0645fdd6c3e7
SecretID: 1e026ae6-8902-eae2-6a18-6b0fb36bbed4
Description: Bootstrap Token (Global Management)
Local: false
Create Time: 2019-05-03 12:41:18.038389106 -0300 -03
Policies:
00000000-0000-0000-0000-000000000001 - global-management
我创建了一个策略和一个令牌来允许所有节点的事情:
# consul acl policy create -name "Agent-write-policy" -description "生成代理写权限的策略" -rules @agent_write_policy.hcl -token "1e026ae6-8902-eae2-6a18-6b0fb36bbed4"
和
# consul acl token create -description "代理写入令牌" -policy-name "代理写入策略" -token "1e026ae6-8902-eae2-6a18-6b0fb36bbed4"
AccessorID: 7324d2d0-f82f-cea8-44d1-82c2d07cd35a
SecretID: 11dfcacf-7eae-a286-f108-990c1963fb29
Description: Agent write token
Local: false
Create Time: 2019-05-03 12:30:11.292590345 -0300 -03
Policies:
0171cfc2-06f3-6702-9c46-df117eb1bd53 - Agent-write-policy
然后我转到我的第二个服务器节点,并启动 consul
# consul 代理 -server -data-dir=/tmp/consul -config-dir=/etc/consul/conf.d/agent.json
我的 agent.json 文件:
{
"primary_datacenter": "dc1",
"acl" : {
"enabled": true,
"default_policy": "allow",
"down_policy": "extend-cache",
"tokens": {
"default": "11dfcacf-7eae-a286-f108-990c1963fb29"
}
}
}
当我的第二个节点启动时,我运行
#领事加入172.20.10.41
Error joining address '172.20.10.41': Unexpected response code: 403 (ACL not found)
Failed to join any nodes.
我还尝试在加入命令中添加 -token=""。
如果我在节点 2 中禁用 acl,我就可以加入集群,但节点/服务信息不会同步。
2019/05/03 12:35:26 [WARN] agent: Node info update blocked by ACLs
2019/05/03 12:35:51 [WARN] agent: Coordinate update blocked by ACLs
我究竟做错了什么?
也许我做错了很多事情。如果你们有适合初学者的指南,我将不胜感激。
感谢您的时间。(抱歉我的英语不好)
问候。
答案1
似乎在代理配置中必须存在 primary_datacenter 和 agent_recovery 键才能加入启用 acl 的集群,这个配置对我来说是有效的:
primary_datacenter = "infra2-lab"
acl = {
enabled = true
default_policy = "deny"
enable_token_persistence = true
down_policy = "extend-cache"
tokens = {
default = "same-token"
master = "same-token"
agent_recovery = "same-token"
}
}
same-token 是我在引导 ACL 时获得的全局令牌,当我添加 agent_recovery 密钥时,它突然开始工作。尽管如此,我仍然只是在尝试 Consul ACL,发现它们和你一样令人困惑。