Consul 的 Key-Value 存储有哪些具体用例?

What are some concrete use-cases for Consul's Key-Value store?

我们正在考虑使用 Consul 的键值存储来增强我们的配置管理工具(目前是 Ansible)。我们希望用它来解决两个相关的问题:

  1. 防止分散:一些项目(即:密码、证书等)分散在我们的配置文件中。更新它们需要手动搜索和替换,这可能很烦人。
  2. 易于更新:我们可以使用 Consul 来存储那些经常更改的项目,而不是将编辑和提交配置更改为 git。

我们正在寻找一组关于如何 use/integrate Consul(或类似工具)进行动态配置的建议。自然,没有一个答案,但这里有一组有用的实践。我将在我的回答中提供一些方法,但我想听听更多的想法。

  1. 我们还没有这样做,但正在考虑将 consul 集成到我们的 Ansible 游戏中。 Ansible 最近添加了一个来自 consul 的查找选项:

https://github.com/ansible/ansible/blob/devel/test/integration/roles/test_consul_kv/tasks/main.yml#L70

- debug: msg='key contains {{item}}'
  with_consul_kv:
  - 'key/to/retrieve'

所以我们可以直接用 Consul 的值填充我们的游戏。

  1. 我们正在考虑的另一种方法是利用 consul 的 templating tool - 并在 ansible 将它们植入我们的主机后模板化整个配置文件。

为了缓解#1,我建议查看 Hashicorps Vault,https://www.vaultproject.io/,这是一个处理秘密的工具,可以使用 Consul 作为后端。

我们一直在将 Consul 作为键值存储进行修补,但我认为最有趣的用途是 Consul Template 并使用它来动态更新配置。

我认为我们可能正在走向的最终状态是使用 Ansible 配置我们知道变化缓慢的事物的基础图像加上配置 Consul 模板,然后是 AMI 这个(前 2 个步骤可能已经完成通过 Packer) and then deploy into auto scaling groups in AWS using Terraform(我们已将其用于配置)。

然后我们将使用 Consul 的键值存储来更改 Consul 模板随后将在实例集群中传播的属性。我们还打算让实例在 Consul 中注册自己,这也会影响其他实例的配置,例如 Apache/NGINX 配置上的负载平衡成员或用于集群的单播可寻址成员列表。

稍微相关一点,因为 by mahnve, Vault 是 Consul 存储秘密的一个很好的补充。我们已经将它用于非常静态的秘密,但打算开始使用一些动态秘密生成,它允许您请求短期 API 或可以跟踪和撤销的 SSH 密钥。