我们正在考虑使用Consul的键值存储来增强我们的配置管理工具(目前为Ansible)。我们希望用它来解决两个相关的问题:
- 防止分散:一些项目(即:密码、证书等)分散在我们的配置文件中。更新它们需要手动搜索和更换,这可能会令人厌烦
- 易于更新:我们可以使用Consul来存储那些经常更改的项,而不是编辑配置更改并将其提交到git中
我们正在寻找一组关于如何使用/集成Consul(或类似工具)进行动态配置的建议。当然,没有一个答案,但这里有一套有用的实践。我将在回答中提供一些方法,但我希望听到更多的想法。
我们已经将Consul作为键值存储进行了一段时间的修改,但我认为最有趣的用法是Consul Template,并使用它来动态更新配置。
我认为我们可能正在走向的最终状态是使用Ansible来配置我们知道变化缓慢的东西的基本映像,再配置Consul模板,然后AMI这个(前两个步骤可能是通过Packer完成的),然后使用Terraform部署到AWS中的自动扩展组中(我们已经使用Terraform进行配置)。
然后,我们将使用Consul的键值存储来更改Consul模板将在实例集群中传播的属性。我们还打算让实例在Consul中注册,这也会影响其他实例的配置,例如Apache/NGINX配置上的负载平衡成员或用于集群的单播可寻址成员列表。
与此略有关联的是,正如mahnve所提到的,Vault是Consul存储机密的一个非常好的附加组件。我们已经将其用于相当静态的秘密,但打算开始使用一些动态秘密生成,它允许您请求可以跟踪和撤销的短期API或SSH密钥。
为了缓解#1,我建议查看Hashicorps Vault,https://www.vaultproject.io/,这是一个处理机密的工具,可以使用Consul作为后端。
- 我们还没有做到这一点,但正在考虑将执政官整合到我们的Ansible戏剧中。Ansible最近添加了领事的查找选项:
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的价值观来填充我们的剧本。
- 我们正在考虑的另一种方法是利用consul的模板化工具,并在ansible将整个配置文件植入我们的主机后对其进行模板化