配置 Consul 集群并启用 ACL

配置 Consul 集群并启用 ACL

大家好,感谢阅读。

我对 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,发现它们和你一样令人困惑。

相关内容