Die VueJS-Anwendung lädt die JS-Datei nicht in Kubernetes
P粉936509635
P粉936509635 2024-03-29 16:00:27
0
1
460

Ich habe eine VueJS-Anwendung, die in einem Docker-Image in Kubernetes ausgeführt wird. Sobald mehrere Replikate/Pods vorhanden sind, können Clients die Anwendung nicht laden – viele (aber nicht alle) Aufrufe zum Laden von Dateien geben 404 zurück.

Ich denke, das liegt daran, dass sie an einen anderen Pod gesendet werden als den Pod, der die Anfrage ursprünglich bearbeitet hat.

Wie kann dieses Problem gelöst werden?

Das ist mein Setup:

  • VueJS-Anwendung (node.js-Server) wird von einem Docker-Image in Kubernetes ausgeführt.
  • Dienste und Endpunkte in Kubernetes oben.
  • Der Nginx-Ingress in Kubernetes dient als nächste äußere Schicht (siehe unten).
  • haproxy-Firewall zur Weiterleitung von myapp.mydomain.com/ zum Eingang auf k8s.

Hier ist ein Beispielaufruf, der 404 zurückgibt: Holen Sie sich https://myapp.mydomain.com/js/chunk-d18c0136.7a3f0664.js

Das ist mein Leistungsverzeichnis:

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}

Dies ist meine Nginx-Eintragsspezifikation:

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

Um dieses Problem zu umgehen, konfigurieren wir die Firewall so, dass sie direkt mit nur einem Pod kommuniziert oder nur ein Replikat ausführt.

Das Setzen von Session-Sticky-Cookies auf Nginx-Ingress funktioniert nicht.

P粉936509635
P粉936509635

Antworte allen(1)
P粉403549616

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage