Vue.js приложение не возвращает скрипт с входом Nginx по подпути (EKS Kubernetes)

#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 не заполняет раздел «приложение».