J'ai suivi le didacticiel sur l'équilibreur de charge: https://cloud.google.com/container-engine/docs/tutorials/http-balancer qui fonctionne correctement lorsque j'utilise l'image Nginx, lorsque j'essaie et utiliser ma propre image d'application si le backend passe à malsain.
Mon application redirige sur/(renvoie un 302) mais j'ai ajouté un livenessProbe
dans la définition du pod:
livenessProbe:
httpGet:
path: /ping
port: 4001
httpHeaders:
- name: X-health-check
value: kubernetes-healthcheck
- name: X-Forwarded-Proto
value: https
- name: Host
value: foo.bar.com
Mon entrée ressemble à:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: foo
spec:
backend:
serviceName: foo
servicePort: 80
rules:
- Host: foo.bar.com
La configuration du service est:
kind: Service
apiVersion: v1
metadata:
name: foo
spec:
type: NodePort
selector:
app: foo
ports:
- port: 80
targetPort: 4001
La santé du backend dans ingress describe ing
ressemble à:
backends: {"k8s-be-32180--5117658971cfc555":"UNHEALTHY"}
et les règles sur l'entrée ressemblent à:
Rules:
Host Path Backends
---- ---- --------
* * foo:80 (10.0.0.7:4001,10.0.1.6:4001)
Tous les conseils ont été grandement reçus, j'ai essayé de résoudre ce problème pendant des heures sans succès.
Mise à jour
J'ai ajouté le readinessProbe
à mon déploiement mais quelque chose semble toujours frapper/et l'entrée est toujours malsaine. Ma sonde ressemble à:
readinessProbe:
httpGet:
path: /ping
port: 4001
httpHeaders:
- name: X-health-check
value: kubernetes-healthcheck
- name: X-Forwarded-Proto
value: https
- name: Host
value: foo.com
J'ai changé mon service pour:
kind: Service
apiVersion: v1
metadata:
name: foo
spec:
type: NodePort
selector:
app: foo
ports:
- port: 4001
targetPort: 4001
Update2
Après avoir supprimé les en-têtes personnalisés du readinessProbe
, il a commencé à fonctionner! Merci beaucoup.
Vous devez ajouter un readinessProbe (copiez simplement votre livenessProbe).
C'est expliqué dans le GCE L7 Ingress Docs .
Contrôles de santé
Actuellement, tous les backends de service doivent satisfaire à l'une des conditions suivantes pour réussir les vérifications de l'état HTTP qui lui sont envoyées par l'équilibreur de charge GCE: 1. Répondez par 200 sur "/". Le contenu n'a pas d'importance. 2. Exposez une URL arbitraire en tant que sonde de disponibilité sur les modules soutenant le service.
Assurez-vous également que readinessProbe pointe vers le même port que celui que vous exposez à Ingress. Dans votre cas, c'est bien puisque vous n'avez qu'un seul port, si vous en ajoutez un autre, vous risquez de rencontrer des problèmes.
J'avais le même problème. A suivi le conseil de Tex mais a continué à voir ce message. Il s'est avéré que j'ai dû attendre quelques minutes avant d'entrer pour valider l'intégrité du service. Si quelqu'un va dans le même sens et fait toutes les étapes comme readinessProbe
et linvenessProbe
, assurez-vous simplement que votre entrée pointe vers un service qui est soit un NodePort
, et attendez un quelques minutes avant que l'icône d'avertissement jaune ne devienne verte. Consultez également le journal sur StackDriver pour avoir une meilleure idée de ce qui se passe.