我正在尝试部署一个consul集群。我有以下机器:
consul-server01
consul-server02
consul-server03
web01
database01
我有3个单独的配置文件。每个服务器分别一个。
/etc/consul.d/server/config.json
/etc/consul.d/web/config.json
/etc/consul.d/database/config.json
如果我添加新服务器(比如web02),我该如何让它自动采用Web服务器配置?
consul是否支持配置发现,或者我是否需要使用chef / puppet / ansible / salt将Web配置部署到Web服务器?
答案 0 :(得分:3)
您可以将配置加载到初始Consul实例或群集键/值存储中,然后使用consul-template配置其他节点。
答案 1 :(得分:1)
创建一个小ruby /任何脚本“generate_key.rb”,它会在/data/consul/encrypt.json 中生成一个密钥,如果它还不存在。它最终看起来像这样。
{'encrypt':'由keyulgen生成的'somekey'}
要生成密钥,请使用:consul keygen 在容器启动(ENTRYPOINT或CMD)
上启动此脚本执行
FROM consul
VOLUME /data/consul
# create a placeholder for the optional gossip key
RUN mkdir -p /data/consul && \
echo "{}" > /data/consul/encrypt.json && \
mkdir -p /consul/config &&
ln -s /data/consul/encrypt.json /consul/config/encrypt.json
# you server config
COPY consul-config.json /consul/config/server_config.json
CMD ["agent","-server"]
您的conusl-config.json应该与此类似
{
"datacenter": "stable",
"acl_datacenter": "stable",
"data_dir": "/consul/data",
"ui": true,
"dns_config": {
"allow_stale": false
},
"log_level": "INFO",
"node_name": "consul",
"client_addr" : "0.0.0.0",
"server": true,
"bootstrap":
true
}
# For every consul client
Create the same placeholder symlink
RUN mkdir -p /data/consul && \
echo "{}" > /data/consul/encrypt.json && \
mkdir -p /consul/config &&
ln -s /data/consul/encrypt.json /consul/config/encrypt.json
这确保了,如果我们现在挂载数据卷,则加密密钥将被配置生成的密钥替换 - 如果不是,则服务器在没有它的情况下启动。 Consul需要一个合适的json文件,不允许丢失也不能为空
version: "2"
services:
someconsuleclient:
image: mymongodb
container_name: someconsuleclient
depends_on:
- consul
volumes_from:
- dwconfig:ro
consul:
container_name: consul
image: myconsulimage
depends_on:
- config
volumes_from:
- config:ro
config:
image: myconfigimage
container_name: config
volumes:
- config:/data/
volumes:
config:
driver: local
所以我们有一个配置服务来生成encrypt.json,我们有一个consul服务器,我们有一个consul示例客户端。现在,您可以非常轻松地添加新的consul节点,同时进行八卦加密。
当然,您可以为配置容器的引导程序中的每个客户端int /data/consul/custom_client.json添加任意配置,并在所有客户端之间共享这些配置。 consul-config目录中的所有.json文件都已合并,这样您就可以轻松构建“添加”