【问题标题】:Rancher behind haproxyhaproxy 背后的牧场主
【发布时间】:2019-01-08 04:35:24
【问题描述】:

我有一些使用 Rancher 管理的小型集群。只有两个工人:node1node2

我可以添加一个 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) 还有其他一些我可以使用的解决方案吗?

【问题讨论】:

    标签: docker haproxy rancher


    【解决方案1】:

    您可以配置通配符条目,而不是使用 haproxy.domain.com 中的特定条目,指向两个节点以及为后端配置运行状况检查。这样,当您关闭 node-1 时,HA 代理可以检测到它,并且不再将流量引导到该节点。这种方式在 HA 代理端会更加动态,您无需更改 DNS。

    参考资料: - Wildcard in subdomain for ACL in HAPROXY

    【讨论】:

    • 感谢您的回复。这是有道理的,但是我仍然有一个问题,如何在 Rancher 上配置负载均衡器?或者如何从 haproxy 向这个负载均衡器传递信息?例如,使用通配符条目,我在 haproxy 上收到了对 stack1 或 stack2 的请求。我将它重定向到 node1 或 node2...但是如何为这些节点指示我想要哪个堆栈?
    • 我没有方便的 1.6.x 设置来提供实际配置。但想法是创建一个全局负载均衡器堆栈,然后创建您想要指向相应堆栈的规则。您需要选择“始终在每台主机上运行此容器的一个实例”。启动 LB 时。
    猜你喜欢
    • 2020-12-07
    • 2017-11-26
    • 2023-01-17
    • 1970-01-01
    • 2019-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多