Рейтинг:0

HAproxy не находит серверную часть, когда используется другой порт

флаг in

У меня есть два бэкэнда, которые представляют собой один и тот же сервер, на котором работают два одинаковых образа Docker, но каждый с другим портом. То есть на внутреннем сервере единственное различие между ними — сопоставление портов. Мой балансировщик нагрузки (HAProxy) — это отдельная физическая машина с адресом 10.0.0.2.

интерфейс http-in
    привязать *:80
    привязать *: 443 ssl crt /etc/ssl/mydomain.com/both.pem
    схема перенаправления http-запроса https, если только { ssl_fc }

    acl восемьдесят_http hdr(хост) -m beg -i восемьдесят.
    acl восемьдесятсот_http hdr(хост) -m beg -i восемьдесятсот.

    use_backend восемьдесят, если восемьдесят_http
    use_backend восемьдесятсот, если восемьдесятсот_http

бэкэнд восемьдесят
    сервер двадцать 10.0.0.20:80 проверьте maxconn 300

бэкэнд восемьдесятсот
    сервер двадцать 10.0.0.20:8000 проверьте maxconn 300

Когда я sudo systemctl перезапускаю haproxy, он говорит мне, что «у бэкэнда восемьдесят сотен нет доступных серверов!» Однако я могу успешно скрутить оба порта из балансировщика нагрузки.

Я вставил в iptables следующее:

sudo iptables -A ВЫВОД -p TCP -d 10.0.0.0/16 --sport 8000 -j ПРИНЯТЬ

... и для селинукса:

sudo semanage port --add --type http_port_t --proto tcp 8000

ни то, ни другое не имело значения.

Что мне здесь не хватает?

флаг in
Я бы предпочел взглянуть на acls, у меня нет опыта работы с acls в nginx, поэтому я не могу вам помочь, но если вы можете получить доступ к бэкэндам через curl, это не проблема iptables. Если ваш сервер реализует selinux, это также может быть проблемой.
флаг in
Уже открыл 8000 и в selinux тоже.
флаг in
Пожалуйста, попробуйте `setsebool -P haproxy_connect_any 1`
Рейтинг:0
флаг in

В двух словах, проблема в том, что вы не можете просто случайным образом выбрать порт, который будет использоваться для вашего бэкенда. Здесь 8000 уже добавлено к soundd_port_t, группе, в которой нет haproxy. Таким образом, «sudo semanage port --add --type http_port_t --proto tcp 8000» не выполняет то, что здесь предполагалось. На самом деле он не делает того, что, по вашему мнению, мог бы сделать, когда говорит, что этот порт уже добавлен (он уже добавлен к чему-то другому). Простое решение — выбрать порты, к которым HAProxy имеет доступ. Этот парень объясняет все лучше всего:

https://unix.stackexchange.com/questions/363878/what-selinux-policies-apply-to-haproxy

флаг in
По иронии судьбы, этот ответ ссылается на этот [ответ SF] (https://serverfault.com/questions/654599/weird-interaction-with-systemctl-with-haproxy-on-centos-7/654684#654684), поэтому мы скорее всего, можно закрыть этот вопрос как его дубликат.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.