在使用 Docker 和 Traefik 搭建 Vault 之前,需要先安装和配置好 Docker 和 Traefik。接下来,按照以下步骤进行操作:
- 拉取 Vault 镜像
使用以下命令从 Docker Hub 上拉取 Vault 的官方镜像:docker pull vault
- 创建 Vault 容器
使用以下命令创建一个名为“vault”的容器,并启动它:docker run -d --name vault -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' -e 'VAULT_DEV_ROOT_TOKEN_ID=root' vault
这个命令将启动一个名为“vault”的容器,并将 Vault 的监听地址设置为“0.0.0.0:8200”,同时将根令牌的 ID 设置为“root”。您可以将这些参数根据自己的需要进行调整。 - 配置 Traefik
接下来,需要配置 Traefik 来代理来自客户端的请求到 Vault 容器。在 Traefik 的配置文件中(通常是 docker-compose.yml),添加以下内容:
```yaml
services:
traefik:
image: traefik:v2.3
command:
- —providers.docker=true
- —providers.docker.exposedbydefault=false
- —entrypoints.web.address=:80
- —entrypoints.websecure.address=:443
- —certificatesresolvers.myhttpssolver.acme.caserver=https://acme-v02.api.letsencrypt.org/directory
- —certificatesresolvers.myhttpssolver.acme.dnsChallenge=true
- —certificatesresolvers.myhttpssolver.acme.dnsChallengeProvider=letsencrypt-dns
- —certificatesresolvers.myhttpssolver.acme.email=your@email.com
- —certificatesresolvers.myhttpssolver.acme.storage=/acme.json
- —certificatesresolvers.myhttpssolver.acme.tlschallenge=true
ports: - mode: host
published: 80
target: 8080 - mode: host
published: 443
target: 8443
volumes: - /var/run/docker.sock:/var/run/docker.sock
- /home/traefik/traefik.yaml:/traefik.yaml
```这段配置启用了 Traefik 的 Docker 容器提供程序,并禁用了默认的自动暴露服务。同时,配置了两个入口点(一个用于 HTTP,一个用于 HTTPS),并设置了一个自签名证书解析器用于 HTTPS。此外,还启用了 ACME 的 DNS 挑战和 TLS 挑战,并将 ACME 的证书存储在本地文件系统中。最后,将 Traefik 的配置文件挂载到容器中。请根据您的实际需求修改这些配置参数。
- 配置 Vault 的客户端请求验证头
为了确保 Vault 的安全性,需要配置客户端请求验证头。在 Traefik 的配置文件中,找到对应的 frontend service,然后在 frontend 的 headers 中添加以下配置:
yaml
frontend:
headers:
customRequestHeaders:
X-Vault-Token: s.<your_token>这里将 X-Vault-Token 的值替换为您的 Vault 令牌。这样,每当客户端请求 Vault 时,Traefik 将自动添加这个验证头。这样可以确保只有具有有效令牌的客户端才能访问 Vault。请注意,在生产环境中,应该使用更加安全的方式来存储和管理令牌,而不是直接将其暴露在配置文件中。您可以使用环境变量或密钥管理服务来安全地存储和检索令牌。 - 重新启动应用和 Traefik 服务