L'application VueJS ne charge pas le fichier js dans Kubernetes
P粉936509635
P粉936509635 2024-03-29 16:00:27
0
1
483

J'ai une application VueJS exécutée dans une image Docker dans Kubernetes. Une fois que plusieurs répliques/pods existent, les clients ne peuvent pas charger l'application - de nombreux appels (mais pas tous) pour charger des fichiers renvoient 404.

Je pense que c'est parce qu'ils sont envoyés vers un pod différent de celui qui a initialement traité la demande.

Comment résoudre ce problème ?

Voici ma configuration :

  • L'application VueJS (node.js-Server) s'exécute à partir d'une image Docker dans Kubernetes.
  • Services et points de terminaison dans Kubernetes ci-dessus.
  • L'entrée nginx dans Kubernetes sert de couche externe suivante (voir ci-dessous).
  • Pare-feu haproxy pour acheminer myapp.mydomain.com/ vers l'entrée sur k8s.

Voici un exemple d'appel qui renvoie 404 : Obtenez https://myapp.mydomain.com/js/chunk-d18c0136.7a3f0664.js

Voici mes spécifications de service :

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}

Voici ma spécification d'entrée 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

Pour contourner le problème, nous configurons le pare-feu pour qu'il communique directement avec un seul Pod ou n'exécute qu'une seule réplique.

La configuration des "cookies" persistants de session sur l'entrée nginx ne fonctionne pas.

P粉936509635
P粉936509635

répondre à tous(1)
P粉403549616

Désolé, c'est une fausse piste.

En fin de compte, le problème était une faute de frappe dans le routage du proxy externe : seuls deux des six nœuds étaient configurés correctement et accessibles. C'est pourquoi "la plupart" des requêtes renvoient 404 - Node Not Found.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal