多節點協作下組態為何漂移
- 單一真實來源斷裂:臨時改一台
gateway.proxy.yaml未發佈到同角色網關,協作愈密漂移愈快。 - 執行期在版控外:LaunchAgent 或殼層注入代理端點未進合併請求,稽核斷鏈。
- 靜默半失敗:驗證未過仍接流,症狀像上游逾時或四零三,難判是否裂腦政策。
治理要點:每節點跑同一套嚴格 JSON,變更窗比對 mesh_node_id 與 policy_revision。
決策矩陣:代理執行期姿態
| 作法 | 適用情境 | 共享 MeshMac 風險 |
|---|---|---|
| fail-open 重載 | 單租戶實驗室 | 一錯即放寬整池出站 |
| fail-closed+補丁/上游白名單 | 正式網格、扇入、Webhook | 需發佈紀律與 JSON;半徑可控 |
| 僅文件、未綁執行期 | 演練教材 | 行程式仍用舊表,假安全 |
可複現步驟與指令
一、釘選 Node。各主機 node -v 統一二十二或二十 LTS主線;主版本混用會牽動 TLS 與追蹤行為,易被誤判為代理漂移。
二、安裝一致。釘 tarball 或內部頻道,變更單附 openclaw version。拓樸見多節點部署指南。
三、檢查點甲。改 YAML/plist 前先快照目錄作回滾原點。
mkdir -p .meshmac-checkpoints/2026-04-25-gateway
cp gateway.proxy.yaml .meshmac-checkpoints/2026-04-25-gateway/
cp com.openclaw.gateway.plist .meshmac-checkpoints/2026-04-25-gateway/ 2>/dev/null || true
四、fail-closed 區塊。proxy.runtime.fail_closed 為真;列舉 allowed_patch_channels、allowed_upstream_hosts;禁萬用字元重載 URI;解析錯誤應拒絕啟動。權杖見綁定輪替,勿讓除錯埠與網關 listener 重疊。
五、doctor 後再以嚴格模式輸出 JSON。
openclaw gateway doctor --json | tee /tmp/gw-doctor.json
openclaw gateway validate --config ./gateway.proxy.yaml --strict --json | tee /tmp/gw-validate.json
六、埠與權杖。自省綁 127.0.0.1;Webhook 另埠+ACL。Bearer 走鑰匙圈/秘密句柄與環境注入,勿寫進共用庫 YAML。
驗證 JSON 與節點對齊
僅當閘道全過時 ok 為真。下列 validate 摘要便於日誌與告警綁定:
{
"ok": true,
"mesh_node_id": "meshmac-pool-7",
"policy_revision": "gateway-proxy@2026-04-25.3",
"fail_closed": true,
"allowed_upstream_hosts": ["api.meshmac.internal", "hooks.slack.com"],
"deny_reason": null
}
多節點以 jq 排序後再 diff,避免鍵序掩蓋漂移:
for id in gw-a gw-b gw-c; do
ssh "$id" 'openclaw gateway validate --config /etc/openclaw/gateway.proxy.yaml --strict --json'
done | jq -s 'sort_by(.mesh_node_id)' > /tmp/all-gw.json
jq -c '.[] | {mesh_node_id, policy_revision, fail_closed}' /tmp/all-gw.json
缺欄或 policy_revision 與工單不符即視為漂移,暫停擴流至 JSON 一致。
回滾檢查點與稽核
檢查點乙:灰度通過後複製 YAML 加 .ok。異常時回滾:還原甲、重載單元、各節點重跑 validate --strict --json 至全 ok,再依負載與容錯漸進開流。工單記操作者以利稽核。
可引用要點
- 驗證輸出應含
mesh_node_id、policy_revision、fail_closed供缺欄告警。 - Node LTS 對齊影響 OpenSSL 預設套件,代理事故時減少誤判。
- 補丁白名單釘版或雜湊;共享機避免執行期
latest。
配額一併看限流與併發,免與工作階段上限衝突。