Docker Swarm:仅将请求转发到与 swarm 负载均衡器位于同一主机上的容器

问题描述 投票:0回答:1

我真的很喜欢 docker 堆栈部署的人体工程学原理,通过 update_config > order > start-first 获得零停机部署的简单性。但是,这种设置的行为是该服务会将请求转发到连接到入口网络的任何主机中的容器。从他们的文档来看,这就是机制:

enter image description here

我已经相当广泛地阅读了文档,但找不到任何线索来回答这个问题:是否可以仅将请求转发到与集群负载均衡器在同一主机上运行的容器?我想要这个,因为主机已经位于带有运行状况检查的网络服务器/负载平衡器(Caddy)后面,并且不需要再次负载平衡,因为它会增加额外的(不必要的)延迟。

docker docker-compose docker-swarm docker-swarm-mode
1个回答
0
投票

Docker 群负载均衡在两个级别上完成:有一个入口负载均衡器,用于处理传入群的流量,以及一个虚拟 IP 负载均衡器,用于处理服务到服务流量。

两者都可以被绕过:

如果您有自己的入口负载均衡器,请将副本部署到接收外部流量的每个入口节点上,并在发布的端口上使用“主机”模式。

例如

service:
  ingress:
    image: nginx:latest
    ports:
    - publish: 80
      target: 8080
      mode: host

接下来,docker为所有服务创建一个基于虚拟ip的负载均衡器,服务名称为dns别名。如果您有一个名为“web”的服务,那么“web”就会解析为该 VIP。 Docker swarm 还会直接向每个服务容器注册一个 dns 别名

tasks.{service-name}
,它是带有 A 记录的 DNSRR。 Traefik 和 Caddy 应自动直接使用各个任务 IP,其他支持 DNSRR 作为服务发现的代理应配置为例如
http://task.web:8080
并将绕过docker自己的负载均衡器。

© www.soinside.com 2019 - 2024. All rights reserved.