Рейтинг:0

Переменная внутреннего URL не указывает на правильный порт

флаг in

Я только что развернул внешний и внутренний модули, и возникла проблема с подключением между ними.

Бэкенд-под настраивается следующим образом:

апиВерсия: v1
вид: стручок
метаданные:
  имя: af-backend-pod
  этикетки:
    имя: af-backend-pod
    приложение: рекламный формат
спецификация:
  контейнеры:
  - имя: аф-бэкэнд
    изображение: локальный: 5000/бэкэнд: 1.2
    порты:
    - контейнерПорт: 4040
    среда:
    - имя: NODE_ENV
      значение: "тест"

Служба бэкэнд-модуля:

апиВерсия: v1
вид: сервис
метаданные:
  имя: аф-бэкенд
  этикетки:
    имя: аф-бэкэнд-сервис
    приложение: рекламный формат
спецификация:
  порты:
  - порт: 4040
    целевой порт: 6011
  селектор:
    имя: af-backend-pod
    приложение: рекламный формат

Проблема возникает, когда внешний интерфейс пытается вызвать серверную часть, используя его имя, указанное в конфигурации модуля:

апиВерсия: v1
вид: стручок
метаданные:
  имя: af-frontend-стручок
  этикетки:
    имя: af-frontend-стручок
    приложение: рекламный формат
спецификация:
  контейнеры:
  - название: аф-фронтенд
    изображение: локальный: 5000/интерфейс: 1.1
    порты:
    - контейнерПорт: 80
    среда:
    - имя: REACT_APP_SETUP
      значение: "тест"
    - название: REACT_APP_BACKEND_URL
      значение: "af-backend" # <- это
    - имя: REACT_APP_BACKEND_PORT
      значение: "6011"

В настоящее время внешний интерфейс предоставляется службой NodePort через порт 30120. Регистрация ошибок в консоли показывает, что внешний интерфейс пытается вызвать серверную часть, используя URL-адрес, например http://10.11.12.13:30120/ что неверно: я ожидаю увидеть внутренний API на порту 6011.

Правильно ли я понимаю? Или я должен сделать внутреннюю службу доступной извне?

Или, может быть, есть способ отформатировать URL-адрес бэкэнда, вырезав порт и заменив его на нужный?

Mikołaj Głodziak avatar
флаг id
Какую версию Kubernetes вы использовали и как настроили кластер? Вы использовали установку на «голое железо» или какой-то облачный провайдер? Важно воспроизвести вашу проблему.
AbreQueVoy avatar
флаг in
Хей Миколай. Это кластер из 3 узлов, работающий на экземплярах сервера OpenStack. Он был установлен с Kubespray; все узлы работают под управлением v1.22.2.
Mikołaj Głodziak avatar
флаг id
если я правильно понимаю, вы устанавливаете переменную только для этого хоста. Используете ли вы вход?
AbreQueVoy avatar
флаг in
Нет, я использую только NodePort.И я полагаю, что проблема здесь связана с тем, что переменные React настраиваются во время сборки, а здесь они нужны во время выполнения.
Mikołaj Głodziak avatar
флаг id
Можно ли жестко закодировать его в образе?
Рейтинг:0
флаг br

Проблема заключается в конфигурации service.spec.ports модуля Backend. Целевой порт — это порт, на который служба будет перенаправлять трафик. В данном случае это 4040, потому что внутренний модуль прослушивает 4040. И порт службы должен быть 6011, потому что модуль FE будет вызывать службу на этом порту. Нет необходимости предоставлять серверную службу как NodePort. Вы также можете попробовать команду netcat из контейнера FE, чтобы проверить, доступна ли служба. Команда: nc -v Service_IP 6011 (ожидайте в ответ «Успешно».)

апиВерсия: v1
вид: сервис
метаданные:
  имя: аф-бэкенд
  этикетки:
    имя: аф-бэкэнд-сервис
    приложение: рекламный формат
спецификация:
  порты:
  - порт: 4040 << Неверно Должно быть 6011; FE Pod звонит в службу по номеру 6011.
    targetPort: 6011 << Неверно Должно быть 4040; порт контейнера внутреннего модуля 4040
  селектор:
    имя: af-backend-pod
    приложение: рекламный формат
AbreQueVoy avatar
флаг in
Спасибо, @Rajesh Dutta. Я также изменил targetPort на 4040, и теперь этот порт открыт. Тем не менее, когда мы говорим о веб-сайте, между интерфейсом и сервером по-прежнему нет связи, но доступ к серверу возможен изнутри внешнего контейнера. Что может блокировать трафик, если предположить, что внешний интерфейс веб-сайта вызывает правильный URL-адрес серверной части?
Rajesh Dutta avatar
флаг br
Вы также изменили поле «порт» на 6011? (1) Попробуйте выполнить nslookup af-backend и посмотрите, разрешается ли DNS в FE. (2) Попробуйте использовать эту настройку в модуле FE. Обычно это не требуется. - название: REACT_APP_BACKEND_URL значение: "af-backend.default.svc"

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

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