部署指南 2026-04-23 约 13 分钟

2026 年 OpenClaw Gateway 内置健康探针(/health、/ready)与负载均衡:远程物理 Mac 裸机、Docker Compose 与 Kubernetes 的对齐验收、路径 shadowing 与误报未就绪的可复现 Runbook(配置片段 + FAQ)

SRE 与平台工程在把 OpenClaw Gateway 同时跑在 远程物理 Mac 裸机Docker ComposeKubernetes 时,常被「四层 LB 与七层反代各说各话、/ready 被 location 抢走、以及 kubelet 探针与真实客户端 Host/TLS 路径不一致」拖进通宵。本文给出三轨道对齐矩阵七步可签字 Runbook、可直接粘贴的 K8s/Compose/反代片段,以及针对 误报未就绪 的分诊表与 FAQ

2026 年 OpenClaw Gateway 健康探针与负载均衡对齐验收

1. 导语:为什么「探针绿」不等于「可接流量」

/health/ready 若缺少明确契约,负载均衡器、Ingress 与 kubelet 往往会各自挑选「最容易绿」的路径:有的只验证 TCP 端口打开,有的命中了反代上的静态页,还有的带着错误的 Host 头直接拿到 200,却与网关真实路由无关。OpenClaw Gateway 在加载 workspace、skills 与上游模型路由时存在冷启动窗口,这会把「进程已监听」与「可接业务流量」拉开数十秒甚至更久。

本文把验收拆成可复制的证据链:语义冻结路径不被 shadow探针源与 bind 模式一致Compose depends_on 与 K8s readiness 同源。若你还在评估多区域物理 Mac 流水线的稳定性基线,可参考 跨国 notarytool 交付里关于节点选择与长尾阈值 的写法,把健康探针纳入同一类「可签字」证据。

下文含对比表七步 RunbookYAML/Compose 片段FAQ;你可按章节跳转。

2. 三类痛点:语义混用、路径 shadowing、探针源与 bind 不一致

  1. 语义混用与隐性成本:把重查询或依赖外部网络的检查塞进 /health,会导致 liveness 误杀;反过来把 /ready 实现得过轻,又会在滚动发布时把未warm副本接进 LB,放大 5xx 与队列堆积。
  2. 路径 shadowing 与审计风险:更泛化的 location / 或 Ingress 默认后端抢在网关规则之前命中,监控看到 200,但业务路径仍指向旧静态资源;审计上难以解释「为何健康与告警打架」。测试机型与系统版本不一致也会污染基线,关于 Sequoia 测试机租赁的决策 可作为对照阅读。
  3. 稳定性与权限边界:裸机上 launchd 的环境变量与交互式 SSH 会话不一致,探针脚本引用到错误 HOME;K8s 上 kubelet 探针与 VPC LB 健康检查源网段不同,NetworkPolicy 放行其一却拦截其二,表现为「调度已就绪但外部 LB 仍摘流」。

3. 决策矩阵:裸机、Compose、Kubernetes 如何对齐验收

用一张表统一「谁在什么约束下负责哪类健康信号」,避免三套脚本各写各的。

维度 远程物理 Mac 裸机(launchd) Docker Compose Kubernetes
/health 语义 launchd 周期脚本或 curl -fsS 本机环回,验证事件循环存活 healthcheck.test 指向容器内环回或 bridge IP,与 compose 网络一致 liveness HTTP GET /health 或 TCP Socket,避免重依赖
/ready 语义 仅在配置与关键依赖 OK 时返回 200;与反代 upstream 健康一致 depends_on: condition: service_healthy 对齐同 URL readiness 指向 /ready,配 startupProbe 覆盖冷启动
负载均衡视角 本机或边缘反代终止 TLS;LB 健康检查需带与业务一致 SNI/Host compose 前再挂边缘 LB 时,注意 published port 与反代 upstream 端口对齐 Service/Ingress 与外部云 LB 各自维护成员池,须双路径记录
路径 shadowing 风险 本机 nginx/Caddy 多个 server 块顺序错误 sidecar 反代与 app 容器路径冲突 Ingress 多规则优先级、Canary 与默认后端抢占
推荐签字产物 plist + 两段 curl 输出(直连与经反代) docker compose ps 与健康日志截图 kubectl get endpoints 与探针事件时间线

4. 七步落地 Runbook(含配置片段)

  1. 冻结契约:在变更单写明 /health/ready 的状态码、JSON 字段(例如 okdeps)、最大响应时间与允许的短暂 503 窗口。
  2. 消除路径 shadowing(nginx 片段示意):将精确路径放在泛化规则之前。
    # 精确路径优先,再落到 /
    location = /health { proxy_pass http://openclaw_gateway; }
    location = /ready  { proxy_pass http://openclaw_gateway; }
    location / {
      # 其他站点或静态资源
    }
  3. Kubernetes 探针片段(请按端口与路径替换):
    startupProbe:
      httpGet:
        path: /ready
        port: 18789
      failureThreshold: 30
      periodSeconds: 2
    readinessProbe:
      httpGet:
        path: /ready
        port: 18789
      periodSeconds: 5
      timeoutSeconds: 2
    livenessProbe:
      httpGet:
        path: /health
        port: 18789
      periodSeconds: 10
      timeoutSeconds: 2
  4. Docker Compose 健康检查与依赖:
    services:
      openclaw-gateway:
        image: your.repo/openclaw-gateway@sha256:...
        healthcheck:
          test: ["CMD", "curl", "-fsS", "http://127.0.0.1:18789/ready"]
          interval: 10s
          timeout: 3s
          retries: 5
          start_period: 60s
      edge:
        depends_on:
          openclaw-gateway:
            condition: service_healthy
  5. 对齐 bind 与探针源:若网关配置为 bind=lan,避免 kubelet 只验证「进程存在」而 LB 仍指向旧成员;把云厂商健康检查源网段加入 NetworkPolicy/安全组白名单,并在变更单附「LB→节点→Pod」与「Pod 内自测」两组结果。
  6. 双路径对照与摘流演练:滚动发布前后各执行一次:直连 Pod IP、经 ClusterIP、经 Ingress 域名;记录 /ready 返回体差异。若与你团队在 Kubernetes 上归档的 bind=lan、Service 与 NetworkPolicy 对照清单一并执行,可快速判断是否为网络层而非应用层回归。
  7. 误报未就绪复现包:在实验环境故意把反代 location /ready 指到静态 200 页,再观察 Prometheus/云监控「全绿」与业务 5xx 分叉;把修复 diff(调整 location 顺序或改为 location = /ready)附在 RCA 模板中,避免同类事故二次发生。

5. 可引用阈值与参数清单

  • 冷启动宽限:若网关加载 skills 平均 25–40s,startupProbe 失败阈值 × 周期间隔应覆盖 P99 冷启动 + 20% 缓冲。
  • readiness 周期:生产常用 3–10s;与外部 LB 检查周期对齐,避免出现「K8s 已就绪但 LB 仍 30s 才摘流」的窗口。
  • 超时分层:建议 liveness 超时 < readiness 超时 < 客户端超时,形成清晰洋葱模型,避免最外层先熔断掩盖根因。
  • 滚动最大不可用:双副本场景下 maxUnavailable: 0maxSurge: 1 组合更利于与 /ready 严格耦合;需在变更单声明短暂容量上限。

6. FAQ:误报未就绪与负载均衡

外部 LB 健康检查始终红,但 Pod 内 curl /ready 正常?

优先核对安全组/ACL 是否放行 LB 源网段到 NodePort/Ingress Controller;其次核对 Host/SNI 是否与证书和路由规则一致;最后确认路径未被 shadow 到静态页。

Compose 健康但 K8s 仍 NotReady?

对比两者是否使用同一 URL(HTTP vs HTTPS)、同一端口与同一 Host;K8s 默认不带业务域名 Host 头时,若应用强制虚拟主机路由,会返回非 200;可在探针增加 httpHeaders 或改用 exec 探测。

是否应该把模型上游延迟算进 /ready?

不建议把「每次请求都波动」的外部延迟硬耦合进就绪;可拆成子检查:配置加载、磁盘、DNS、证书与本地队列深度。对外部模型可用降级路由或熔断计数,在 metrics 中暴露而不是让 /ready 长期 503。

裸机上磁盘休眠导致首次 /ready 超时怎么写进基线?

在远程 Mac 上记录「冷启动后第一次」与「稳定运行 30 分钟后」两组延迟;必要时为 launchd 探针增加 ThrottleInterval 或在系统层关闭磁盘休眠,并在变更单注明功耗权衡。

7. 在 Mac mini 上做「黄金对照」为什么更划算

负载均衡与探针问题往往同时涉及TLS、Host 路由与进程绑定三类状态;在 macOS 上你可以用原生工具链快速复现而无需先搭完整集群。把同 digest 的 OpenClaw Gateway放在 Mac mini M4 上跑通 launchd 与反代基线,再映射到 Compose 与 Kubernetes,能显著减少「只在集群里才暴露」的路径 shadowing 与探针源差异。

Apple Silicon 的统一内存在长时间网关进程下通常比同价位小主机更稳,待机功耗约 4W 量级适合作为 7×24 健康探针实验节点;Gatekeeper 与 SIP 也降低了边缘节点被恶意替换二进制带来的隐性风险。对于需要同时对照裸机与编排环境的团队,一台静音、低功耗、长期运行稳定的 Mac mini M4 是非常划算的对照台。

如果你希望把本文 Runbook 落在真实硬件上快速复现,Mac mini M4 是目前兼具性价比与稳定性的起点,现在即可作为标准对照节点入手验证。

限时优惠

用远程 Mac mini 对齐探针与负载均衡基线

同版本网关先在 macOS 上签字,再推进 Compose/K8s,减少路径 shadowing 类通宵事故。

物理节点 低功耗 Unix 工具链
macOS 云端租赁 超低价限时优惠
立即购买