Consul - 为不同的主机部署不同的配置

时间:2015-05-23 15:56:47

标签: consul

我正在尝试部署一个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服务器?

资源: https://www.digitalocean.com/community/tutorials/how-to-configure-consul-in-a-production-environment-on-ubuntu-14-04

2 个答案:

答案 0 :(得分:3)

您可以将配置加载到初始Consul实例或群集键/值存储中,然后使用consul-template配置其他节点。

答案 1 :(得分:1)

创建一个从consul派生的数据容器,将命名卷挂载到/ data - 名为myconfig

创建一个小ruby /任何脚本“generate_key.rb”,它会在/data/consul/encrypt.json 中生成一个密钥,如果它还不存在。它最终看起来像这样。

{'encrypt':'由keyulgen生成的'somekey'}

要生成密钥,请使用:consul keygen 在容器启动(ENTRYPOINT或CMD)

上启动此脚本

设置consul-server

Dockerfile中的

执行

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文件,不允许丢失也不能为空

docker-compose example

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文件都已合并,这样您就可以轻松构建“添加”