Kubernetes:Rails 凭据或 ConfigMap / Secret 方式?
Kubernetes: Rails credentials or the ConfigMap / Secret way?
我在 Kubernetes
集群中部署了我的 Rails 6
应用程序,我考虑如何实现我的 ENV
变量。
我经常在 Rails 应用程序中使用 dotenv
和主机上的常规 ENV
变量。但现在看来,我可以省略它们并使用 Rails 凭据。但仅仅因为功能存在并不意味着它必须被使用或必须更好,对吧?
所以我不确定如何解决这个 env/security 难题:
接近ConfigMap
- 在集群上创建一个
ConfigMap
以提供 ENV
vars
- 将所有 ENV 变量放入 ConfigMap
- 省略 Rails 凭据
方法证书
- 为 Kubernetes
Secret
或 ConfigMap 提供 RAILS_MASTER_KEY
- 对我需要的所有变量使用 Rails 凭据
- (某些 ENV-var 是否必须像
RAILS_ENV
一样保留在 ConfigMap 中?)
我担心的缺点是,当我想更改 ENV var(修复拼写错误、缩放工作人员、切换数据库、凭据...)时,我必须通过很多步骤:制作 git 推送、构建和标记容器并等待部署。
使用 ConfigMap,我只需 kubectl apply
更改即可。
我喜欢Rails“约定优于配置”的方式,所以将变量分散到两种或三种不同的类型对我来说似乎不太实用,但恐怕我不得不这样做。
哪种方法更安全?
哪个更“高效”或“对开发人员更友好”?
什么时候使用凭据?
2021 年的最佳做法是什么?
您不会(仅)使用 ConfigMap,因为那不安全,但您可以使用 Secret 以与您描述的相同的方式保存所有环境变量。真的取决于您喜欢哪种工作流程。不管你怎么做,你在某处都有一些 Kubernetes Secrets 对象,只是它的范围问题。所以你 100% 需要有一个工作流程来处理这方面的事情。但是,如果您更喜欢通过 Rails 工作流程进行日常机密编辑,这样您就不需要过多地接触 Kubernetes 方面,那很好。
我个人认为接触机密数据的系统越少越好,即使这意味着 Rails 开发人员需要学习一种新工具。
我在 Kubernetes
集群中部署了我的 Rails 6
应用程序,我考虑如何实现我的 ENV
变量。
我经常在 Rails 应用程序中使用 dotenv
和主机上的常规 ENV
变量。但现在看来,我可以省略它们并使用 Rails 凭据。但仅仅因为功能存在并不意味着它必须被使用或必须更好,对吧?
所以我不确定如何解决这个 env/security 难题:
接近ConfigMap
- 在集群上创建一个
ConfigMap
以提供ENV
vars - 将所有 ENV 变量放入 ConfigMap
- 省略 Rails 凭据
方法证书
- 为 Kubernetes
Secret
或 ConfigMap 提供RAILS_MASTER_KEY
- 对我需要的所有变量使用 Rails 凭据
- (某些 ENV-var 是否必须像
RAILS_ENV
一样保留在 ConfigMap 中?)
我担心的缺点是,当我想更改 ENV var(修复拼写错误、缩放工作人员、切换数据库、凭据...)时,我必须通过很多步骤:制作 git 推送、构建和标记容器并等待部署。
使用 ConfigMap,我只需 kubectl apply
更改即可。
我喜欢Rails“约定优于配置”的方式,所以将变量分散到两种或三种不同的类型对我来说似乎不太实用,但恐怕我不得不这样做。
哪种方法更安全?
哪个更“高效”或“对开发人员更友好”?
什么时候使用凭据?
2021 年的最佳做法是什么?
您不会(仅)使用 ConfigMap,因为那不安全,但您可以使用 Secret 以与您描述的相同的方式保存所有环境变量。真的取决于您喜欢哪种工作流程。不管你怎么做,你在某处都有一些 Kubernetes Secrets 对象,只是它的范围问题。所以你 100% 需要有一个工作流程来处理这方面的事情。但是,如果您更喜欢通过 Rails 工作流程进行日常机密编辑,这样您就不需要过多地接触 Kubernetes 方面,那很好。
我个人认为接触机密数据的系统越少越好,即使这意味着 Rails 开发人员需要学习一种新工具。