#reactjs #kubernetes #openshift #kubernetes-ingress
#reactjs #kubernetes #openshift #kubernetes-вход
Вопрос:
У меня есть разные приложения react и его серверная служба, развернутые независимо внутри Openshift. Среди них есть одно приложение, в котором пользователи входят в систему и переходят к другим приложениям, используя ссылки, предоставленные в этом приложении.
В настоящее время ссылка каждого приложения указывает непосредственно на «Маршрут Openshift» (аналогичный Kube Ingress) приложения react.
Но для производственных регионов мы должны изменить способ его работы. Скажем, есть один общедоступный домен apps.mydomain.com
. Мы должны создать ссылки для каждого приложения таким образом, чтобы оно загружалось по этому пути, apps.mydomain.com/reactapp1
должны быть загружены reactapp1 и reactapp2 apps.mydomain.com/reactapp2
и так далее.
Итак, есть один вход, настроенный с путями
rules:
- host: apps.mydomain.com
http:
paths:
- backend:
serviceName: home
servicePort: 8080
path: /
- backend:
serviceName: react-app-1
servicePort: 8080
path: /reactapp1
- backend:
serviceName: app-1-api
servicePort: 8080
path: /app1/api
- backend:
serviceName: react-app-2
servicePort: 8080
path: /reactapp2
- backend:
serviceName: app-2-api
servicePort: 8080
path: /app2/api
Когда я нажимаю на URL, https://apps.mydomain.com
он загружает home
приложение, после входа в систему при нажатии на ссылки на приложения приложения не загружаются. Хотя я мог видеть, что заголовок браузера изменен на приложение для навигации, я получаю эту ошибку Uncaught SyntaxError: Unexpected token <
.
После множества поисков я обнаружил, что приложение react должно быть настроено по-другому, если его необходимо развернуть не из root.
Чего мне не хватает? Где я делаю неправильно? Вход или сборка приложения React? Могу ли я иметь разные входные данные с одним и тем же доменом, но с разными путями для каждого приложения react и его внутреннего API?
Ответ №1:
Вы могли бы использовать маршруты openshift вместо ingress для этого, вы можете проверить в документах, как его применить https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#path-based-routes
Одна деталь, на которую следует обратить внимание, если ваше приложение получит относительный путь, это не исключение из вашего запроса, например:
apps.mydomain.com/app2/api ---> app-2-api.svc:8080/app2/api
Ответ №2:
Я не думаю, что это возможно решить с помощью маршрутизатора Openshift (см. Этот выпуск).
С помощью Nginx Ingress это может быть легко выполнено с помощью аннотации nginx.ingress.kubernetes.io/rewrite-target: /
Комментарии:
1. Да, я пробовал это, думал, не решил проблему аннотации: kubernetes.io/ingress.class : nginx nginx.ingress.kubernetes.io/rewrite-target: /
2. Это означает, что в вашем приложении есть статические ссылки, которые используют абсолютные пути. В этом случае вы должны исправить свое приложение, никаким другим способом.
3. Это специфичная аннотация для контроллера nginx, openshift не использует nginx в качестве входного контроллера, а вместо этого openshift-router
4. Нет, ссылки не являются абсолютными, они меняются в зависимости от среды. Приложение home загружает ссылки, которые находятся в базе данных. Вопрос здесь в том, найдите способ направлять запросы в соответствующие приложения react на основе пути, указанного в URL.
5. @VijayVeeraraghavan Но у вас установлен nginx-ingress или нет?