我正在为 Spring Boot 微服务和 Hashicorp Vault 构建 docker compose 环境。通过使用
docker compose up
,我想使用已知的 Vault root 令牌和现有的秘密启动完全配置的开发环境。
这是我当前的保险库服务配置
vault:
image: "vault"
ports:
- "8200:8200"
expose:
- "8200"
restart: always
volumes:
- ./volumes/config:/vault/config
cap_add:
- IPC_LOCK
environment:
- "VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200"
#entrypoint: vault server --config /vault/config/vault.json
entrypoint: vault server --dev --dev-root-token-id="00000000-0000-0000-0000-000000000000"
在此配置中包含预打包 KV 机密的最佳方法是什么?
我通过使用 Vault REST API 实现了这一点,我设置了另一个带有 alpine/curl 的服务(这个服务特别是因为它重量很轻并且预装了 curl)图像,只要在 .sh 文件中执行 curl 命令保险库图像旋转起来。
docker-compose.yaml:
version: "3.7"
services:
vault-service:
container_name: vault
image: vault
ports:
- "8200:8200"
environment:
VAULT_DEV_ROOT_TOKEN_ID: "myroot"
VAULT_ADDR: "http://127.0.0.1:8200"
cap_add:
- IPC_LOCK
networks:
- default
vault-prepopulate:
image: alpine/curl
depends_on:
- vault-service
volumes:
- ./prepopulate_vault.sh:/usr/local/bin/prepopulate_vault.sh
command: ["sh", "-c", "/usr/local/bin/prepopulate_vault.sh"]
networks:
- default
networks:
default:
name: vaultnetwork
driver: bridge
在 .sh 文件中,我让它休眠了 5 秒钟,因为在 vault 正确启动之前,我遇到了执行 curl 命令的问题。在标头中,指定了在 Docker-Compose 文件中设置的相同 Vault 令牌,然后设置数据。最后一行有一个 url,其中 docker bridge 网络用作域名,原因是在 docker-compose 文件中两个服务都配置为使用它来允许它们之间的通信,在“数据”之后/" 你可以配置秘密的路径。有关 Vault REST API 的更多信息,请参见此处。
prepopulate_vault.sh:
sleep 5 &&
curl \
--header "X-Vault-Token: myroot" \
--request POST \
--data '{ "data": {"pass": "my-password", "username":"my-username"} }' \
http://vaultnetwork:8200/v1/secret/data/my-project