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, port3000
i lokalizacja/hello
. - wynik: moja cała aplikacja internetowa nie jest już dostępne
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? –
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