gpt4 book ai didi

Docker Swarm : bypass load balancer and make direct request to specific containers

转载 作者:行者123 更新时间:2023-12-04 14:58:37 25 4
gpt4 key购买 nike

我有两个容器在一个集群中运行。每个暴露一个 /stats我试图抓取的端点。
但是,使用 swarm 端口显然会导致查询负载平衡,因此统计信息都混合在一起:

+--------------------------------------------------+
| Server |
| +-------------+ +-------------+ |
| | | | | |
| | Container A | | Container B | |
| | | | | |
| +-------------+ +-------------+ |
| \ / |
| \ / |
| +--------------+ |
| | | |
| | Swarm Router | |
| | | |
| +--------------+ |
| v |
+-------------------------|------------------------+
|
A Stats
B Stats
A Stats
B Stats
|
v
我想保留应用程序请求的负载平衡器,但还需要一种直接的方法来向每个容器发出请求以获取统计信息。
+--------------------------------------------------+
| Server |
| +-------------+ +-------------+ |
| | | | | |
| | Container A | | Container B | |
| | | | | |
| +-------------+ +-------------+ |
| | \ / | |
| | \ / | |
| | +--------------+ | |
| | | | | |
| | | Swarm Router | | |
| v | | v |
| | +--------------+ | |
| | | | |
+--------|----------------|----------------|-------+
| | |
A Stats | B Stats
A Stats Normal Traffic B Stats
A Stats | B Stats
| | |
| | |
v | v
动态解决方案将是理想的,但由于我不打算对每个容器进行任何动态缩放,例如硬编码端口之类的东西:
::8080  Both containers via load balancer
::8081 Direct access to container A
::8082 Direct access to container B
这可以用swarm完成吗?

最佳答案

从覆盖网络内部,您可以使用 tasks.<service_name> 获取所有副本的 IP 地址。 DNS查询:

; <<>> DiG 9.11.5-P4-5.1+deb10u5-Debian <<>> -tA tasks.foo_test
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19860
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;tasks.foo_test. IN A

;; ANSWER SECTION:
tasks.foo_test. 600 IN A 10.0.1.3
tasks.foo_test. 600 IN A 10.0.1.5
tasks.foo_test. 600 IN A 10.0.1.6
这是在 documentation中提到的.
另外,如果您使用 Prometheus要抓取这些端点的指标,您可以将上述内容与 dns_sd_configs 结合使用设置要抓取的目标( here 是一篇文章如何)。这很容易运行,但功能有限(尤其是在大型环境中)。
实现相同目标的更高级方法是使用 dockerswarm_sd_config ( docsexample configuration )。这样,端点列表将通过查询 Docker 守护程序以及一些有用的标签(即节点名称、服务名称、自定义标签)来收集。

关于Docker Swarm : bypass load balancer and make direct request to specific containers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67401376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com