希望使用 postgresql 在保险库中配置数据库秘密引擎。
使用 docker-compose.yml 构建 vault 并创建 postgres 服务。
两个服务都已启动并运行,我能够使用 Mac 上的本地 psql 安装连接 postgres DB。postgres 和 vault 容器都已启动。
使用正确的插件和连接信息配置 Vault 会因此错误而失败。
bash-4.4# vault write dbs/config/postgres plugin_name=postgresql-database-plugin allowed_roles="readonly" connection_url="postgresql://vc:[email protected]:5432/postgres?sslmode=disable"
错误消息如下:
将数据写入 dbs/config/postgres 时出错:发出 API 请求时出错。
网址:PUThttp://127.0.0.1:8200/v1/dbs/config/postgres 代码:400。错误:
- 创建数据库对象时出错:验证连接时出错:拨号 tcp 127.0.0.1:5432:连接:连接被拒绝
答案1
当 vault 和 postgres 不在同一网络运行时,就会出现此问题。
就我而言,我在 docker swarm 中运行 Vault,并尝试连接到在 VM 上运行的 postgres。
如果您在容器中运行此程序,请验证是否为 postgres 添加了正确的容器主机名。
就我而言,我必须将命令中的 localhost 更改为我的虚拟机的 IP 地址10.11.12.13
vault write database/config/<VAULT_CONFIG_NAME> \
plugin_name=postgresql-database-plugin \
allowed_roles="*" \
connection_url="postgresql://{{username}}:{{password}}@10.11.12.13:5432/postgres" \
username=<POSTGRES_USER> \
password=<POSTGRES_PASSWORD>
在 docker 中,应该可以使用 postgres 数据库的容器名称进行访问。如果postgres-db
是容器名称,则命令将更改为以下内容
vault write database/config/<VAULT_CONFIG_NAME> \
plugin_name=postgresql-database-plugin \
allowed_roles="*" \
connection_url="postgresql://{{username}}:{{password}}@postgres-db:5432/postgres" \
username=<POSTGRES_USER> \
password=<POSTGRES_PASSWORD>