写入被拒绝,且该请求并非来自您
Symptom
Diagnose
- 确认是平台而非镜像问题。 阅读代码,而非说明文本。
image_not_found是一个已确认不存在的镜像。registry_credential_store_unavailable是控制平面表示 它无法进行检查。 - 询问控制平面自身状态。
GET /healthz以一行回复:它报告consul not configured表示控制平面启动时完全没有键值存储客户端,consul unhealthy表示它曾有客户端但后来丢失了。这是两种不同的故障, 需要不同的修复方法,因此该端点会区分它们。 - 要获取比结论更多的信息,
GET /api/v1/cluster/health将平台分解为组件, 并为键值存储提供独立状态 —unavailable表示“Consul 客户端未配置”,或unhealthy表示“Consul 已断开连接”。平台管理员可以阅读它;这与 仪表板集群健康状态渲染的视图相同。 - 如果显示未配置,需要检查控制平面启动时使用的地址 —
ODYSSEUS_CONSUL_ADDRESS,或它覆盖的consul.address设置。一个 启动时没有配置地址的控制平面不会自行在之后获取它。 - 如果显示已断开连接,则存储已配置但当前无法访问:请检查 Consul
容器是否正在运行,以及控制平面是否可以通过给定地址访问它。仅
重启存储本身不足以证明控制平面已重新连接 — 之后请再次阅读
/healthz,而不是假设。
Resolve
- 作为调用方: 无需操作,这是诚实的答案。一旦平台报告健康状态,即可重试相同的请求。由于未发生任何写入操作,因此不存在需要撤销的半完成更改,也没有容器受到干扰。
- 作为未配置的操作员: 在控制平面的配置中设置键值存储地址并重启它。不要通过关闭镜像检查来绕过此问题——该检查的存在是因为,如果没有它,一次被接受的写入会先拆除一个健康的容器,然后才发现镜像无法拉取。
- 作为断开连接的操作员: 恢复存储,然后在
/healthz上确认控制平面已重新连接,之后再告知任何人平台已恢复。一旦连接真实建立,拒绝状态会自动清除。
Prevent
对集群健康状况的键值存储组件发出警报,而不仅仅是监控控制平面的进程是否运行。处于此状态的控制平面可以响应读取请求、提供仪表盘服务,并且看起来完全正常,但却拒绝所有部署的写入操作——因此,“服务正在运行”并不能证明任何人都可以进行部署。