
我正在嘗試使用 swarm 和 haproxy 建立一個主動-主動叢集。我正在努力解決對等定義,因為它考慮了主機名稱和 IP 位址。對於 swarm,這可能有點棘手。
我想對代理上的連接埠使用主機模式,以便可以使用 DNS 和 tcp roundrobin 將流量路由到代理節點。
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 layer7-loadbalancer
bind *:1024
server hostname1.bloom.com
server hostname2.bloom.com 10.128.0.2:1024 # (ip of real host)
這似乎適用於本地同行。但我認為它實際上是使用容器IP。我也不能真正從中產生副本。
所以我嘗試另一種語法。當像這樣編寫時,HAProxy 將從與主機名稱相符的對等名稱綁定 IP:port。
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位址。