问题标签 [consul-kv]
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.
consul - Consul HTTP 请求获取所有 kv 值
我需要consul
使用 http api 获取所有 kv 值。目前我可以使用以下命令获得一个值。
它只返回其中指定的值 ( test-value
)
但我想得到所有的值kv store
我怎样才能做到这一点?这里有解决方法吗?
注意:我已经使用consul
cli 完成了此操作,但我想使用https api
ssl - Hashicorp Consul - 如何从 Kubernetes 集群中的 Pod 中执行经过验证的 TLS
我在理解 Consul 端到端 TLS 时遇到了一些困难。作为参考,我在 Kubernetes 中使用 Consul(通过hashcorp/consul Helm 图表)。只有一个数据中心和 Kubernetes 集群——没有外部各方或顾虑。
我已经像这样配置了我的覆盖values.yaml文件:
所有其他值都是随附的values.yaml文件中的默认值。
这可行,Consul 客户端日志表明所有代理区域都使用 TLS 很好地连接,相关证书和密钥是由(据我了解)Consul的自动加密功能创建的。
我不明白的是如何从运行在 Pod 中的 Kubernetes 上的应用程序启动到 Consul 服务器的 HTTPS 连接。由于 Pod 的容器(可能)在其信任库中没有 Consul 根 CA 证书,因此所有 HTTPS 调用都会失败,如下面的wget示例所示:
如果容器不能将证书识别为有效,我应该如何强制从我在 Kubernetes 上的应用程序到 Consul 的端到端(已验证)HTTPS 连接?我对证书传播有误解吗?
非常感谢 - 亚伦
ssl-certificate - Traefik 集群 + Consul KV + ACME - CERTS NOT RENEWED “调用领导监听器时出错:现有密钥与锁使用不匹配”
我在 docker 上运行一个 traefik 堆栈,并使用 consul 作为后端存储。我的集群由三个节点组成,并将 traefik 配置为在到期前 30 天自动每 3 个月使用 ACME 更新证书。但是,证书没有得到更新。我重新启动了 traefik docker 容器,我认为有些事情搞砸了。
证书没有更新。我收到这条消息:
这个集群是由一个不再在公司工作的人建立的,所以我不完全理解发生了什么。
我的 traefik 设置(v1.7.12)
请帮忙!不确定钥匙/锁是如何工作的,或者我应该如何释放锁/钥匙并安全地重新启动 traefik。
configuration - 使用 Consul 进行动态配置管理
我正在设计一个小项目,我需要使用Consul以动态方式管理应用程序配置,以便我的所有应用程序机器可以同时获取配置,而不会出现任何不一致问题。我们Consul
已经将其用于服务发现目的,所以我正在阅读更多关于它的信息,看起来他们有一个Key/Value
商店,我可以用它来管理我的配置。
我们所有的配置都是 json 文件,因此我们制作了一个包含所有 json 配置文件的 zip 文件,并将参考存储在其中,您可以从该位置下载此 zip 文件到Consul Key/Value
存储中的特定密钥中。我们所有的应用程序机器都需要从该引用(在 Consul 中的密钥中提到)下载此 zip 文件并将其存储在每个应用程序机器的磁盘上。现在我需要所有应用程序机器同时切换到这个新配置,以避免任何不一致问题。
假设我有 10 台应用程序机器,所有这 10 台机器都需要下载包含我所有配置的 zip 文件,然后原子地同时切换到新配置以避免任何不一致(因为它们正在占用流量)。以下是我提出的步骤,但我对如何在内存中加载新文件以及切换到新配置的工作方式感到困惑:
- 到目前为止,所有 10 台机器都已启动并使用默认配置文件运行,这些文件也在磁盘上。
- 一些外部进程将使用最新的 zip 文件参考更新我的领事键/值存储中的键。
- 所有 10 台机器都有手表,
key
因此一旦有人更新value
,key
手表就会被触发,然后所有这 10 台机器都会将 zip 文件下载到磁盘上并解压缩以获取所有配置文件。 - (..)
- (..)
- (..)
现在这是我对剩余步骤应该如何工作感到困惑的地方。
- 应用程序应该如何将这些配置文件加载到内存中,然后同时切换?
- 我是否需要使用
leadership election
领事或其他任何东西来实现这些事情? - 由于所有 10 个应用程序都已经在内存中使用默认配置(也存储在磁盘上)运行,这将是什么逻辑。我们是否需要两个单独的目录,一个是默认目录,另一个是新配置,然后使用这两个目录?
假设这是否是我在Consul
随机设计中拥有的节点(这里可能是错误的) -
哪里path
会有新的 zip 文件参考,并且machines
可能是这里的一个密钥,我可以在其中列出所有机器,所以现在我可以在每台机器成功下载文件后立即将每台机器的 IP 地址放入该密钥中?一旦machines
密钥列表的大小为 10,那么我可以说我们准备好切换了吗?如果是,那么我如何以原子方式更新该节点中的机器密钥?也许这个逻辑在这里是错误的,但我只是想扔掉一些东西。并且还需要在切换后清理所有这些机器列表,因为对于下一次配置更新我需要做类似的练习。
有人可以概述有关如何有效地动态管理所有应用程序机器上的配置并同时避免不一致问题的逻辑吗?也许我还需要一个节点,因为status
它可以包含有关每台机器配置、下载时间、切换时间和其他详细信息的详细信息?
consul - Consul KV 存储端点
我正在设计一个小项目,我需要使用Consul以动态方式管理应用程序配置,以便我的所有应用程序机器可以同时获取配置,而不会出现任何不一致问题。我们Consul
已经将其用于服务发现目的,所以我正在阅读更多关于它的信息,看起来他们有一个Key/Value
商店,我可以用它来管理我的配置。
我们已经启动并运行了一个领事,如果我点击Key/Value
商店选项卡,下面是我得到的网址:
到目前为止,我正在尝试Consul
通过命令行执行以下操作:
- 在 Consul 中创建新的键/值。
- 更新现有键的值。
- 密切关注现有键,以便如果值发生变化,我会收到通知,它可以向我显示该键的新值。
现在我已经通过 ui 在其中创建了一些带有一些值的键,所以我正在考虑获取该键的值。下面是图像,但我对如何在命令行中获取此键的值感到困惑:
我尝试使用以下 curl 调用,但它并没有给我它的价值404 Not Found
?我在这里做错什么了吗?
另外,如何创建新的键/值并通过命令行监视现有键?
spring-integration - Consul KV 从 Spring Integration 变压器中读取
我们正在尝试在引导程序中使用以下设置访问 consul KV 存储,并在代码中使用 @Value("${configvalue}") 读取它。
这在 Rest Controller 中使用时效果很好;但是我们有一个 kafka 监听器和一个从它开始的集成流,我们需要在转换器内部访问这个 @Value("${configvalue}") ?这总是给出 null; 虽然我们可以在单独的方法中通过 get HTTP 调用看到该值。
consul - 领事对领事手表的数量有上限吗?
我正在创建 200 个观察者,并且在查询任何领事 CLI 命令时反复收到 EOF 错误,然后断开连接。在领事日志上,我看到“打开的文件太多”错误,同时让我的领事自己起来。
对于大约 150 个条目,我很乐意密切关注并提供 HTTP 端点的更新。
设置:服务器模式下的 3 个节点领事代理正在运行。当一个领事代理启动时,配置文件会尝试在 KV 上注册 200 个 Key watchers。
我怀疑这是否达到了开放的 FD 限制。
详细信息的输出在这里:
- 超限输出
[拉库玛]#ulimit -a
- 核心文件大小(块,-c)0
- 数据段大小 (kbytes, -d) 无限制
- 调度优先级 (-e) 0
- 文件大小(块,-f)无限制
- 待处理信号 (-i) 31186
- 最大锁定内存 (kbytes, -l) 64
- 最大内存大小 (kbytes, -m) 无限制
- 打开文件 (-n) 16384
- 管道大小(512 字节,-p)8
- POSIX 消息队列(字节,-q)819200
- 实时优先级 (-r) 0
- 堆栈大小(千字节,-s)8192
- cpu时间(秒,-t)无限制
- 最大用户进程 (-u) 31186
- 虚拟内存 (kbytes, -v) 无限制
- 文件锁 (-x) 无限制
- for
lsof
on consul grep 给出了这些结果
- 在运行代理之前
[拉库玛]#lsof | grep ‘consul’ | grep ‘ESTABLISHED’ | wc -l
0
[拉库玛]#lsof | grep ‘consul’ | wc -l
603
- 使用 150 只手表,这些结果是:
[拉库玛]#lsof | grep ‘consul’ | grep ‘ESTABLISHED’ | wc -l
3750
[拉库玛]#lsof | grep ‘consul’ | wc -l
4563
- 运行 500 只手表
[拉库玛]#lsof | grep ‘consul’ | grep ‘ESTABLISHED’ | wc -l
4040
[拉库玛]#lsof | grep ‘consul’ | wc -l
4881
- 当系统停止响应时,consul 会做出响应
[rajkumar]#consul kv put new one
错误!写入数据失败:输入http://127.0.0.1:8500/v1/kv/new : EOF
- 领事成员
[拉库玛]#consul members
检索成员时出错:获取http://127.0.0.1:8500/v1/agent/members?segment=_all : EOF
- 领事获取命令错误
[拉库玛]#consul kv get key14
查询 Consul 代理时出错:获取http://127.0.0.1:8500/v1/kv/key14:读取 tcp 127.0.0.1:55574->127.0.0.1:8500:读取:对等方重置连接
- 启动后的领事代理进程日志。我在配置文件中创建了 500 个手表。
c# - 如何使用 Consul 一次在一台机器上执行同步任务?
我有一个有 10 台机器的系统,我需要在每台机器上按同步顺序逐一执行特定任务。基本上只有一台机器应该在特定时间执行该任务。我们已经Consul
用于其他目的,但我在想我们也可以这样Consul
做吗?
我阅读了更多关于它的内容,看起来我们可以使用领事选举领导者,每台机器都会尝试获取锁,完成工作,然后释放锁。一旦工作完成,它将释放锁,然后其他机器将再次尝试获取锁并执行相同的工作。这样一来,一切都将一次同步一台机器。
我决定使用这个已经内置了这个功能的C#
PlayFab ConsulDotNet
库,但是如果有更好的选择,我也愿意接受。我的代码库中的以下Action
方法几乎通过观察者机制在每台机器上同时调用。
现在在上述方法中,我需要做以下事情 -
- 尝试获取锁。如果您无法获得锁,请等待它,因为其他机器可能在您之前抓住了它。
- 如果获得锁,则 DoTheWork()。
- 工作完成后,释放锁,以便其他机器可以获取锁并执行相同的工作。
想法是所有 10 台机器都应按DoTheWork()
同步顺序一次一台。基于这个博客和这个博客,我决定修改他们的例子来适应我们的需要——
下面是我的LeaderElectionService
课:
下面是我的LeaderChangedEventArgs
课:
在上面的代码中,我的用例可能不需要很多部分,但想法是相同的。
问题陈述
现在在我的Action
方法中,我想使用上面的类并在获得锁后立即执行任务,否则继续等待锁。一旦工作完成,释放并销毁会话,以便其他机器可以抓住它并完成工作。我对如何在下面的方法中正确使用上面的类有点困惑。
我最近开始使用,C#
所以这就是为什么有点困惑如何通过使用Consul
和这个库在生产中有效地工作。
更新
我根据您的建议尝试了下面的代码,我想我之前也尝试过,但是由于某种原因,一旦它进入这一行 await distributedLock.Acquire(cancellationToken);
,它就会自动返回到 main 方法。它永远不会前进到我的Doing Some Work!
打印输出。CreateLock
真的有效吗?我期待它会data/lock
在 consul 上创建(因为它不存在),然后尝试获取它的锁,如果获得,然后做工作,然后为其他机器释放它?
azure-keyvault - Vault .NET - 版本化 K/V 机密引擎的路径无效
我已在 Vault 中添加了所有配置详细信息。您可以在下面的附图中看到详细信息。这遵循特定路径,即kv/unistad/dev/workflow/camunda/1.0
但是,当我尝试使用带有以下 nuget 包的Vault.NET阅读此信息时
我的代码看起来像这样:
当我运行上面的代码时,我收到以下错误:
版本化的 K/V 机密引擎的路径无效。有关要使用的适当 API 端点,请参阅 API 文档。如果使用 Vault CLI,请使用“vault kv get”进行此操作。
我不确定如何解决此错误。任何帮助将非常感激。