搜尋

首頁  >  問答  >  主體

VueJS 應用程式未在 kubernetes 中載入 js 文件

我有一個 VueJS 應用程式在 kubernetes 中的 Docker 映像中運行。一旦存在多個副本/pod,客戶端就無法載入應用程式 - 許多(但不是全部)載入檔案的呼叫都會傳回 404。

我認為這是因為它們被發送到與最初服務請求的 Pod 不同的 Pod。

如何解決這個問題?

這是我的設定:

這是一個傳回 404 的範例呼叫: 取得 https://myapp.mydomain.com/js/chunk-d18c0136.7a3f0664.js

這是我的服務規格:

apiVersion: v1
kind: Service
metadata:
  name: ${CI_PROJECT_NAME}-${CI_BUILD_REF_SLUG_SHORT}
  labels:
    app: ${CI_ENVIRONMENT_SLUG}
spec:
  ports:
    - port: 80
      targetPort: 8080
      protocol: TCP
      name: ${CI_PROJECT_NAME}-${CI_BUILD_REF_SLUG}
  selector:
    app: ${CI_ENVIRONMENT_SLUG}

這是我的 nginx 入口規格:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ${CI_PROJECT_NAME}-${CI_BUILD_REF_SLUG_SHORT}
  labels:
    app: ${CI_ENVIRONMENT_SLUG}
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
spec:
  defaultBackend:
    service:
      name: ${CI_PROJECT_NAME}-${CI_BUILD_REF_SLUG_SHORT}
      port:
        number: 80
  rules:
    - host: ${CI_APPLICATION_HOST}
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: ${CI_PROJECT_NAME}-${CI_BUILD_REF_SLUG_SHORT}
                port:
                  number: 80

作為解決方法,我們將防火牆配置為僅與一個 Pod 直接通信,或僅運行一個副本。

在 nginx 入口上設定會話黏性「cookie」不起作用。

P粉936509635P粉936509635238 天前455

全部回覆(1)我來回復

  • P粉403549616

    P粉4035496162024-03-30 09:31:57

    抱歉,這完全是在轉移注意力。

    最終,問題是外部代理路由中的拼字錯誤 - 六個節點中只有兩個節點配置正確且可存取。這就是為什麼「大多數」請求返回 404 - 找不到節點。

    回覆
    0
  • 取消回覆