搜索

首页  >  问答  >  正文

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粉936509635269 天前477

全部回复(1)我来回复

  • P粉403549616

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

    抱歉,这完全是在转移注意力。

    最终,问题是外部代理路由中的拼写错误 - 六个节点中只有两个节点配置正确且可访问。这就是为什么“大多数”请求返回 404 - 找不到节点。

    回复
    0
  • 取消回复