#vue.js #kubernetes #nginx-ingress
#vue.js #kubernetes #nginx-вход
Вопрос:
У меня есть приложение Vue, которое я пытаюсь разместить в кластере AWS EKS за входом NLB и Nginx, чтобы получить к нему доступ из подпути (/ backoffice) моего сетевого балансировщика нагрузки. Настройка следующая.
У меня есть следующий файл docker :
FROM node:lts-alpine
RUN npm install -g http-server
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 8080
CMD [ "http-server", "dist", "-p", "80"]
Затем я настроил свою службу и развертывание следующим образом:
apiVersion: v1
kind: Service
metadata:
name: backoffice-service
namespace: internal
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
protocol: TCP
selector:
app.kubernetes.io/name: app-backoffice
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-backoffice
namespace: internal
spec:
selector:
matchLabels:
app.kubernetes.io/name: app-backoffice
replicas: 1
revisionHistoryLimit: 3
template:
metadata:
labels:
app.kubernetes.io/name: app-backoffice
spec:
containers:
- name: app-backoffice
image: backoffice:0.0.1
imagePullPolicy: Always
ports:
- containerPort: 80
Затем я настроил свой вход:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-internal
namespace: internal
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /backoffice/*
backend:
serviceName: backoffice-service
servicePort: 80
Я также изменил publicPath в vue.config.js чтобы соответствовать подпути, используемой входом.
Когда я запрашиваю свой балансировщик нагрузки, он успешно возвращает мне страницу и ресурсы, которые необходимо загрузить для отображения страницы, и браузер успешно получает ее. Но раздел приложения пуст, и отображается ошибка noscript, даже если JS включен в моем браузере…
Эта проблема также возникает локально при запуске
npm run build
http-server dist -p 80
Мне не удается исправить эту проблему, и я застрял на несколько дней…
У кого — нибудь есть идея ?
Спасибо
Комментарии:
1. Поскольку вы используете NLB, пытались ли вы изменить тип службы на LoadBalancer из порта узла? Вы также пытались установить порт: 8080 и targetPort: 80?
2. Я не могу установить тип сервиса на LoadBalancer, потому что это приведет к тому, что Kubernetes создаст новый LoadBalancer только для этой службы, где я пытаюсь добиться наличия одного NLB, который передает запрос на вход Nginx и направляет его в службу бэк-офиса. Также порт не может быть 8080, так как мы запрашиваем веб-сайт через HTTP (таким образом, порт 80). Проблема, я думаю, заключается не во входе, поскольку все файлы возвращаются правильно (200 OK), но приложение vue не заполняет раздел «приложение».