VueJS 应用程序未在 kubernetes 中加载 js 文件
P粉936509635
P粉936509635 2024-03-29 16:00:27
0
1
468

我有一个 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 - 找不到节点。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板