В моей среде только с локальной сетью, как я могу достичь конкретных контейнеров, расположенных в бэкенде HAproxy, идентифицируя трафик по URL-адресу, а затем переписывая его?

Вопрос или проблема

Детали настройки (в случае если это имеет значение)

У меня есть тестовая установка только с локальной сетью, использующая 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. Объяснение конфигурации

  1. Frontend настройка (http_front):

    • Конфигурация принимает все входящие запросы на 80-м порту.
    • Используются ACL (Access Control Lists) для определения запросов к конкретным контейнерам на основе URL-путей.
    • При совпадении ACL вызывается соответствующий backend.
  2. Backend настройка:

    • Каждый backend связан с конкретным контейнером и направляет запросы к соответствующему серверу на локальном хосте с указанным портом.

V. Дополнительные предложения

  • Проверьте правильность рабочего состояния каждого контейнера: Убедитесь, что контейнеры запущены и доступны на ожидаемых портах.
  • Логирование: Возможно, будет полезно включить логирование в HAProxy, чтобы видеть ошибки и отладить проблему.
  • Настройка CORS и заголовков: Если ваши приложения работают на клиенте, убедитесь, что заголовки CORS настроены правильно, чтобы избежать проблем с доступом.

VI. Заключение

Эта обновленная конфигурация HAProxy позволит вам более удобно управлять доступом к вашим контейнерам. Переходя к использованию понятных URL с помощью правил на основе ACL, вы упростите навигацию и сделаете ее более интуитивной, что повышает общую эффективность работы.

Если у вас будут дополнительные вопросы или возникнут сложности в процессе настройки, не стесняйтесь обращаться за поддержкой. Удачи в ваших проектах!

Оцените материал
Добавить комментарий

Капча загружается...