2017-08-08 3 views
6

Ich verwende einen VM-Maßstab für meine Knoten-Anwendung. Meine App hat eine Aktion, die öffentlich zugänglich ist über www.mydomain.com/api/healthcheck und druckt nur einige JSON. Wenn ich meine Gesundheit Sonde konfigurieren, um TCP Protokoll zu verwenden, funktioniert alles gut und auch meine API gibt mir die erwartete JSON (und Status 200). Wenn ich nun jedoch meine Gesundheitssonde auf HTTP und path = umstelle, ist meine Website nicht mehr erreichbar (ERR_CONNECTION_TIMED_OUT ... ich nehme an, der Loadbalancer nimmt alle Instanzen heraus, weil die Gesundheitsprobe ihm sagt, dass jede Instanz ungesund ist)Health Probe markiert Instanzen als ungesund, aber die sind nicht

ich benutze nginx vor meinem Knoten app, aber ich habe auch versucht (zum Testen) meine LoadBalancer zu routen Port 80 zu konfigurieren 8080 backendport (wo mein Knoten App auf jedem Rechner läuft, so kann ich nginx Proxy vermeiden). Aber ich bekomme das gleiche Verhalten.

Ich habe keine Ideen, warum meine benutzerdefinierte Gesundheitsprüfung nicht funktioniert. Hoffe du kannst helfen.


Edit: Zum Testen habe ich die folgenden:

  • Lauf eine andere NodeJS App auf Port 3000 auf jeder VM, die gerade druckt "Hallo Welt"
  • (ohne Nginx Proxy!)
  • eine LB-Regel für Port 3000 erstellen und auch meine NSG so konfigurieren, dass 3000 für alle
  • am Anfang, ist meine Gesundheit Sonde konfiguriert tcp
  • resu zu verwenden lt: mydoamin.com:3000/hello ist verfügbar (prints hallo und liefert 200)
  • jetzt ich meine Gesundheit Sonde verwenden http -Protokoll, Port 3000 und Standort /hello konfigurieren.
  • Ergebnis: mein ganzer Web-App ist nicht mehr verfügbar
+0

Scheitert die HTTP-Integritätsprüfung auch mit Port 80? Oder nur bei Verwendung von Port 8080? Ist es auch möglich, dass Ihre Site vom http-Endpunkt zum entsprechenden https-Endpunkt umgeleitet wird? –

+0

Es scheitert auch an Port 80. Ja, es gab eine Weiterleitung zu https, aber ich habe diese Regel für Testfälle gelöscht, aber wieder bekomme ich das gleiche Verhalten. – Munchkin

Antwort

2

ich nicht Ihre Server-Code sehen kann seine so schwer herauszufinden. Wenn Sie etwas Code freigeben, wäre es einfacher.

läßt So versuchen, die Situation zu analysieren:

Ausgangsprüfblock

Verbindung zu den Instanzen

Versuche abgelaufen den folgenden Befehl von Ihrer Maschine Terminal

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

jetzt abhängig von der o tucome wir verschiedene mögliche Ursachen haben ...

Ausgangsprüfblock Ergebnis: nicht 200 Antwort

  • keine Zielseite wird auf der Instanz konfiguriert.
  • Der Wert des Content-Length-Headers in der Antwort ist nicht festgelegt.
  • Die Anwendung ist nicht konfiguriert, um Anforderungen vom Lastenausgleichsmodul zu empfangen oder um einen 200-Antwortcode zurückzugeben.

Initial Prüfergebnis: Lage direkt auf die Instanz verbinden

  • Die Instanz innerhalb der konfigurierten Antwort Timeout-Zeit zu reagieren versagt.
  • Die Instanz ist stark ausgelastet und benötigt länger als das konfigurierte Antwortzeitlimit.
  • Wenn Sie eine HTTP- oder HTTPS-Verbindung verwenden und die Systemintegritätsprüfung auf einer Zielseite ausgeführt wird, die im Ping-Pfadfeld angegeben ist (z. B. HTTP: 80/index.html), lautet die Zielseite möglicherweise Nehmen Sie länger als das konfigurierte Timeout zu reagieren.

Sonstiges: Instance wird nicht mit Verkehr von dem Load-Balancer

Problem: Die Sicherheitsgruppe für die Instanz des Verkehr aus dem Load-Balancer blockiert.

Führen Sie eine Paketerfassung für die Instanz durch, um das Problem zu überprüfen. Verwenden Sie den folgenden Befehl:

tcpdump port health-check-port 
+0

Vielen Dank! Ich werde diese Schritte befolgen und Sie wissen lassen, ob es funktioniert (wahrscheinlich morgen) – Munchkin

+1

Es funktioniert jetzt! 'curl -I private-IP-Adresse-der-Instanz: Port/Health-Check-Ziel-Seite' hat mir gesagt, dass nginx den Servernamen nicht identifizieren konnte - weil in allen meinen' Server {} '- Blöcken Ich habe diese Zeile: 'Servername * .mydomain.com;'. Jetzt habe ich das nur zu meiner nginx config hinzugefügt: 'server {listen 81; location =/my/healthcheck {...}} ', richten Sie eine NSG für Port 81 ein und konfigurieren Sie mein Health Probe um Port' 81' und Pfad '/ my/healthcheck' zu verwenden – Munchkin

+0

Gut! Ich bin froh, dass du es geschafft hast:] – EMX

Verwandte Themen