2026 OpenClaw Gateway: eingebaute Gesundheits-Endpunkte (/health, /ready) und Lastenausgleich — physischer Fern-Mac, Docker Compose und Kubernetes im Abgleich; Pfad-Shadowing und reproduzierbares Runbook zu falsch-negativem NotReady (Konfigurationsfragmente + FAQ)
Betriebsteams, die OpenClaw Gateway auf physischen Fern-Mac-Knoten fahren, sehen dieselbe Incident-Klasse: Probes funktionieren lokal, scheitern aber über nginx — oder Kubernetes markiert Pods als NotReady, während Compose grün wirkt. Dieses Runbook gleicht /health und /ready über Bare Metal, Docker Compose und Kubernetes ab, erklärt Pfad-Shadowing und liefert kopierbare Snippets plus eine FAQ zu falscher Readiness. Für den Docker-vs.-Bare-Metal-Kontext siehe OpenClaw auf Fern-Mac: Docker oder Bare Metal? Compose-Gesundheitsproben und FAQ; zur Latenz- und Standortlogik 2026 OpenClaw: ortsnahe Bereitstellung physischer Mac-Knoten.
Einleitung: drei Plattformen, ein Vertragsmodell
Bare-Metal-launchd, Compose-healthcheck und Kubernetes-livenessProbe/readinessProbe brauchen dasselbe semantische Modell: /health heißt „starte mich neu, wenn der Prozess hängt“, /ready heißt „Nutzertraffic nur, wenn die von mir deklarierten Abhängigkeiten nutzbar sind“. Werden diese Pfade vom Reverse-Proxy überschrieben oder vom falschen Upstream beantwortet, entstehen nicht reproduzierbare Pages und instabile Rollouts.
Die folgende Tabelle, das Sieben-Schritte-Runbook und die Snippets sind so geschrieben, dass Sie sie in Design-Reviews und Postmortems direkt zitieren können — inklusive typischer Fern-Mac-Kaltstarts (Skills, Modell-Router, Secret-Mounts).
1. Schmerzpunkte: Shadowing, Drift und Lastenausgleich-Lügen
- Pfad-Shadowing. Eine statische
location /, SPA-Fallback oder aggressivestry_fileskann für/ready200 OKmit HTML liefern, ohne OpenClaw zu erreichen. Der Pool wirkt warm; das Gateway hat die Probe nie gesehen. - Semantische Drift zwischen Plattformen. Compose markiert einen Dienst als healthy, wenn die Engine-Prüfung passt; Kubernetes kann trotzdem eine andere Revision per Service-Selektor erreichen oder ein Ingress Canary ansprechen, das Sie nicht testen wollten.
- Versteckte Stabilitäts- und Auditkosten.
/readyfür Liveness zu verwenden koppelt Abhängigkeitsausfälle an Pod-Neustarts. Auf einer Fern-Mac-Flotte zeigt sich das als flackernde Sessions, halb geschriebener Agentenzustand und lauter On-Call — nicht „nur Kubernetes“.
2. Entscheidungsmatrix: wo welche Probe laufen soll
Vor dem Einfügen von YAML in Produktion: „Wer muss was beobachten?“ — das ist die ganze Arbeit.
| Signal | Bare Mac + Reverse-Proxy | Docker Compose | Kubernetes |
|---|---|---|---|
| /health (günstig) | LB → nginx → Gateway; CDN-Cache umgehen | healthcheck gegen published port | livenessProbe.httpGet.path=/health |
| /ready (strikt) | Gleiche Kette wie Nutzer: Host + TLS; kein Static-Shadow | depends_on: condition service_healthy | readinessProbe + startupProbe für Kaltstart |
| Primärer Fehlmodus | Präfix-Location gewinnt vor proxy_pass | Published port ≠ Host-LB-Port | NetworkPolicy blockiert kubelet-Subnetz |
3. Sieben-Schritte-Abnahme-Runbook
- Aufrufer inventarisieren. Jede Health-URL aus Cloud-LB, nginx-
server_name-Block, Compose, Helm-Werten und Monitoring exportieren. Leere Zeilen sind blinde Flecken. - Shadowing beweisen. Vom Proxy-Host
curl -svH 'Host: ihre.api' https://127.0.0.1/readyund den Body gegen direktencurlauf den Gateway-Port auf Loopback diffen. - Locations vor Catch-alls pinnen. Dedizierte
location = /healthundlocation = /readymitproxy_passzum Gateway-Upstream,proxy_buffering off;undadd_header Cache-Control no-store;. - Compose: LB-Timeouts spiegeln.
interval,timeoutundretriesinnerhalb von etwa 80 % der externen LB-Werte setzen, damit Compose nicht voroptimistisch grün wird. - Kubernetes: Probes trennen. Liveness auf
/health, Readiness auf/ready;startupProbemit höheremfailureThresholdfür Modell-Router-Warm-up. - Rollout-Probe. Blue/Green oder Rolling:
kubectl get endpointsbeobachten und Gateway-Logs tailen; Traffic erst nach Flip von/readyfür die neue Revision. - Diffs archivieren. Redigierte
nginx -T-, Compose-YAML- undkubectl describe pod-Auszüge mit Zeitstempel — für das nächste False-NotReady.
4. Konfigurationsfragmente
4.1 nginx: explizite Probe-Locations (ohne Shadowing)
location = /health { proxy_pass http://openclaw_gateway; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_buffering off; add_header Cache-Control "no-store"; }
location = /ready { proxy_pass http://openclaw_gateway; proxy_http_version 1.1;
proxy_set_header Host $host; proxy_buffering off; add_header Cache-Control "no-store"; }
4.2 Docker Compose: healthcheck + Abhängigkeits-Gate
services:
openclaw-gateway:
image: ihre.registry/openclaw-gateway@sha256:…
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:18789/health"]
interval: 15s
timeout: 3s
retries: 5
start_period: 120s
edge-proxy:
depends_on:
openclaw-gateway:
condition: service_healthy
4.3 Kubernetes: startup + readiness + liveness
startupProbe:
httpGet: { path: /ready, port: http }
periodSeconds: 5
failureThreshold: 30
readinessProbe:
httpGet: { path: /ready, port: http }
periodSeconds: 10
timeoutSeconds: 3
livenessProbe:
httpGet: { path: /health, port: http }
periodSeconds: 20
timeoutSeconds: 2
port: http an den Namen von containerPort anpassen. TLS am Ingress zu terminieren heißt: Probes typischerweise auf dem Klartext-Container-Port, sofern kein Sidecar-mTLS dazwischenliegt.
5. Zitierfähige Parameter
- 18789 — gängige HTTP-Oberfläche des OpenClaw-Gateways auf Mac-Knoten; immer mit Ihrer
openclaw.jsonoder Release-Notes abgleichen, bevor LB-Templates gebacken werden. - 120 s
start_period— pragmatischer erster Wert für kalten Modell-Cache und Secret-Mount-Latenz auf Fern-Macs; nach zwei Wochen Metriken am P95 kürzen. - 3 s Readiness-
timeoutSeconds— Kompromiss zwischen langsamen Upstreams und kubelet-Aggressivität; mitfailureThresholdstatt endloser Timeouts echte Hänger sichtbar halten.
6. FAQ: reproduzierbare False Positives
Was ist Pfad-Shadowing für /health und /ready hinter nginx?
Ein breites Präfix oder SPA-Fallback beantwortet Probe-Pfade, bevor der Traffic OpenClaw erreicht. Sie sehen HTML-200, während direkter Pod-curl JSON liefert — Reihenfolge fixieren, Cache auf Probes aus, proxy_pass-Ziele prüfen.
Sollen Liveness und Readiness beide /ready aufrufen?
Nein. Liveness bleibt günstig auf /health; Readiness auf /ready steuert Traffic nur bei harten Abhängigkeiten, die Sie wirklich blockieren wollen.
Warum ist Compose healthy, während der LB die Task drainiert?
Unterschiedliche Netzwerk-Namespace und andere Host-/TLS-Pfade. Exakt den curl des LB inkl. SNI und Pfad vom LB-Subnetz oder Bastion ausführen — nicht nur im Container.
Was verursacht falsches NotReady direkt nach Deploy auf einem Fern-Mac?
Kalte Caches und Abhängigkeits-Handshakes überschreiten initiale Timeouts. startupProbe oder Compose-start_period, pro-Abhängigkeit Latenz loggen, Schwellen danach mit Evidenz verschärfen.
7. Warum Mac mini diese Komplexität sinnvoll abschließt
Gateway-Health-Semantik zählt nur, wenn der Host stabil läuft: Apple-Silicon-Mac mini-Knoten verbinden niedrige Leerlaufleistung (oft in der Größenordnung weniger Watt), leisen Dauerbetrieb und ein Unix-first-Tooling — curl, launchctl, Docker Desktop oder Colima und SSH — ohne die Treiberreibung typischer Windows-Fleets.
Gatekeeper, SIP und FileVault reduzieren Manipulationsrisiko für langlebige Agenten-Tokens neben dem Gateway. Das spielt eine Rolle, wenn /ready das Signal ist, mit dem Ihr Lastenausgleich Automation ins Internet stellt.
Wenn Sie diese Probe- und LB-Geschichte auf Hardware fahren möchten, die Sie unbeaufsichtigt lassen können, ist der Mac mini M4 eine starke Baseline für 2026 — nutzen Sie die CTA unten, um ZoneMac-Knoten zu vergleichen und mit denselben Abnahme-curls auszurollen, die Sie hier dokumentiert haben.
OpenClaw auf dedizierten Mac-Gateways betreiben?
Mieten Sie einen Fern-Mac mini mit den Netzwerk- und Uptime-Mustern dieses Runbooks — health-geprüft, SSH-bereit, für CI und Agenten gebaut.