Вопрос или проблема
Детали настройки (в случае если это имеет значение)
У меня есть тестовая установка только с локальной сетью, использующая Podman для контейнеров и Haproxy для перенаправления трафика. Контейнеры Podman работают от имени root (сами по себе), но не на хосте. Haproxy работает от имени root на хосте, не как контейнер, а как пакет, установленный с помощью sudo apt на хосте Ubuntu.
Цель
На ноутбуке, находящемся в той же локальной сети, что и ‘сервер контейнеров’, я хочу вводить /, чтобы обращаться к каждому конкретному серверу, чтобы мне не пришлось запоминать порты, а только IP-адрес. Например, 192.168.1.12/app1 для обращения к контейнеру 1, /app2 для обращения к контейнеру 2 и т.д.
Что работает
На ноутбуке я успешно ввожу 192.168.1.12:8891 и успешно получаю полный функционал контейнера 1. Это верно для всех трех контейнеров. Работает отлично.
Что НЕ работает
Когда я начал пытаться переписывать пути и обращаться к корню отдельных серверов, некоторое переписывание явно работало, но приводило только к ошибкам 503 и 400. Я никогда не смог получить доступ к страницам входа отдельных серверов ни одной из моих сотен попыток (много-много больше, чем вы видите в моей конфигурации ниже была испробована…)
У меня есть следующая конфигурация HAproxy (с некоторыми оставшимися попытками, закомментированными, чтобы показать вам некоторые идеи, которые казались многообещающими…).
defaults
mode http
frontend cntr1
bind 0.0.0.0:80
timeout client 60s
# option forwardfor except 127.0.0.1
acl is_cntr1 path_beg -i /cntr1/
acl is_cntr1 path_beg -i /cntr1
use_backend maut028892 if is_cntr1
backend maut028892
timeout connect 10s
timeout server 60s
http-request replace-path /cntr1/, /\1
#option forwardfor header x-client
server cntr_1 127.0.0.1:8891
Вот изображение моей настройки для возможной помощи
Любые советы, предложения, идеи и т.д. будут более чем приветствуемы!
Ответ или решение
В вашем сетевом окружении с использованием HAProxy и контейнеров Podman вы стремитесь организовать доступ к контейнерам по удобным URL-путям. Давайте рассмотрим, как этого добиться, сохранив конфигурацию HAProxy эффективной и правильной.
I. Описание проблемы
Вы уже успешно настроили HAProxy, и у вас есть возможность получать доступ к контейнерам через прямые IP-адреса и порты. Однако цель стоит в том, чтобы упростить процесс доступа, используя более удобные URL, такие как 192.168.1.12/app1
или 192.168.1.12/app2
, что позволит избежать запоминания портов.
II. Решение проблемы
Для успешной настройки маршрутизации на основе URL вам необходимо внести некоторые изменения в конфигурацию HAProxy. Вместо использования replace-path
, который может быть причиной ошибок 400 и 503, давайте больше сосредоточимся на правильной маршрутизации и переписывании путей.
III. Обновленная конфигурация HAProxy
Ваш текущий конфигурационный файл HAProxy требует доработки. Предлагается следующее обновление:
defaults
mode http
timeout client 60s
timeout server 60s
timeout connect 10s
frontend http_front
bind 0.0.0.0:80
acl is_cntr1 path_beg -i /app1/
acl is_cntr2 path_beg -i /app2/
use_backend backend_cntr1 if is_cntr1
use_backend backend_cntr2 if is_cntr2
backend backend_cntr1
server cntr_1 127.0.0.1:8891
backend backend_cntr2
server cntr_2 127.0.0.1:8892
# Добавьте дополнительные backend'ы ниже для других контейнеров
IV. Объяснение конфигурации
-
Frontend настройка (http_front):
- Конфигурация принимает все входящие запросы на 80-м порту.
- Используются ACL (Access Control Lists) для определения запросов к конкретным контейнерам на основе URL-путей.
- При совпадении ACL вызывается соответствующий backend.
-
Backend настройка:
- Каждый backend связан с конкретным контейнером и направляет запросы к соответствующему серверу на локальном хосте с указанным портом.
V. Дополнительные предложения
- Проверьте правильность рабочего состояния каждого контейнера: Убедитесь, что контейнеры запущены и доступны на ожидаемых портах.
- Логирование: Возможно, будет полезно включить логирование в HAProxy, чтобы видеть ошибки и отладить проблему.
- Настройка CORS и заголовков: Если ваши приложения работают на клиенте, убедитесь, что заголовки CORS настроены правильно, чтобы избежать проблем с доступом.
VI. Заключение
Эта обновленная конфигурация HAProxy позволит вам более удобно управлять доступом к вашим контейнерам. Переходя к использованию понятных URL с помощью правил на основе ACL, вы упростите навигацию и сделаете ее более интуитивной, что повышает общую эффективность работы.
Если у вас будут дополнительные вопросы или возникнут сложности в процессе настройки, не стесняйтесь обращаться за поддержкой. Удачи в ваших проектах!