VueJS 應用程式未在 kubernetes 中載入 js 文件
P粉936509635
P粉936509635 2024-03-29 16:00:27
0
1
466

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

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

如何解決這個問題?

這是我的設定:

  • VueJS 應用程式 (node.js-Server) 從 kubernetes 中的 Docker 映像運行。
  • 上面的 kubernetes 中的服務和端點。
  • Kubernetes 中的 nginx 入口作為下一個向外層(見下文)。
  • haproxy 防火牆,以便將 myapp.mydomain.com/ 路由到 k8s 上的入口。

這是一個傳回 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粉936509635
P粉936509635

全部回覆(1)
P粉403549616

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板