跳转到内容

容器启动时缺少其凭据

Symptom

容器运行且应用程序报告密码为空、缺少 API 密钥,或对其依赖的某个服务进行身份验证失败。部署本身看起来是健康的。

Diagnose

  1. 部署是否仍引用该凭据? GET /api/v1/deployments/{name} 并读取 secrets 列表。发送更短列表的更新会替换已存储的列表——发送一个字段会直接替换它,而丢失的引用会移除凭据,且不会导致任何失败。参见 发送描述的一部分。
  2. 路径是否是存储凭据材料的路径? GET /api/v1/secrets/resources 列出了您的租户中引用的所有路径,而 GET /api/v1/secrets/resources/{name}/consumers 显示了谁读取了每个路径。
  3. 密钥是否是应用程序期望的密钥? 通过环境变量传递,键名与存储文档中的键名相同。文档中命名不同的键是不同的变量。
  4. 容器是否在凭据材料存在之前创建的? 值在容器创建时解析,因此之后写入的材料会到达下一个容器,而不是当前这个。
Odysseus 仪表板中打开的单个部署,显示“Secrets”部分,其中列出了该部署声明的每个凭据引用——可以区分解析为空的引用和从未声明的引用。

Resolve

  • 引用丢失: 请重新发送完整的 secrets 列表,包括已消失的条目。
  • 路径或键值错误: 请更正。路径可能遇到的所有拒绝情况都记录在 拒绝与修改记录中。
  • 容器部署后添加的材料: 请进行轮换,或执行任何替换容器的操作,以便 重新解析该值。
  • 期望文件: 交付仅限环境变量,且挂载请求被拒绝。请在您自己的入口点中 从环境变量渲染文件 — 参见 为部署提供凭据。

Prevent

在发送部分更新之前读取存储的列表,并根据凭据所属的对象命名凭据,这样两个部署就不会最终读取同一个密码的两个副本。