haproxy 作为 swarm 部署

haproxy 作为 swarm 部署

我正在尝试使用 swarm 和 haproxy 设置主动-主动集群。我对对等点的定义感到困惑,因为它要考虑主机名和 IP 地址。使用 swarm 时,这可能有点棘手。

我想对代理上的端口使用模式主机,以便我可以使用 DNS 和 tcp 循环将流量路由到代理节点。

 proxy:
    image: "saps-proxy:5"
    hostname: '{{.Node.Hostname}}'
    dns: 127.0.0.11
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
      - target: 443
        published: 443
        protocol: tcp
        mode: host
      - target: 1024
        mode: host
        protocol: tcp
    deploy:
      mode: global
      placement: { constraints: ["node.labels.type == proxy"] }
      resources: { limits: { memory: 2G } }

在 haproxy.cfg 中,我定义了一个 peers 部分。

peers layer7-loadbalancer
    bind *:1024
    server hostname1.bloom.com
    server hostname2.bloom.com 10.128.0.2:1024  # (ip of real host)

这似乎对本地对等点有效。但我认为它实际上使用的是容器 IP。我也无法真正从中生成副本。

所以我尝试了另一种语法。这样写的话,HAProxy 将从与主机名匹配的对等名称绑定 IP:端口。

peers layer7-loadbalancer
    peer hostname1.bloom.com 10.128.0.1:1024  # (ip of real host)
    peer hostname2.bloom.com 10.128.0.2:1024  # (ip of real host)

但是我收到了一个错误。

Starting proxy hostname1.bloom.com: 
cannot bind socket (Cannot assign requested address) [10.128.0.1:1024]

这是有道理的,因为容器 IP 实际上不是主机 IP。这就是为什么这个地址不能从容器内部绑定的原因。

此刻,我还不太清楚如何解决这个问题。

答案1

您已启用 dns(dns:127.0.0.11),因此在对等行中使用服务名称而不是 ip 地址。

相关内容