疑难解答
常见的故障模式以及如何恢复。
以下是你最有可能遇到的故障模式,以及如何度过 其中每一个。
端点卡在 Pending
症状: 一个端点在创建时于 Pending 停留超过几秒。
控制台不显示任何错误;CLI 显示相同的状态。
可能原因: 计算 pod 无法被调度。最常见的 原因是集群压力(没有节点有请求的 CPU 或内存 空闲)或一个过期的镜像拉取凭据。两者都是运维方侧的问题。
该怎么做:
- 等待 60 秒。瞬时压力通常在另一个 端点挂起后就会消散。
- 如果它没有消散,删除该端点并重新创建。控制 平面会在另一个节点上重试调度。
- 如果重新创建也落在
Pending,说明集群不健康。在 GitHub 跟踪器 提交一个报告, 附上端点 id 和挂钟时间。
首次连接时出现 FATAL: endpoint unavailable
症状: psql 在对一个全新创建的端点的第一次连接时,
或在长时间空闲之后,返回 FATAL: endpoint unavailable。
可能原因: 冷启动竞态。端点状态为 Stopped,
你的数据包唤醒了它,但 Postgres 在你的客户端放弃时
仍在将 WAL 重放到分支 HEAD。
该怎么做: 重试连接。冷启动通常在
300–500 毫秒内完成,但一个全新创建项目的第一次唤醒,
或 24 小时以上空闲之后的一次,在 pageserver
页面缓存预热期间可能需要 10–30 秒。如果你允许至少
一次重试,大多数驱动都能容忍这一点;原始的 psql 默认不会重试。
# psql with one explicit retry
for i in 1 2; do psql "$URI" -c '\q' && break; sleep 5; done如果端点在 30 秒后仍然不可用,pod 本身 可能已经失败 —— 在控制台中检查状态并参照 上面的 Pending 指引。
从一个新 IP 连接被拒绝 / 超时
症状: 一个之前连接正常的客户端在移动到新网络后 被拒绝或超时,或者一个全新预置的主机根本无法到达 项目。
可能原因: 项目有一个 IP 白名单, 而新客户端的地址在每个列出的 CIDR 之外。未列入白名单的 来源会在代理处被拒绝,且该阻断覆盖唤醒路径。
该怎么做: 添加客户端的 CIDR(keon ip-allow add <cidr>)或
清空列表,然后等待约 30 秒让更改传播到
代理。
keon connection-string 返回 branch_not_found
症状:
$ keon connection-string my-feature --project prj_abc...
Error: branch_not_found: my-feature……但该分支在控制台中存在。
可能原因: 名称与你所定位项目中的某个分支不匹配 ——
通常是拼写错误,或错误的 --project。CLI 会按 id 或按名称解析
一个分支,无论你是将其作为位置参数还是通过
--branch 传入,因此一个确实存在的名称无论哪种方式都会解析。
该怎么做: 确认分支名称和项目:
keon branches list --project prj_abc...
keon connection-string my-feature --project prj_abc...登录返回 access_denied
症状: Google 或 GitHub OAuth 完成,但控制台
重定向到一个引用 access_denied 的错误页面。
可能原因: 在我们接纳新账户期间,登录可能被一个 邮箱白名单门控。如果你的地址尚未被启用,登录 回调会拒绝它。
该怎么做: 联系你的运维方以启用你的地址。一旦 它被加入白名单,登录会在下一次尝试时正常完成。
控制台会话中途过期
症状: 控制台工作一段时间,然后突然在每个 API 调用上 返回 401,直到你登出并重新登录。
可能原因: 由 cp 签名的 JWT 已过期且其刷新窗口已
失效。控制台铸造一个短生命周期的 JWT(约 15 分钟),并且在
你活跃期间,在后台针对 /v1/auth/refresh 刷新它。刷新
窗口固定为自登录起 12 小时:一个活跃会话
会无限期地续期,但一个在该窗口之后被搁置未动的标签页
将不再能刷新。
该怎么做: 登出并重新登录。对于无头或长期运行的
自动化,使用一个 nsk_ API 密钥而非浏览器会话 —— API
密钥不会过期且需显式吊销。参见 身份验证。
在哪里提交缺陷
对于此处未涵盖的任何内容:
- 产品缺陷和功能请求: GitHub 跟踪器。
- 安全漏洞:安全 —— 绝不在 公开跟踪器上提交。
具体的复现步骤、受影响的 id(项目、分支、端点), 以及一个挂钟时间戳,会大幅缩短往返时间。