198 lines
4.5 KiB
Markdown
198 lines
4.5 KiB
Markdown
# Consul + Terraform 集成指南
|
|
|
|
本指南介绍如何使用 Consul 安全地管理 Terraform 中的敏感配置信息,特别是 Oracle Cloud 的凭据。
|
|
|
|
## 概述
|
|
|
|
我们使用 Consul 作为安全的密钥存储,避免在 Terraform 配置文件中直接暴露敏感信息。
|
|
|
|
## 架构
|
|
|
|
```
|
|
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
|
│ Terraform │───▶│ Consul │───▶│ Oracle Cloud │
|
|
│ │ │ (密钥存储) │ │ │
|
|
│ consul provider │ │ │ │ │
|
|
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
|
```
|
|
|
|
## 前提条件
|
|
|
|
1. Consul 集群正在运行
|
|
2. 可以访问 Consul API (默认: http://localhost:8500)
|
|
3. 已安装 curl 和 Terraform
|
|
|
|
## 快速开始
|
|
|
|
### 1. 启动 Consul 集群
|
|
|
|
```bash
|
|
# 进入 swarm 目录
|
|
cd swarm
|
|
|
|
# 启动 Consul 集群
|
|
docker-compose -f configs/traefik-consul-setup.yml up -d
|
|
```
|
|
|
|
### 2. 设置 Oracle Cloud 配置
|
|
|
|
```bash
|
|
# 使用密钥管理脚本设置配置
|
|
./scripts/utilities/consul-secrets-manager.sh set-oracle
|
|
```
|
|
|
|
脚本会提示你输入:
|
|
- 租户 OCID
|
|
- 用户 OCID
|
|
- API 密钥指纹
|
|
- 私钥文件路径
|
|
- 区间 OCID
|
|
|
|
### 3. 配置 Terraform
|
|
|
|
```bash
|
|
# 设置 Terraform Consul Provider
|
|
./scripts/utilities/terraform-consul-provider.sh setup
|
|
```
|
|
|
|
### 4. 验证配置
|
|
|
|
```bash
|
|
# 查看存储在 Consul 中的配置
|
|
./scripts/utilities/consul-secrets-manager.sh get-oracle
|
|
```
|
|
|
|
### 5. 运行 Terraform
|
|
|
|
```bash
|
|
cd infrastructure/environments/dev
|
|
|
|
# 初始化 Terraform
|
|
terraform init
|
|
|
|
# 规划部署
|
|
terraform plan
|
|
|
|
# 应用配置
|
|
terraform apply
|
|
```
|
|
|
|
## 详细说明
|
|
|
|
### Consul 密钥存储结构
|
|
|
|
```
|
|
config/
|
|
└── dev/
|
|
└── oracle/
|
|
├── tenancy_ocid
|
|
├── user_ocid
|
|
├── fingerprint
|
|
├── private_key
|
|
└── compartment_ocid
|
|
```
|
|
|
|
### 脚本功能
|
|
|
|
#### consul-secrets-manager.sh
|
|
|
|
- `set-oracle`: 设置 Oracle Cloud 配置到 Consul
|
|
- `get-oracle`: 从 Consul 获取配置信息
|
|
- `delete-oracle`: 删除 Consul 中的配置
|
|
- `generate-vars`: 生成临时 Terraform 变量文件
|
|
- `cleanup`: 清理临时文件
|
|
|
|
#### terraform-consul-provider.sh
|
|
|
|
- `setup`: 创建 Terraform Consul Provider 配置文件
|
|
|
|
### 安全特性
|
|
|
|
1. **敏感信息隔离**: 私钥等敏感信息只存储在 Consul 中
|
|
2. **临时文件**: 私钥文件只在 Terraform 运行时临时创建
|
|
3. **权限控制**: 临时私钥文件设置为 600 权限
|
|
4. **自动清理**: 提供清理脚本删除临时文件
|
|
|
|
## 环境变量
|
|
|
|
```bash
|
|
# Consul 地址
|
|
export CONSUL_ADDR="http://localhost:8500"
|
|
|
|
# Consul ACL Token (如果启用了 ACL)
|
|
export CONSUL_TOKEN="your-token"
|
|
|
|
# 环境名称
|
|
export ENVIRONMENT="dev"
|
|
```
|
|
|
|
## 故障排除
|
|
|
|
### Consul 连接问题
|
|
|
|
```bash
|
|
# 检查 Consul 状态
|
|
curl http://localhost:8500/v1/status/leader
|
|
|
|
# 检查 Consul 服务
|
|
docker ps | grep consul
|
|
```
|
|
|
|
### 配置验证
|
|
|
|
```bash
|
|
# 验证 Consul 中的配置
|
|
curl http://localhost:8500/v1/kv/config/dev/oracle?recurse
|
|
|
|
# 检查 Terraform 配置
|
|
terraform validate
|
|
```
|
|
|
|
### 清理和重置
|
|
|
|
```bash
|
|
# 清理临时文件
|
|
./scripts/utilities/consul-secrets-manager.sh cleanup
|
|
|
|
# 删除 Consul 中的配置
|
|
./scripts/utilities/consul-secrets-manager.sh delete-oracle
|
|
```
|
|
|
|
## 最佳实践
|
|
|
|
1. **定期轮换密钥**: 定期更新 Oracle Cloud API 密钥
|
|
2. **备份配置**: 定期备份 Consul 数据
|
|
3. **监控访问**: 监控 Consul 密钥访问日志
|
|
4. **环境隔离**: 不同环境使用不同的 Consul 路径
|
|
|
|
## 扩展其他云服务商
|
|
|
|
可以类似地为其他云服务商添加 Consul 集成:
|
|
|
|
```bash
|
|
# 华为云配置路径
|
|
config/dev/huawei/access_key
|
|
config/dev/huawei/secret_key
|
|
|
|
# AWS 配置路径
|
|
config/dev/aws/access_key
|
|
config/dev/aws/secret_key
|
|
|
|
# Google Cloud 配置路径
|
|
config/dev/gcp/service_account_key
|
|
```
|
|
|
|
## 相关文件
|
|
|
|
- `infrastructure/environments/dev/terraform.tfvars` - Terraform 变量配置
|
|
- `scripts/utilities/consul-secrets-manager.sh` - Consul 密钥管理脚本
|
|
- `scripts/utilities/terraform-consul-provider.sh` - Terraform Consul Provider 配置脚本
|
|
- `swarm/configs/traefik-consul-setup.yml` - Consul 集群配置
|
|
|
|
## 支持
|
|
|
|
如有问题,请检查:
|
|
1. Consul 集群是否正常运行
|
|
2. 网络连接是否正常
|
|
3. 权限设置是否正确
|
|
4. 环境变量是否正确设置 |