2

我正在尝试部署一个领事集群。我有以下机器:

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 config 部署到 web 服务器?

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

4

2 回答 2

3

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

于 2015-06-25T23:13:28.130 回答
1

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

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

{ 'encrypt': 'consul keygen 生成的一些密钥' }

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

设置领事服务器

在 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 文件,不能缺少也不能为空

码头工人撰写示例

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 示例客户端。现在你可以很容易地添加新的领事节点,同时进行八卦加密。

当然,您可以在配置容器的引导程序中为每个客户端 int /data/consul/custom_client.json 添加任意配置,并在所有客户端之间共享这些配置。consul-config 目录中的所有 .json 文件都已合并,这样您就可以轻松构建“添加”

于 2016-07-04T19:15:58.063 回答