我正在尝试在多区域和多数据中心集群中设置Nomad ACL, 在服务器节中,我在所有服务器节点上添加了以下内容
server {
enabled = true
bootstrap_expect = 2
encrypt = "XXX-same-on-all-servers-XXX"
authoritative_region = "HOME-DC"
server_join {
retry_join = ["server1", "server2", "server3"]
}
}
acl {
enabled = true
}
在我重新启动所有服务器并跟踪日志后,这就是我得到的
2021-02-01T11:38:04.156Z [WARN] nomad.rpc: no path found to region: region=HOME-DC
2021-02-01T11:38:04.157Z [ERROR] nomad: failed to fetch namespaces from authoritative region: error="No path to region"
这是我跑步时得到的
nomad acl bootstrap -address=$NOMAD_ADDR
Error bootstrapping: Unexpected response code: 500 (No path to region)
在文档上,我看到它要求您设置 acl 节的replication_token 值,但我不清楚如何执行此操作,是否必须像加密令牌一样以某种方式生成?如果是的话怎么办? 参考
权威区域:
authoritative_region
不是必需的,应删除。删除后运行nomad acl bootstrap
即可成功。
非权威地区:
authoritative_region
始终是必需的。replication_token
也是必需的,replication_token
可以是您权威机构的引导令牌,或者创建另一个令牌以获得更少的功能。有关如何进行正确的 nomad 配置和多区域联邦 nomad 的 acl 的更多详细信息。
假设我们有两个不同的游牧集群(或基本相同的区域)。 “ovh”区域中的游牧集群和“us”区域中的游牧集群。
我们联合他们:
$ nomad server join 10.113.151.192:4648 10.113.151.174:4648 10.113.151.231:4648 10.113.151.224:4648 10.113.151.233:4648 10.113.151.90:4648
Joined 6 servers successfully
现在我们需要选择主要区域。让它成为“ovh”区域。然后我们转到“ovh”区域中的游牧服务器并创建所谓的复制令牌,如下所示:
$ nomad acl token create -type="management" -global=true \
-name="Cluster A Replication Token" \
-token="b1e55cc6-8289-6b6e-c779-9f0b0a30e96b"
Accessor ID = d74642e7-2b8b-25c1-d4e9-169e18548788
Secret ID = 6ca5eae5-adb9-1687-f2f3-214ab5c4f8c5
其中“-token”是“ovh 区域的引导令牌”
现在我们进入“我们”区域游牧服务器并进行一些更改,如下所示:
# cat /etc/nomad.d/main.json
{
"acl": {
...
"replication_token": "6ca5eae5-adb9-1687-f2f3-214ab5c4f8c5"
},
...
...
"server": {
...
"authoritative_region": "ovh",
...
},
...
所以基本上我们需要在配置中添加“authoritative_region”和“replication_token”选项。
在所有“美国”区域服务器上重新启动 nomad 服务。 (我们只需要更改“我们”区域的配置)。
结果:进入 Web ui,通过 ovh“bootstrap token”进行身份验证。并且您可以在“ovh”和“us”两个区域中成功导航。