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 :
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.
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.