Docker swarm 仅将请求转发到单个节点

标签 docker load-balancing docker-swarm

我在 digital ocean 云中有 2 台机器。 188.226.167.12、146.185.135.232。
我的应用程序显示主机的名称。

每个节点都包含我的服务的一个副本。
当我多次访问:http://188.226.167.12:8080/http://146.185.135.232:8080/ ,主机名不会改变。

这意味着请求没有负载平衡。

docker -compose.yml:

version: "3"
services:
  web:
    image: stavalfi/projecty:latest
    deploy:
      replicas: 2
      restart_policy:
        condition: on-failure
    ports:
      - "8080:8080"
    networks:
      - webnet
networks:
  webnet:

如何为我的请求制作负载均衡器?

最佳答案

RR 负载均衡在作为覆盖网络的入口网络上运行。对于覆盖网络,您需要打开三个端口:

  • 7946/tcp(控制)
  • 7946/udp(控制)
  • 4789/udp(数据)

  • 在幕后,这是 Linux 上的 VXLAN。如果在覆盖网络上启用 IPSec,则还需要协议(protocol) 50。在 iptables CLI 上,如下所示:
    iptables -A INPUT -p tcp -m tcp --dport 7946 -j ACCEPT
    iptables -A INPUT -p tcp -m udp --dport 7946 -j ACCEPT
    iptables -A INPUT -p tcp -m tcp --dport 4789 -j ACCEPT
    iptables -A INPUT -p 50 -j ACCEPT
    

    您可以进一步将这些规则限制为仅允许 docker 节点之间的连接。

    关于Docker swarm 仅将请求转发到单个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47023344/

    相关文章:

    c# - .Net开源集群产品? ...像 Terracotta

    java - Wildfly 负载均衡器日志

    docker - 使服务只能从私有(private)网络 Kubernetes 访问

    asp.net - Docker 错误 : failed to register layer: Error processing tar file(exit status 1): "...msader15.dll.mui: no such file or directory"

    apache-camel - Apache Camel 中的集群 : Multiple JVMs Same CamelContext

    spring - Docker:客户端和服务器之间的链接

    java - 在 docker swarm + fluidd 上记录 java 异常

    docker - 如何通过公共(public) IP 将整个 docker swarm 集群暴露给外部世界?

    linux - Docker 在安装后首次运行时失败。错误发布 http ://. ....权限被拒绝。您是否尝试在没有 TLS 的情况下连接到支持 TLS 的守护进程?

    docker - 使用 Docker Ask 的 Yahoo 管理器错误在 [ActorSelection [Anchor(akka ://kafka-manager-system/),) 上超时