У меня есть небольшой кластер, управляемый с помощью Rancher. Работают только двое: узел1 и узел2 .
Я мог бы добавить stack1 , добавить балансировщик нагрузки для этого стека или глобального, и он отлично работает. Но у меня есть проблемы с DNS.
Я мог бы указать, например, stack1.domain.com на node1.domain.com . Мой балансировщик нагрузки работает на node1 (или даже на всех узлах моего кластера), поэтому он работает.
Но если однажды мне нужно будет закрыть мой узел 1, я должен идти быстро и указать DNS stack1.domain.com на node2.domain.com
Не очень хорошая идея.
Моей первой мыслью было использование небольшого haproxy-сервера перед моим кластером Rancher.
Итак, я указываю stack1.domain.com на haproxy.domain.com , а затем haproxy отправляет его на узел1 и узел2.
Но это не работает.
Я мог бы поставить что-то подобное
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
Вероятно, это может сработать. Но если мне нужно добавить stack2, который также прослушивает 80 портов, я не смог бы использовать эту схему.
Я мог бы добавить bck_s2 , но он будет указывать на тот же node1 / node2 . Так что владелец ранчо не поймет, хочу ли я 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
В этом случае я мог бы установить балансировщик нагрузки на Rancher на основе правила / s1, / s2 и т. Д.
Но кажется, что это невозможно сделать с помощью haproxy. Я прав?
Итак, вопросы.
1) Можно ли реализовать это с помощью haproxy и как это сделать?
2) Есть ли другие решения, которые я мог бы использовать?