0

介绍

我正在运行多个,我称它们为 consul-stacks。它们总是看起来像: - 1 个领事服务器 - 9 个领事节点

每个节点都提供一些服务——只是一个经典的网络堆栈等等(这个问题不感兴趣)。Gossip 用于保护服务器被任意节点查询并泄露数据。几个 consul-template / tiller “观察者”正在等待动态配置节点/服务的 KV 变化

目标

假设我有 10 个这些堆栈(数字是动态的),我想构建一个 Web 应用程序,使用特定逻辑控制每个堆栈的 consul-KV

我现在拥有的

我创建了一个 thor+diplomat 工具来包装创建特定 KV 条目所需的逻辑。我在堆栈中的“控制器”容器上运行它时实现了它,与 localhost:8500 交谈 - 然后使用 gossip 进行身份验证并写入服务器。

问题

我现在将使用什么概念将此工具移动到远程(不是 consul-stack 的一部分)服务器,同时能够写入每个 consul-stacks KV。

当然,我可以使用外交官连接到 stack1.tld:8500 - 但这意味着我打开 HTTP 端口并需要以某种方式保护它(不受八卦保护?不知何故,只有 RPC?)并且还要保护 /ui。

  • 有没有更好的方法连接到每个堆栈?
  • 在 8500 之前使用具有基本身份验证的 nginx 代理服务器来保护访问?
  • 也在这个端口上使用 ssl-interception 并且仍然使用 8500 或者更确切地说使用配置的 https 端口(在 consul HTTPS API 中)
  • 使用 ACL 保护访问?(很多设置允许堆栈成员访问 - 需要 TLS 吗?)

一般来说,如果不使用 TLS(客户端需要做很多工作来设置),哪些概念适合这个需要与堆栈服务器通信以安全地写入其 KV。

如果我错过了什么,很高兴添加您要求的任何内容

4

1 回答 1

0

这个问题的答案是

  1. 在领事服务器上启用 ACL

{ "acl_datacenter": "stable", "acl_default_policy": "deny", "acl_down_policy": "deny" }

  1. 使用 write/write/write 创建通用 acl 令牌

consul-cli acl create --management=false --name="general_node" --rule "key::write" --rule "event::write" --rule "service::write" --token=<master-token> 确保在此处使用您的主令牌,在服务器启动期间创建

  1. 还可以选择配置 gossip 以让您的客户端进行加密通信(否则 ACL 没有意义)

  2. 将通用令牌添加到您远程使用的领事客户端,以便能够与远程领事交谈 - 因为该领事将不再公开做任何事情(没有令牌)

于 2016-12-24T23:50:29.387 回答