代码之家  ›  专栏  ›  技术社区  ›  Dan The Man

使consul Docker映像与Vault数据保持一致

  •  4
  • Dan The Man  · 技术社区  · 6 年前

    我正在使用Vault Docker图像和领事Docker图像作为其存储。 我的问题是,如果假定Consul容器将崩溃,我将尝试运行一个新的容器,我需要重新初始化保险库,Consul保存的数据将丢失。

    运行领事映像的命令:

    docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp -it consul
    

    运行Vault映像的命令:

    docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
    

    以及vault配置文件内容:

    {
                "listener": [{
                        "tcp": {
                                "address": "0.0.0.0:8200",
                                "tls_disable" : 1
                        }
                }],
    
                "storage" :{
                        "consul" : {
                  "address" :"172.17.0.4:8500"
                  "path"    :"vault/"
    
                        }
                }
                "max_lease_ttl": "10h",
                "default_lease_ttl": "10h",
                "ui": true,
    }
    
    3 回复  |  直到 6 年前
        1
  •  4
  •   fernandezcuesta    6 年前

    根据 consul's docker description , VOLUME /consul/data 在开发模式下不以任何方式使用,这是consur代理的默认设置。

    用于运行以服务器模式+1个vault服务器(即 not recommended

    • 使用consul的持久卷并将其装载到容器上:

      docker volume create consul --label description='Persistent data for consul'
      
    • 启动领事容器:

      docker run -d \
      -p 8400:8400 -p 8500:8500 -p 8600:53/udp \
      --net host \
      --mount type=volume,source=consul,target=/consul/data \
      --name consul \
      -it consul agent -server -bind=127.0.0.1 -bootstrap-expect=1
      
    • 127.0.0.1 对于本例):

          "storage" :{
                  "consul" : {
            "address" :"127.0.0.1:8500"
      
    • docker run -d \
      -p 8200:8200 \
      -v /root/vault:/vault \
      --cap-add=IPC_LOCK \
      --net host \
      --name vault \
      vault server
      

    $ docker inspect --format '{{ .Mounts }}' consul
    

    Vault已将领事配置为存储:

    $ docker logs vault 2>&1 | grep Storage                                                                    
                 Storage: consul (HA available)
    

    然后像往常一样初始化/解封保险库。

        2
  •  2
  •   David Maze    6 年前

    你需要 cause the Consul container to persist its /consul/data directory . (Hashicorp文档还建议单独备份Consul。)一种典型的方法是更改 docker run 命令

    docker run -v ./consul:/consul/data ... consul
    

    (如果您使用相同的选项启动相同的容器,则可能会将映像设置为在背后尝试此操作,但最好明确说明这一点,以便知道要备份哪些目录。)

        3
  •  2
  •   Dan The Man    6 年前

    为consul创建了持久卷并将其装载到容器上:

    docker volume create consul-volume --label description='Persistent data for consul'
    

    {
        "log_level": "DEBUG",
        "server": true,
        "ui": true,
        "bootstrap": true,
        "client_addr":"0.0.0.0"
    }
    

    运行领事容器:

    docker run -d -p 8400:8400 -p 8500:8500 -p 8600:53/udp --net mynet -v /root/vault/consul:/consul --mount type=volume,source=consul-volume,target=/consul/data --name consul -it consul agent
    

    运行vault容器:

    docker run -d -p 8200:8200 -v /root/vault:/vault --cap-add=IPC_LOCK vault server
    

    consur容器中的数据是持久的。