2016-09-02 6 views
11

Ich folgte dem Load Balancer-Tutorial: https://cloud.google.com/container-engine/docs/tutorials/http-balancer das funktioniert gut, wenn ich das Nginx-Image verwende, wenn ich versuche, mein eigenes Anwendungsbild zu verwenden, obwohl das Backend auf ungesund umschaltet.kubernetes ungesund ingress backend

Meine Anwendung umleitet auf/(eine 302 gibt), aber ich hinzugefügt Definition ein livenessProbe in der Hülse:

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 

Mein Eintritt wie folgt aussieht:

apiVersion: extensions/v1beta1 
kind: Ingress 
metadata: 
    name: foo 
spec: 
    backend: 
    serviceName: foo 
    servicePort: 80 
    rules: 
    - host: foo.bar.com 

Service-Konfiguration ist:

kind: Service 
apiVersion: v1 
metadata: 
    name: foo 
spec: 
    type: NodePort 
    selector: 
    app: foo 
    ports: 
    - port: 80 
     targetPort: 4001 

Backends Gesundheit in ingress describe ing sieht aus wie:

backends:  {"k8s-be-32180--5117658971cfc555":"UNHEALTHY"} 

und die Regeln für das Eindringen wie folgt aussehen:

Rules: 
    Host Path Backends 
    ---- ---- -------- 
    * * foo:80 (10.0.0.7:4001,10.0.1.6:4001) 

Alle Zeiger stark empfangen, ich habe versucht, dies ohne Glück stundenlang zu erarbeiten.

aktualisiert

Ich habe die readinessProbe meine Bereitstellung hinzugefügt, aber etwas scheint immer noch zu schlagen/und der Eintritt ist immer noch ungesund. Meine Sonde wie folgt aussieht:

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 

ich meinen Dienst geändert:

kind: Service 
apiVersion: v1 
metadata: 
    name: foo 
spec: 
    type: NodePort 
    selector: 
    app: foo 
    ports: 
    - port: 4001 
     targetPort: 4001 

Update2

Nachdem ich die benutzerdefinierten Header aus dem readinessProbe entfernt fing es an zu arbeiten! Danke vielmals.

Antwort

16

Sie müssen eine ReadinessProbe hinzufügen (kopieren Sie einfach Ihre LivenessProbe).

Es wird in der GCE L7 Ingress Docs erklärt.

Gesundheitschecks

Derzeit werden alle Service-Backends müssen Sie eine der folgenden Anforderungen erfüllen die HTTP-Gesundheits-Checks, um es vom Loadbalancer GCE geschickt passieren: 1. Respond mit einer 200 auf '/'. Der Inhalt spielt keine Rolle. 2. Zeigen Sie eine beliebige URL als Bereitschaftssonde für die Pods an, die den Service unterstützen.

Stellen Sie außerdem sicher, dass die ReadinessProbe auf denselben Port verweist, den Sie dem Ingress zur Verfügung stellen. In Ihrem Fall ist das in Ordnung, da Sie nur einen Port haben. Wenn Sie einen weiteren hinzufügen, können Sie Probleme bekommen.

+0

Ich habe gerade meinen ursprünglichen Kommentar aktualisiert –

+0

Ich hatte das gleiche Problem, Ihre Antwort, plus die Antwort hier: http://stackoverflow.com/questions/42967763/kubernetes-ingress-gce-keeps-returning-502- Fehler/42971328 hat mir geholfen, dies zu lösen – GrandVizier

0

Ich hatte das gleiche Problem. Folgte dem Tex-Tipp, sah aber diese Nachricht weiter. Es stellte sich heraus, dass ich einige Minuten warten musste, bevor ich einstieg.Wenn jemand das gleiche tut und alle Schritte wie readinessProbe und linvenessProbe ausführt, stellen Sie sicher, dass Ihr Eindringen auf einen Dienst verweist, der entweder NodePort ist, und warten Sie ein paar Minuten, bis das gelbe Warnsymbol zu einem grünen Symbol wird. Überprüfen Sie außerdem den StackDriver, um eine bessere Vorstellung von dem zu bekommen, was vor sich geht.

Verwandte Themen