2017-08-08 12 views
6

Używam zestawu skali VM dla aplikacji mojego węzła. Moja aplikacja ma działanie, które jest publicznie dostępne przez www.mydomain.com/api/healthcheck i wyświetla tylko niektóre json. Po skonfigurowaniu sondy zdrowia do korzystania z protokołu TCP wszystko działa poprawnie, a także mój api zwraca mi oczekiwany json (i status 200). Jednak, kiedy przełączam teraz moją sondę zdrowia na HTTP i ścieżkę = /api/healthcheck, moja strona internetowa nie jest już dostępna (ERR_CONNECTION_TIMED_OUT ... Przypuszczam, że loadbalancer usuwa wszystkie wystąpienia, ponieważ sonda zdrowia mówi mu, że każde wystąpienie jest niezdrowe)Sonda zdrowia oznacza instancje jako niezdrowe, ale nie są to

Używam nginx przed aplikacją mojego węzła, ale próbowałem też (do testowania) skonfigurować mój LoadBalancer, aby przekierować port 80 na backendport 8080 (gdzie moja aplikacja węzła działa na każdym komputerze, więc mogę uniknąć proxy nginx). Ale mam takie samo zachowanie.

Nie mam pomysłów, dlaczego moja niestandardowa kontrola stanu nie działa. Mam nadzieję, że możesz pomóc.


Edit: Do testowania, zrobiłem co następuje:

  • metę inny nodejs aplikacji na porcie 3000 na każdej maszynie wirtualnej, która tylko drukuje "Hello World"
  • (bez proxy nginx!)
  • utworzyć regułę dla portu 3000 LB, a także skonfigurować mój NSG, aby umożliwić: 3000 dla wszystkich
  • na początku, moja sonda zdrowie jest skonfigurowany do korzystania tcp
  • resu LT: mydoamin.com:3000/hello jest dostępne (druki cześć i zwraca 200)
  • teraz skonfigurować moja sonda zdrowie używać http -protocol, port 3000 i lokalizacja /hello.
  • wynik: moja cała aplikacja internetowa nie jest już dostępne
+0

Czy kontrola stanu HTTP kończy się niepowodzeniem, nawet przy użyciu portu 80? Lub tylko przy użyciu portu 8080? Czy jest możliwe, że witryna ma przekierowanie z punktu końcowego http do równoważnego punktu końcowego https? –

+0

Nie powiedzie się również na porcie 80. Tak, było przekierowanie do https, ale usunąłem tę regułę dla przypadków testowych, ale znowu mam to samo zachowanie. – Munchkin

Odpowiedz

2

nie widzę kodu serwera, więc jej trudne do rozszyfrowania. Po udostępnieniu kodu byłoby łatwiej.

Więc spróbujmy przeanalizować sytuację:

wstępną kontrolę

Podłączenie do instancji wygasła

usiłuje wykonać następujące polecenie od swoich maszyn zaciskowych

curl –I private-IP-address-of-the-instance:port/health-check-target-page 

teraz w zależności od tucome mamy różne możliwe przyczyny ...

Początkowa Sprawdź Wynik: non-200 odpowiedzi

  • nr strona docelowa jest skonfigurowana na przykład.
  • Wartość nagłówka Content-Length w odpowiedzi nie jest ustawiona.
  • Aplikacja nie jest skonfigurowana do odbierania żądań z modułu równoważącego obciążenie lub do zwracania kodu odpowiedzi 200.

Początkowa Sprawdź Rezultat: w stanie połączyć się bezpośrednio do instancji

  • Instancja nie udaje się odpowiedzieć w ciągu skonfigurowanego odpowiedź zadanym czasie.
  • Wystąpienie jest obciążone znacznym obciążeniem i odpowiedź trwa dłużej niż ustawiony limit czasu odpowiedzi.
  • Jeśli używasz połączenia HTTP lub HTTPS, a sprawdzenie poprawności jest wykonywane na stronie docelowej określonej w polu ścieżki ping, (na przykład HTTP: 80/index.html), strona docelowa może być pobieranie dłużej odpowiadać niż skonfigurowany limit czasu.

Inne: Instancja nie odbiera ruch z równoważenia obciążenia

Problem: grupa zabezpieczeń dla instancji blokuje ruch z równoważenia obciążenia.

Wykonaj przechwycenie pakietu na instancji w celu sprawdzenia problemu. Użyj następującej komendy:

tcpdump port health-check-port 
+0

Dziękujemy! Pójdę za tymi krokami i dam ci znać, jeśli to zadziała (prawdopodobnie jutro) – Munchkin

+1

Działa teraz! 'curl -I prywatny adres IP-instancji: port/health-check-target-page' powiedział mi, że nginx nie mógł zidentyfikować nazwy serwera - ponieważ we wszystkich moich' server {} '-blocks Mam tę linię: 'nazwa_serwera * .mydomain.com;'. Teraz dodałem to do mojej konfiguracji nginx: 'server {listen 81; location =/my/healthcheck {...}} ', skonfiguruj NSG dla portu 81 i skonfiguruj moją sondę zdrowia do używania portu' 81' i ścieżki '/ my/healthcheck' – Munchkin

+0

Dobrze! Cieszę się, że udało ci się:] – EMX

Powiązane problemy