【发布时间】:2019-01-08 04:35:24
【问题描述】:
我有一些使用 Rancher 管理的小型集群。只有两个工人:node1 和 node2。
我可以添加一个 stack1,为这个堆栈或全局添加一个负载平衡器,它工作正常。但是我的 DNS 有点问题。
例如,我可以将 stack1.domain.com 指向 node1.domain.com。我的负载均衡器在 node1(甚至我的集群的所有节点)上运行,所以它可以工作。
但是如果有一天我需要关闭我的 node1,我必须快速将 DNS stack1.domain.com 指向 node2.domain.com 不是个好主意。
我的第一个想法是在我的 Rancher 集群前面使用一个小型 haproxy 服务器。
所以,我将 stack1.domain.com 指向 haproxy.domain.com,然后将其 haproxy 后端到 node1 和 node2。
但它不起作用。
我可以这样写
frontend http *:80
acl stack1 hdr(host) -i stack1.domain.com
use_backend bck_s1 if stack1
backend bck_s1
mode http
balance roundrobin
server n1 node1.domain.com:80 check
server n2 node2.domain.com:80 check
也许它可以工作。但是如果我还需要添加监听 80 端口的 stack2,我就不能使用这个模式。
我可以添加 bck_s2,但它会指向同一个 node1/node2。所以rancher不会明白我要stack1还是stack2?
使用不同的端口可以解决它,但这似乎不是一个好主意。当然我可以监听 stack1 到 80 端口,stack2 到 8080,但是如果我有 stack3, 4,... 它变得太复杂了。
我有一个想法添加一些到后端的路径。像这样:
backend bck_s1
mode http
balance roundrobin
server n1 node1.domain.com:80/s1 check
server n2 node2.domain.com:80/s1 check
在这种情况下,我可以根据规则 /s1、/s2 等在 Rancher 上放置负载均衡器。 但似乎不可能使用 haproxy 来做到这一点。我说的对吗?
所以问题。
1) 是否可以使用haproxy来实现以及如何实现?
2) 还有其他一些我可以使用的解决方案吗?
【问题讨论】: