pares haproxy como implantação de enxame

pares haproxy como implantação de enxame

Estou tentando configurar um cluster ativo-ativo com swarm e haproxy. Estou lutando com a definição de pares, pois ela leva em consideração o nome do host e o endereço IP. Com o enxame isso pode ser um pouco complicado.

Quero usar o modo host para as portas no proxy para poder rotear o tráfego com DNS e tcp roundrobin para os nós do proxy.

 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 } }

No haproxy.cfg estou definindo uma seção de pares.

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

Isso parece funcionar para o par local. Mas acho que na verdade está usando o IP do contêiner. Eu também não consigo gerar réplicas disso.

Então tento outra sintaxe. Quando escrito assim, o HAProxy vinculará IP: porta do nome do par que corresponde ao nome do host.

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)

Eu recebo um erro.

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

Isso faz sentido porque o IP do contêiner não é, na verdade, o IP do host. É por isso que esse endereço não pode ser vinculado de dentro do contêiner.

Neste ponto, não tenho certeza de como resolver isso.

Responder1

Você habilitou o DNS (dns: 127.0.0.11), então use o nome do serviço em vez do endereço IP na linha peer.

informação relacionada