【问题标题】:Writing PostgreSQL database credentials in Vault ends up with connection refused在 Vault 中写入 PostgreSQL 数据库凭据会导致连接被拒绝
【发布时间】:2020-11-17 05:37:28
【问题描述】:

我正在尝试学习如何使用 Docker 和 PostgreSQL 实现 Vault。 目标是使用 PostgreSQL 创建一个 docker 容器并使用 HashiCorp Vault 连接到它。 我设法用 docker、postgresql 和 vault 的配置创建了一个 yml 文件。

    version: '3.1'

services:

  db:
    image: postgres
    container_name: postgreSQLCon
    restart: always
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: example
    ports:
      - 5432:5432 #important to configure vault with postgreSQL


  adminer:
    image: adminer
    container_name: adminerCon
    restart: always
    ports:
      - 8080:8080


  vault:
      image: vault:latest
      container_name: vaultCon
      depends_on:
        - "db"
      volumes:
         - ./vault/config:/vault/config
         - ./vault/policies:/vault/policies
         - ./vault/data:/vault/data
         - ./vault/logs:/vault/logs
      ports:
        - 8200:8200
      environment:
        - VAULT_ADDR=http://127.0.0.1:8200
      cap_add:
        - IPC_LOCK
      command: ['vault', 'server', '-config=/vault/config/vault-config.json']

vault-config.json

{
  "backend": {
    "file": {
      "path": "vault/data"
    }
  },
  "listener": {
    "tcp":{
      "address": "0.0.0.0:8200",
      "tls_disable": 1
    }
  },
  "ui": true
}

当保管库启动时,我正在使用 docker exec -it 连接到容器。我设法解封并登录到保险库。当我运行以下命令时:

vault write database/config/my-postgresql-database \
    plugin_name=postgresql-database-plugin \
    allowed_roles="my-role" \
    connection_url="postgresql://{{username}}:{{password}}@localhost:5432/?sslmode=disable" \
    username="admin" \
    password="example"

我收到以下错误:

Error writing data to database/config/my-postgresql-database: Error making API request.

URL: PUT http://127.0.0.1:8200/v1/database/config/my-postgresql-database
Code: 400. Errors:

* error creating database object: error verifying connection: dial tcp 127.0.0.1:5432: connect: connection refused

【问题讨论】:

    标签: postgresql docker hashicorp-vault


    【解决方案1】:

    这里的问题是您需要使用其容器 IP 地址连接到 DB 容器,而不是 127.0.0.1。这应该可以使用容器名称 (db) 发现,因此只需将连接 URL 中的 localhost 替换为 db

    vault write database/config/my-postgresql-database \
        plugin_name=postgresql-database-plugin \
        allowed_roles="my-role" \
        connection_url="postgresql://{{username}}:{{password}}@db:5432/?sslmode=disable" \
        username="admin" \
        password="example"
    

    https://docs.docker.com/compose/networking/

    【讨论】:

    • 谢谢,没有意识到您需要更改与容器的连接而不是本地主机。
    猜你喜欢
    • 2021-12-01
    • 2019-08-04
    • 2013-04-07
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    相关资源
    最近更新 更多