在 Kubernetes 集群中配置 DeepSeek API Key,最稳妥的方式是将其存入 K8s Secret 对象,并通过环境变量或卷挂载注入到 Pod 中,同时配合 RBAC 权限控制和密钥轮换机制,避免明文硬编码。
先说结论:生产环境严禁将 API Key 写在代码或 ConfigMap 中,必须使用 Secret 资源管理,并限制访问权限。
- 先判断:确认密钥类型,生产环境建议使用权限受限的子密钥而非主密钥。
- 优先做:启用 K8s Secret 加密存储(Encryption at Rest),防止 etcd 数据泄露。
- 再验证:通过审计日志确认密钥未被未授权 Pod 或用户访问。
命令速用版
以下是创建 Secret 并在 Deployment 中引用的基础命令,适用于快速测试环境:
kubectl create secret generic deepseek-api-key `--from-literal`=api-key="YOUR_API_KEY" -n <namespace>
在 Deployment YAML 中引用:
env:
- name: DEEPSEEK_API_KEY
valueFrom:
secretKeyRef:
name: deepseek-api-key
key: api-key为什么会这样
API Key 本质是身份认证凭证,一旦泄露可能导致额度被盗用或数据风险。Kubernetes 的 Secret 对象默认仅进行 Base64 编码而非加密,若集群 etcd 未开启加密存储,管理员可直接读取明文。此外,DeepSeek 平台建议对密钥进行权限分级和 IP 白名单限制,单纯依靠 K8s 存储不够,需结合平台侧配置。
分步处理
1. 创建受限密钥
在 DeepSeek 开发者控制台创建子密钥(Sub Key),限制仅访问必要的 API 接口,并设置 IP 白名单为集群出口 IP。
2. 写入 K8s Secret
使用命令行或 YAML 创建 Secret,避免通过 Git 提交包含密钥的文件。
3. 配置 Pod 引用
在 Deployment 中通过 env 或 volumeMounts 挂载,推荐使用环境变量方式,减少文件系统权限复杂度。
4. 开启审计与轮换
启用 K8s 审计日志监控 Secret 访问行为,并制定定期轮换密钥的计划,旧密钥失效后再删除 Secret。
怎么验证是否生效
进入 Pod 内部检查环境变量是否包含密钥值(注意生产环境谨慎操作):
kubectl exec -it <pod-name> -n <namespace> -- env | grep DEEPSEEK
观察应用日志,确认 API 调用返回状态码为 200 且无鉴权错误。同时检查 DeepSeek 控制台的调用记录,确认来源 IP 符合白名单设置。
常见坑
1. 误用 ConfigMap:ConfigMap 不适合存储敏感信息,权限控制不如 Secret 严格。
2. 密钥提交至 Git:即使是在私有仓库,也应使用 .gitignore 忽略包含密钥的配置文件。
3. 主密钥滥用:所有环境共用同一个主密钥,一旦测试环境泄露,生产环境也将受影响。
4. 忽略 etcd 加密:默认情况下 K8s Secret 在 etcd 中是明文存储的,需配置 EncryptionConfiguration。
参考来源
- DeepSeek API Key 全解析:从获取到安全管理的最佳实践
- DeepSeek 本地化部署:API Key 管理与安全实践指南
- DeepSeek API Key 配置全流程解析:从生成到调用的完整指南 - 百度开发者中心