Назад | Перейти на главную страницу

Kubernetes: 502 Bad Gateway для некоторых активов - с Nginx Ingress

Я настроил кластер Kubernetes следующим образом:

В любом случае, после того, как я закончил настройку, интерфейсное приложение (например, Vue.js) не загружало никаких стилей, только чистый HTML + JS. Открыв вкладку «Сеть» в Firefox, я увидел ошибку «502» в файле CSS.

Просто для контекста это мой Dockerfile Vue.js:

FROM node:lts-alpine

RUN npm install http-server -g

WORKDIR /app

# copy both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./

# install project dependencies
RUN npm install

# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . .
RUN npm run build

EXPOSE 8000
CMD [ "http-server", "dist", "-c-1", "-p", "8000" ]

А вот журнал контроллера Nginx (из kubectl logs [nginx-controller-pod]): https://pastebin.com/tBfPXJns (не смог разместить это здесь, потому что это предположительно спам).

В большинстве случаев только запросы CSS и .png возвращают значение 502, в то время как все запросы JS достигают внешнего сервера.

Мой вход:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  annotations:
    kubernetes.io/tls-acme: "true"
    kubernetes.io/ingress.class: "nginx"    
    nginx.ingress.kubernetes.io/proxy-body-size: 200m                        
    nginx.ingress.kubernetes.io/rewrite-target: /    
    nginx.ingress.kubernetes.io/server-snippet: |
      add_header 'Access-Control-Expose-Headers' 'access-token,expiry,token-type,uid,client,Access-Token,Expiry,Token-Type,Uid,Client';                                                                

spec:
  tls:
    - hosts:
        ~all-hosts~
      secretName: birthplace-ssl        
  rules:
    - host: api.example.com.br
      http:
        paths:         
         - path: /
           backend:
             serviceName: example-backend-service
             servicePort: 9292         
    - host: example.com.br
      http: &default
        paths:      
          - path: /
            backend:
              serviceName: example-frontend-service
              servicePort: 8000             
    - host: painel.example.com
      http: *default        
    - host: admin.example.com
      http: *default

Мое развертывание YAML правильно настроено для обеих служб (то есть с использованием портов 8000 и 9292)

Как ни странно, Я могу получить доступ к любому из этих ресурсов из обычного (внешнего) запроса GET.

P.S. У журнала ...

10.24.0.40 - это IP-адрес кластера http-backend по умолчанию.

10.24.1.3 - это IP моего веб-приложения.