首页 > 解决方案 > 在线阅读 Redhat OpenShift 内部的秘密?

问题描述

我已经获得了一个 Redhat OpenShift 在线入门 vps,用于托管我的不和谐机器人。我已经将它上传到 github,当然要减去我的不和谐令牌和其他 API 密钥 :^)

我如何让 OpenShift 使用存储和读取客户端机密?如果有帮助,我正在使用 nodejs8 框架。

标签: node.jsgithubopenshiftapp-secret

解决方案


在 GitHub 等源代码版本控制托管服务中,机密没有位置。

关于 OpenShift,它包括Secrets,这是一个编码 64 位的配置映射,您可以在其中注入机密信息。

但是,长期机密信息存储(将注入 OpenShift 机密)应该存储在适当的 Vault 中。

例如,Hashicorp Vault,如文章“在 OpenShift 上管理机密 – Vault 集成”中所述

其余部分描述了该解决方案,但即使您不使用该特定主机,总体思路(外部保险库类型存储)仍然存在:

https://i2.wp.com/blog.openshift.com/wp-content/uploads/vault-1.png?w=1486&ssl=1

  1. Init Container (在 Pod的主容器启动之前运行)通过加密连接从 Vault Controller请求包装的令牌。
    封装的凭据允许您传递凭据,而无需任何中间人实际查看凭据。
  2. Vault 控制器从 Kubernetes API 服务器检索 pod 详细信息。
  3. 如果 pod 存在并包含 vaultproject.io/policies 注释,则 Vault 控制器调用 Vault 并生成一个唯一的包装令牌,该令牌可以访问注释中提到的 Vault 策略。此步骤需要信任 pod 作者以习惯于正确的策略。生成的令牌具有可配置的 TTL。
  4. Vault Controller 使用从 Kubernetes API 通过加密连接获得的 pod IP “回调” Init Container,并将新创建的包装令牌传递给它。请注意,Vault Controller 不信任 pod,它只信任主 API。
  5. Init Container 解包令牌以获得允许访问凭证的 Vault 令牌。
  6. Vault 令牌被写入两个容器 (emptyDir) 之间共享的卷中的一个众所周知的位置,并且 Init Container 退出。
  7. 主容器从令牌文件中读取令牌。现在主容器可以使用令牌来检索创建令牌时考虑的策略允许的所有秘密。
  8. 如果需要,主容器会更新令牌以防止其过期。

推荐阅读