J'ai configuré un cluster Kubernetes comme suit :
- Pod Webapp (avec une Vue.js et une API, toutes deux dans chaque conteneur)
- Configuration ingress de Nginx (avec default-http-backend)
- pod de base de données (qui ne semble pas être le problème ici)
- Kube lego (pour SSL, dans un espace de noms séparé)
Quoi qu'il en soit, après avoir terminé la configuration, l'application frontale (c'est-à-dire Vue.js) n'a chargé aucun style, seulement du pur HTML + JS. En ouvrant l'onglet Réseau de Firefox, j'ai vu une erreur "502" dans le fichier CSS.
Juste pour le contexte, voici le Dockerfile de mon Vue.js :
FROM node:lts-alpine
RUN npm install http-server -g
WORKDIR /app
# copy both 'package.json' and 'package-lock.json' (if available)
COPY package*.json ./
# install project dependencies
RUN npm install
# copy project files and folders to the current working directory (i.e. 'app' folder)
COPY . .
RUN npm run build
EXPOSE 8000
CMD [ "http-server", "dist", "-c-1", "-p", "8000" ]
Et voici le journal du contrôleur Nginx (à partir de kubectl logs [nginx-controller-pod]
): https://pastebin.com/tBfPXJns (je n'ai pas pu le poster ici car il est supposé être un spam).
La plupart du temps, seules les requêtes CSS et .png renvoient 502, tandis que toutes les requêtes JS atteignent le serveur frontal.
Mon Ingress :
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-nginx
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/proxy-body-size: 200m
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/server-snippet: |
add_header 'Access-Control-Expose-Headers' 'access-token,expiry,token-type,uid,client,Access-Token,Expiry,Token-Type,Uid,Client';
spec:
tls:
- hosts:
~all-hosts~
secretName: birthplace-ssl
rules:
- host: api.example.com.br
http:
paths:
- path: /
backend:
serviceName: example-backend-service
servicePort: 9292
- host: example.com.br
http: &default
paths:
- path: /
backend:
serviceName: example-frontend-service
servicePort: 8000
- host: painel.example.com
http: *default
- host: admin.example.com
http: *default
Mon déploiement YAML est correctement configuré pour les deux services (c'est-à-dire qu'il utilise les ports 8000 et 9292).
Bizarrement Je peux accéder à n'importe lequel de ces actifs à partir d'une requête GET (externe) normale.
P.S. Au journal...
10.24.0.40 est l'IP du cluster default-http-backend.
10.24.1.3 est l'IP de ma webapp.
0 votes
Peut-être que la réécriture a tout gâché ?
0 votes
Non. Avec ou sans, même résultat.
0 votes
Ok, définissez "La plupart du temps, seules les requêtes CSS et .png renvoient 502". donc ça marche parfois ?
1 votes
Oui, et ça me dépasse, mais j'ai trouvé ce commentaire et en utilisant "nginx.ingress.kubernetes.io/service-upstream : "true"" semble résoudre le problème. Je vais continuer à tester et mettre à jour la question si cela fonctionne réellement après quelques utilisations.
0 votes
Même problème pour moi. Petite application React avec 1 route packagée avec nginx déployée sur minikube. La requête / est toujours réussie, les ressources parfois non (~40%). Parfois, les ressources css, parfois js échouent, ce qui empêche l'application de démarrer correctement. J'ai déjà essayé de faire un bilan de santé personnalisé. La solution du fil de discussion lié n'a pas fonctionné pour moi.
0 votes
@jefersonhuan l'annotation mentionnée a définitivement résolu votre problème ?
1 votes
@KoopaKiller, je n'ai pas gardé ce cluster trop longtemps mais oui, cette annotation a résolu le problème.