【发布时间】:2019-05-10 06:39:42
【问题描述】:
我已经获得了一个 Redhat OpenShift 在线入门 vps,用于托管我的 discord 机器人。我已经将它上传到 github,当然要减去我的不和谐令牌和其他 API 密钥:^)
如何让 OpenShift 使用存储和读取客户端机密? 如果有帮助,我正在使用 nodejs8 框架。
【问题讨论】:
标签: node.js github openshift app-secret
我已经获得了一个 Redhat OpenShift 在线入门 vps,用于托管我的 discord 机器人。我已经将它上传到 github,当然要减去我的不和谐令牌和其他 API 密钥:^)
如何让 OpenShift 使用存储和读取客户端机密? 如果有帮助,我正在使用 nodejs8 框架。
【问题讨论】:
标签: node.js github openshift app-secret
秘密在 GitHub 等源代码版本控制托管服务中没有位置。
关于 OpenShift,它包括 Secrets,一个可在其中注入机密信息的 64 位编码配置映射。
但长期机密信息存储(将注入 OpenShift 机密)应该存储在适当的 Vault 中。
例如,Hashicorp Vault,如文章“Managing Secrets on OpenShift – Vault Integration”中所述
其余部分描述了该解决方案,但即使您不使用该特定主机,总体思路(外部保险库类型存储)仍然存在:
- Init Container(在 Pod 的主容器启动之前运行)通过加密连接从 Vault Controller 请求wrapped token。
封装的凭据允许您传递凭据,而无需任何中间人实际查看凭据。- Vault 控制器从 Kubernetes API 服务器检索 pod 详细信息。
- 如果 pod 存在并包含 vaultproject.io/policies 注释,则 Vault 控制器调用 Vault 并生成一个唯一的包装令牌,该令牌可以访问注释中提到的 Vault 策略。此步骤需要信任 pod 作者以习惯于正确的策略。生成的令牌具有可配置的 TTL。
- Vault 控制器使用通过加密连接从 Kubernetes API 获得的 pod IP “回调” Init 容器,并将新创建的包装令牌传递给它。请注意,Vault Controller 不信任 pod,它只信任主 API。
- Init Container 解包令牌以获得允许访问凭据的 Vault 令牌。
- Vault 令牌被写入两个容器 (emptyDir) 之间共享的卷中的一个已知位置,并且 Init Container 退出。
- 主容器从令牌文件中读取令牌。现在主容器可以使用令牌来检索创建令牌时考虑的策略允许的所有秘密。
- 如果需要,主容器会更新令牌以防止其过期。
【讨论】: