2016-09-02 35 views
11

Postępowałem zgodnie z samouczkiem równoważenia obciążenia: https://cloud.google.com/container-engine/docs/tutorials/http-balancer, który działa dobrze, gdy używam obrazu Nginx, kiedy próbuję użyć własnego obrazu aplikacji, chociaż backend przełącza się na niezdrowe.kubernetes niezdrowe ingress backend

Moja aplikacja przekierowuje na/(zwraca 302), ale dodałem livenessProbe w definicji 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 

Mój ingres wygląda następująco:

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

konfiguracja serwisowy:

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

Stan zaplecza w ingress describe ing wygląda następująco:

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

i przepisy dotyczące wnikaniem wyglądać następująco:

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

Wszelkie wskazówki znacznie otrzymanych Próbowałam pracować na to uwagę na wiele godzin bez powodzenia.

Aktualizacja

Dodałem readinessProbe do mojego rozmieszczenia ale coś nadal wydaje się hit/a ingres jest nadal niezdrowe. Moja sonda wygląda następująco:

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 

zmieniłem usługę:

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

Update2

Po wyjęciu niestandardowe nagłówki z readinessProbe to rozpoczął pracę! Wielkie dzięki.

Odpowiedz

16

Musisz dodać readyinessProbe (po prostu skopiuj swój livenessProbe). To jest wyjaśnione w GCE L7 Ingress Docs.

kontrole zdrowotne

Obecnie wszystkie backendy serwisowe muszą spełniać jeden z następujących wymogów, które przechodzą badania lekarskie HTTP wysyłanych do niej z loadbalancer GCE: 1. odpowiadać z 200 na „/”. Treść nie ma znaczenia. 2. Ujawnij dowolny adres URL jako sondę gotowości na podsluchach Usługi.

Upewnij się również, że monitor gotowości wskazuje na ten sam port, który wyświetlisz w Ingress. W twoim przypadku jest to w porządku, ponieważ masz tylko jeden port, jeśli dodasz inny, możesz wpaść w kłopoty.

+0

Właśnie zaktualizowałem mój oryginalny komentarz –

+0

Miałem ten sam problem, twoją odpowiedź, plus odpowiedź tutaj: http://stackoverflow.com/questions/42967763/kubernetes-ingress-gce-keeps-returning-502- error/42971328 pomógł mi rozwiązać ten problem – GrandVizier

0

Wystąpił ten sam problem. Postępowałem zgodnie z napiwkiem Texa, ale nadal widziałem tę wiadomość. Okazuje się, że musiałem poczekać kilka minut przed ingresją, aby potwierdzić stan zdrowia usługi.Jeśli ktoś robi to samo i wykonał wszystkie czynności, takie jak readinessProbe i linvenessProbe, upewnij się, że ingres wskazuje usługę, która jest albo NodePort, i poczekaj kilka minut, aż żółta ikona ostrzeżenia zmieni się w zieloną. Sprawdź również dziennik aplikacji StackDriver, aby uzyskać lepszy obraz tego, co się dzieje.