问题标签 [consul-template]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
templates - 在领事模板的循环中覆盖变量
我在领事模板中使用以下模板:
产生
在哪里.Name
并且geoserver_dev_hello_org
有一个server_name=geoserver.hello.org
标签。我希望在.Tags
范围循环结束时,$server_name
应该有 value geoserver.hello.org
,但它仍然具有原始值geoserver.dev.hello.org
。
如何使循环覆盖$server_name
(并在找到值时退出循环)?
docker - Docker 容器发现的 Consul:如何在 Consul-Template 中获取最新的容器?
我正在构建一个 Docker 主机,我想在其中对正在运行的容器进行无停机升级。现在,假设我只运行一个容器。
我构建了一个新映像并使用 从中启动一个容器docker run -P ...
,以便为其分配随机主机端口。然后我可以使用Registrator之类的东西来自动更新 Consul 中的服务。现在,Consul 对镜像名称对应的服务有两个注册:旧容器和新容器。
我想使用Consul-Template 更新我的 nginx 反向代理配置以指向新容器的端口(如此处所述)。如何使 Consul-Template 仅获取最新容器的详细信息?
我考虑过的两个解决方案是:
- 使用
CreateIndex
查找此服务的最新注册。但是,不确定如何使 Consul-Template 按 CreateIndex 排序。 - 使用服务标签。问题是我不确定如何从以前的容器/领事服务注册中删除标签。如果可能的话,那么我可以将特定标签分配给新容器并在 Consul-Template 中选择它们。这将扩展到对多个容器进行无停机升级。
更新:我找到了一些关于如何更新/清除标签的文档:1、2、3。这可以在使用标签启动新容器之前在运行的旧容器上完成。
这是解决这个问题的最好方法吗?
bash - 领事模板在模板中使用地址而不是服务地址
我在那个领事模板中遇到问题,似乎在我的模板中替换了服务“ServiceAddress”而不是“地址”,我想知道是否有人能告诉我原因。
从我的 nginx 容器中的 consul-template 也正在运行的 bash 会话中,我可以从 Consul 获取服务定义:
我的领事模板模板文件如下所示:
我希望这会输出Address
,而不是ServiceAddress
服务的。但是,会发生以下情况:
consul - 从领事模板读取保险库机密
如何仅从领事模板中查询密钥的值?从 Vault cli 我会做
它工作正常。然而,在领事模板
返回类似的东西
我可以看到它正在输出lease_duration 等以及值。我如何获得 consul-template 中的值?
consul-template - 如何在领事模板范围构造中使用变量?
我们的应用程序有多个环境,我正在尝试使用通用 consul 模板和环境变量来为不同的环境创建 haproxy 配置。这就是我想要做的:
{{$environment := "yellow" }} .... balance leastconn {{range service "myservice-{{$env}}"}} ....
我似乎找不到在这个范围内使用这个变量的方法。有没有办法让这个工作?
谢谢!
nginx - 如何在 docker swarm 上部署应用程序并将该 IP 地址公开给 A 记录
我已经使用 nginx 成功设置了 docker swarm 集群。在我的 ec2 实例上。使用本教程
https://botleg.com/stories/load-balancing-with-docker-swarm/
我正在这样使用
经理 1
节点 1
节点 2
我正在使用带有注册器的 consol 来进行服务发现。
在 Consul Machine docker run --restart=unless-stopped -d -p 8500:8500 -h consul progrium/consul -server -bootstrap
群管理器 docker run --restart=unless-stopped -d -p 3375:2375 群管理 --replication --advertise=mangerip:3375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
Node1 docker run --restart=unless-stopped -d swarm join --advertise=node1ip:2375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
Node2 docker run --restart=unless-stopped -d swarm join --advertise=node2:2375 consul://consulip:8500/
docker run --restart=unless-stopped -d --name=registrator -h=host --volume=/var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:latest consul://consulip: 8500
我的 Dockerfile
启动.sh
默认.ctmpl
码头工人-compose.yml
这个问题,我需要哪个 IP 地址指向 A 记录,因为 docker swarm 自动拾取节点。
假设我第一次运行它可能会选择第一个节点。如果我删除它并重做所有步骤,它将选择不同的节点和不同的 ip。所以那个时候我需要改变我的A记录。为解决这个问题,
我用谷歌搜索它,我找到了 wagl。这给了我基于 DNS 的服务发现,这很酷。但我想这是非常基本的,我不知道这是否准备好生产。
请任何人告诉我,从A到Z的流程,即从部署到配置IP地址到A记录如何做。或者只是给我一些链接。
docker - 如何告诉我的脚本等待 consul 选举领导者,然后再尝试在启动时向其添加键/值对?
我的开发环境由一个容器中的本地 consul 服务器和另一个容器中的应用程序(运行 consul-template)组成,所有这些都与 docker-compose 链接。我希望一切都无缝地启动并且无需手动干预开发(安全性不是问题),因此我想通过安装特定文件以编程方式在启动时将默认键/值对添加到 consul。
我一直遇到这个问题,每当我尝试使用 API 在启动时将 k/v 对添加到 consul 时,它都会失败并出现错误2016/06/03 21:10:15 [ERR] http: Request PUT /v1/kv/app/secret_key, error: No cluster leader from=[::1]:58888
。如果我事先添加一个 sleep 命令,给 consul 足够的时间来选举领导者,它就可以工作。但是,必须有更好的方法来同步执行此操作,对吧?尤其是当集群中只有一个节点时。
这就是我到目前为止所拥有的。
Dockerfile
entrypoint.sh
consul.json
必须有某种方法可以暂停批量上传,直到我确定 consul 已启动并运行。
ansible - Consul 的键值对存储有哪些具体用例?
我们正在考虑使用 Consul 的键值存储来增强我们的配置管理工具(目前是 Ansible)。我们希望用它来解决两个相关的问题:
- 防止分散:一些项目(即:密码、证书等)分散在我们的配置文件中。更新它们需要手动搜索和替换,这可能很烦人。
- 易于更新:与其将配置更改编辑并提交到 git,我们可以使用 Consul 来存储那些经常更改的项目。
我们正在寻找一组关于如何使用/集成 Consul(或类似工具)进行动态配置的建议。自然,这里没有一个答案,而是一组有用的做法。我将在我的回答中提供一些方法,但我想听听更多的想法。
docker - 在 Docker 容器中创建领事客户端代理时如何传递参数?
我在 Docker 容器中运行 Consul 客户端代理。我创建了一个 docker-compose 文件,如下所示:
请让我知道如何在 docker-compose 中传递以下选项:
consul - 安全地遥控几个领事栈的概念
介绍
我正在运行多个,我称它们为 consul-stacks。它们总是看起来像: - 1 个领事服务器 - 9 个领事节点
每个节点都提供一些服务——只是一个经典的网络堆栈等等(这个问题不感兴趣)。Gossip 用于保护服务器被任意节点查询并泄露数据。几个 consul-template / tiller “观察者”正在等待动态配置节点/服务的 KV 变化
目标
假设我有 10 个这些堆栈(数字是动态的),我想构建一个 Web 应用程序,使用特定逻辑控制每个堆栈的 consul-KV
我现在拥有的
我创建了一个 thor+diplomat 工具来包装创建特定 KV 条目所需的逻辑。我在堆栈中的“控制器”容器上运行它时实现了它,与 localhost:8500 交谈 - 然后使用 gossip 进行身份验证并写入服务器。
问题
我现在将使用什么概念将此工具移动到远程(不是 consul-stack 的一部分)服务器,同时能够写入每个 consul-stacks KV。
当然,我可以使用外交官连接到 stack1.tld:8500 - 但这意味着我打开 HTTP 端口并需要以某种方式保护它(不受八卦保护?不知何故,只有 RPC?)并且还要保护 /ui。
- 有没有更好的方法连接到每个堆栈?
- 在 8500 之前使用具有基本身份验证的 nginx 代理服务器来保护访问?
- 也在这个端口上使用 ssl-interception 并且仍然使用 8500 或者更确切地说使用配置的 https 端口(在 consul HTTPS API 中)
- 使用 ACL 保护访问?(很多设置允许堆栈成员访问 - 需要 TLS 吗?)
一般来说,如果不使用 TLS(客户端需要做很多工作来设置),哪些概念适合这个需要与堆栈服务器通信以安全地写入其 KV。
如果我错过了什么,很高兴添加您要求的任何内容