openshift - 在 openshift 中部署没有持久存储的 hashcorp vault
问题描述
如何在不使用持久卷(PV)的情况下在 openshift 中部署 hashcorp 库?
在 openshift 集群中作为普通用户(不是集群管理员),需要部署 Vault 服务器。我遵循了URL,但它在 vault.yaml 文件中有持久卷(/vault/file),这需要我的帐户创建持久容器的权限,但我的帐户没有足够的权限。所以我删除了 vault-config.json 中的光伏安装路径,如下所示,但我看到了以下错误。
{"backend":
{"file":
{"path": "/tmp/file"}
},
...
...
}
是否可以在没有 PV 的情况下创建 Vault 服务器,例如使用本地文件路径(/tmp/file)作为普通用户的后端存储?
在没有 PV 的情况下在 openshift 中部署 vault 以部署 hashcorp vault 的替代方法是什么?
以下是使用 pv 运行时的错误,
--> Scaling vault-1 to 1
--> FailedCreate: vault-1 Error creating: pods "vault-1-" is forbidden: unable to validate against any security context constraint: [spec.containers[0].securityContext.privileged: Invalid value: true: Privileged containers are not allowed]
error: update acceptor rejected vault-1: pods for rc 'dev-poc-environment/vault-1' took longer than 600 seconds to become available
解决方案
如何在不使用持久卷(PV)的情况下在 openshift 中部署 hashcorp 库?
您可以使用此处提到的 In-Memory 存储后端。所以你的保险库配置看起来像这样:
$cat config.hcl
disable_mlock = true
storage "inmem" {}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 0
tls_cert_file = "/etc/service/vault-server/vault-server.crt"
tls_key_file = "/etc/service/vault-server/vault-server.key"
}
ui = true
max_lease_ttl = "7200h"
default_lease_ttl = "7200h"
api_addr = "http://127.0.0.1:8200"
但是有了这个数据/秘密不是持久的。
另一种方法是将文件路径添加到存储中,以便将所有加密的秘密存储在提到的路径中。
所以现在你的配置更改为
storage "file" {
path = "ANY-PATH"
}
这里要注意的点:
- 定义的路径应具有写入/读取数据/秘密的权限
- 这可以是容器内的任何路径,只是为了避免对持久性卷的依赖。
但是这个模型有什么问题呢?当容器重新启动时,由于容器不存储数据,所有数据都会丢失。
无高可用性 – 文件系统后端不支持高可用性。
那么理想的解决方案应该是什么?任何使我们的数据高度可用的东西,都是通过使用数据库的专用后端存储来实现的。
为简单起见,让我们将PostgreSQL作为后端存储。
storage "postgresql" {
connection_url = "postgres://user123:secret123!@localhost:5432/vault"
}
所以现在配置看起来像这样:
$ cat config.hcl
disable_mlock = true
storage "postgresql" {
connection_url = "postgres://vault:vault@vault-postgresql:5432/postgres?sslmode=disable"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = 0
tls_cert_file = "/etc/service/vault-server/vault-server.crt"
tls_key_file = "/etc/service/vault-server/vault-server.key"
}
ui = true
max_lease_ttl = "7200h"
default_lease_ttl = "7200h"
api_addr = "http://127.0.0.1:8200"
因此,即使容器重新启动,选择后端存储也可以帮助您保留数据。
当您专门在 openshift 中寻找解决方案时,请使用提供的模板创建一个 postgresSQL 容器,并使用上面 config.hcl 中说明的服务名称使 vault 指向它
希望这可以帮助!
推荐阅读
- c# - C# - 从 HttpSessionState 读取时出现 InvalidCastException
- javascript - 聚焦 ShadowDOM 中的元素
- python - 是否可以将 np.array() 与列表一起用作输入?
- r - 如何将我的数据框附加到自身(cbind)给定次数?在 R 中
- forms - Symfony 表单类型 - 添加选项
- python - Selenium 警报处理 Python
- ms-access - 在 Access 中,如何将表传递给查询而不在每条记录上运行?
- c++ - 为什么 C++ 不将变量初始化为 0?
- vhdl - VHDL:如何解决此语句:类型 foo 是范围 -(2**30) 到 2**30;?
- gatsby - 有没有办法配置 GatsbyJS 构建过程以插入