2026 — OpenClaw Gateway : sondes de santé intégrées (/health, /ready) et équilibrage de charge — alignement sur Mac physique distant, Docker Compose et Kubernetes ; masquage de chemins et faux « non prêt » : runbook reproductible (extraits + FAQ)
Les exploitants qui font tourner OpenClaw Gateway sur des Mac physiques distants voient souvent les mêmes incidents : les sondes réussissent en local mais échouent derrière nginx, ou Kubernetes marque les pods NotReady alors que Compose reste vert. Ce runbook aligne /health et /ready sur nu, Docker Compose et Kubernetes, explique le masquage de chemins et fournit extraits copiables plus une FAQ sur les faux positifs de readiness.
Introduction : trois orchestrateurs, un même contrat
launchd sur Mac nu, le healthcheck Compose et les livenessProbe / readinessProbe kube partagent un contrat sémantique : /health signifie « redémarrez-moi si je suis bloqué », /ready signifie « n’envoyez du trafic utilisateur que si les dépendances que j’expose sont utilisables ». Lorsque le proxy inverse ou un mauvais upstream répond à la place de la passerelle, les astreintes deviennent inexploitables et les rollouts saccadés.
Après avoir aligné les sondes, reliez la passerelle à vos clients IDE et scripts : OpenClaw Gateway en API compatible OpenAI : Cursor et scripts vers un Mac physique distant détaille Base URL, Bearer et reverse proxy. Le choix de région conditionne aussi la latence des sondes vues depuis l’Internet public : Comment choisir la région de son serveur Mac Cloud en 2026 ? Sur le même blog, les guides « surface 127.0.0.1 + tunnel » et « SSH forward vs Tailscale Serve » restent les compléments naturels pour la parité Host/TLS avant d’instrumenter le LB.
1. Points de friction : shadowing, dérive et « mensonges » de l’équilibreur
- Masquage de chemins. Un
location /statique, un fallback SPA ou untry_filesagressif peut renvoyer200 OKen HTML pour/readysans jamais joindre OpenClaw. Le pool semble chaud ; la passerelle n’a pas vu la sonde. - Dérive sémantique entre plateformes. Compose marque un service sain quand la sonde moteur réussit ; Kubernetes peut router vers une autre révision si les sélecteurs se chevauchent, ou si un Ingress envoie les sondes vers un backend canary non intentionnel.
- Coût caché d’audit et de stabilité. Réutiliser
/readypour la liveness couple les pannes de dépendances aux redémarrages de pods. Sur un parc de Mac distants, cela se traduit par du flapping Screen Sharing, des états d’agents à moitié écrits et une astreinte bruyante — pas « juste Kubernetes ».
2. Matrice : où faire tourner chaque sonde
Utilisez ce tableau en revue de conception avant de coller du YAML en production. La question est : « qui doit observer quoi ? »
| Signal | Mac nu + proxy inverse | Docker Compose | Kubernetes |
|---|---|---|---|
| /health (léger) | LB → nginx → passerelle ; contourner le cache CDN | healthcheck sur le port publié | livenessProbe.httpGet.path=/health |
| /ready (strict) | Même chaîne que Host + TLS utilisateurs ; pas d’ombre statique | depends_on: condition service_healthy | readinessProbe + startupProbe pour le froid |
| Mode de défaillance principal | La location préfixe l’emporte sur proxy_pass | Port publié ≠ port LB hôte | RBAC / NetworkPolicy bloque la sonde depuis le sous-réseau kubelet |
3. Runbook d’alignement en sept étapes
- Recenser les appelants. Exportez chaque URL de santé depuis le LB cloud, le bloc
server_namenginx, le fichier Compose, les values Helm et le monitoring ad hoc. Toute ligne vide est un angle mort. - Prouver le shadowing. Depuis l’hôte proxy,
curl -svH 'Host: votre.api' https://127.0.0.1/readyet différenciez le corps d’uncurldirect vers le port passerelle en loopback. - Épingler les locations avant les catch-all. Des
location = /healthetlocation = /readyavecproxy_passvers l’upstream passerelle,proxy_buffering off;etadd_header Cache-Control no-store;. - Compose : caler les timeouts sur le LB. Réglez
interval,timeoutetretriesdans ~80 % de ce qu’impose le LB externe pour ne pas marquer sain trop tôt. - Kubernetes : séparer les probes. Liveness sur
/health, readiness sur/ready, etstartupProbeavecfailureThresholdplus large pour le warm-up du routeur de modèles. - Répétition générale de rollout. Bleu/vert ou rolling : surveillez
kubectl get endpointsen suivant les journaux passerelle ; le trafic ne doit bouger qu’après bascule de/readysur la nouvelle révision. - Archiver les diffs. Conservez
nginx -Texpurgé, le YAML Compose et les extraitskubectl describe podhorodatés — votre futur vous remerciera au prochain faux NotReady.
4. Extraits de configuration
4.1 nginx : locations de sonde explicites (sans 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 + dépendance
services:
openclaw-gateway:
image: votre.registre/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
Adaptez port: http au nom du containerPort. Si le TLS se termine à l’Ingress, gardez les probes sur le port clair du conteneur sauf sidecar mesh imposant du TLS.
5. Paramètres prêts à citer
- 18789 — surface HTTP courante de la passerelle OpenClaw sur les nœuds Mac ; confirmez toujours via
openclaw.jsonou les notes de version avant de figer les modèles LB. - 120 s de
start_period— premier ordre de grandeur utile pour cache modèle froid et latence de montage Secret sur Mac distants ; affinez avec le P95 mesuré sur deux semaines de métriques. - 3 s de timeout readiness — compromis entre upstreams lents et agressivité du kubelet ; couplez avec
failureThresholdplutôt qu’avec des timeouts illimités qui masquent les blocages réels.
6. FAQ : faux positifs reproductibles
Qu’est-ce que le masquage de chemins pour /health et /ready derrière nginx ?
Une location préfixe large ou un fallback SPA répond aux chemins de sonde avant l’upstream OpenClaw. Vous voyez des 200 HTML alors que les curls directs sur le pod renvoient du JSON — corrigez l’ordre, désactivez le cache sur les chemins de sonde et vérifiez les cibles proxy_pass.
Liveness et readiness doivent-elles toutes deux appeler /ready ?
Non. La liveness reste bon marché sur /health ; la readiness sur /ready conditionne le trafic aux dépendances que vous acceptez comme bloquantes.
Pourquoi Compose semble healthy alors que le LB draine la tâche ?
Espaces réseau différents et chemins Host/TLS différents. Exécutez le curl exact du LB, SNI et chemin compris, depuis le sous-réseau ou bastion du LB — pas seulement depuis l’intérieur du conteneur.
Qu’est-ce qui provoque un faux NotReady juste après déploiement sur un Mac distant ?
Caches froids et poignées de main dépendantes dépassent vos timeouts initiaux. Utilisez startupProbe ou start_period Compose, journalisez la latence par dépendance, puis resserrez les seuils avec des preuves.
7. Mac mini : héberger cette complexité sans la subir
Les sémantiques de santé de la passerelle n’ont de valeur que si l’hôte reste debout : les Mac mini Apple Silicon combinent une très faible consommation au repos (souvent de l’ordre de quelques watts), un fonctionnement silencieux adapté aux bureaux et baies, et une chaîne d’outils Unix — curl, launchctl, Docker Desktop ou Colima, SSH — sans la friction pilote typique des flottes Windows.
Gatekeeper, SIP et FileVault réduisent aussi le risque de falsification pour les jetons d’agent de longue durée stockés à côté de la passerelle. Ce niveau de confiance compte lorsque /ready est le signal par lequel l’équilibreur expose votre automatisation à Internet.
Si vous voulez cette histoire de sondes et d’équilibrage sur du matériel que vous pouvez laisser sans opérateur sur site, le Mac mini M4 constitue une base 2026 solide — utilisez ensuite le bandeau ci-dessous pour comparer les nœuds ZoneMac prêts passerelle et déployer avec les mêmes curls d’acceptation que vous venez de documenter.
Prêt à exécuter OpenClaw sur des passerelles Mac dédiées ?
Louez un Mac mini distant avec les schémas réseau et de disponibilité que ce runbook suppose — SSH, sondes et CI pour agents automatisés.