4.1 KiB
4.1 KiB
Consul 通过 Traefik 连接的配置方案
🎯 目标
让所有节点通过 consul.git4ta.me 访问 Consul,而不是直接连接 IP 地址。
✅ 可行性验证
测试结果
# 通过 Traefik 访问 Consul API
curl -s https://consul.git4ta.me/v1/status/leader
# 返回: "100.117.106.136:8300" (ch4 是 leader)
curl -s https://consul.git4ta.me/v1/agent/self | jq -r '.Config.NodeName'
# 返回: "warden" (当前路由到的节点)
优势
- 统一入口: 所有服务都通过域名访问
- 自动故障转移: Traefik 自动路由到健康的 Consul 节点
- 简化配置: 不需要硬编码 IP 地址
- 负载均衡: 可以分散请求到多个 Consul 节点
🔧 配置方案
方案 1: 修改现有节点配置
Consul 客户端配置
# /etc/consul.d/consul.hcl
datacenter = "dc1"
node_name = "node-name"
# 通过 Traefik 连接 Consul
retry_join = ["consul.git4ta.me:8500"]
# 或者使用 HTTP 连接
addresses {
http = "consul.git4ta.me"
https = "consul.git4ta.me"
}
ports {
http = 8500
https = 8500
}
Nomad 配置
# /etc/nomad.d/nomad.hcl
consul {
address = "https://consul.git4ta.me:8500"
# 或者
address = "http://consul.git4ta.me:8500"
}
Vault 配置
# 在 Consul KV vault/config 中
storage "consul" {
address = "consul.git4ta.me:8500"
path = "vault/"
}
service_registration "consul" {
address = "consul.git4ta.me:8500"
service = "vault"
service_tags = "vault-server"
}
方案 2: 创建新的服务发现配置
在 Traefik 中添加 Consul 服务发现
# 在 dynamic.yml 中添加
services:
consul-api:
loadBalancer:
servers:
- url: "http://ch4.tailnet-68f9.ts.net:8500" # Leader
- url: "http://warden.tailnet-68f9.ts.net:8500" # Follower
- url: "http://ash3c.tailnet-68f9.ts.net:8500" # Follower
healthCheck:
path: "/v1/status/leader"
interval: "30s"
timeout: "15s"
routers:
consul-api:
rule: "Host(`consul.git4ta.me`)"
service: consul-api
entryPoints:
- websecure
tls:
certResolver: cloudflare
🚨 注意事项
1. 端口映射
- Traefik 外部端口: 443 (HTTPS) / 80 (HTTP)
- Consul 内部端口: 8500
- 需要配置: Traefik 端口转发
2. SSL 证书
- HTTPS: 需要有效的 SSL 证书
- HTTP: 可以使用自签名证书或跳过验证
3. 健康检查
- 路径:
/v1/status/leader - 间隔: 30秒
- 超时: 15秒
4. 故障转移
- 自动切换: Traefik 会自动路由到健康的节点
- Leader 选举: Consul 会自动选举新的 leader
🔄 实施步骤
步骤 1: 验证 Traefik 配置
# 检查当前 Traefik 是否已配置 Consul 路由
curl -I https://consul.git4ta.me/v1/status/leader
步骤 2: 更新节点配置
# 备份现有配置
cp /etc/consul.d/consul.hcl /etc/consul.d/consul.hcl.backup
# 修改配置使用域名
sed -i 's/warden\.tailnet-68f9\.ts\.net:8500/consul.git4ta.me:8500/g' /etc/consul.d/consul.hcl
步骤 3: 重启服务
# 重启 Consul
systemctl restart consul
# 重启 Nomad
systemctl restart nomad
# 重启 Vault
systemctl restart vault
步骤 4: 验证连接
# 检查 Consul 连接
consul members
# 检查 Nomad 连接
nomad node status
# 检查 Vault 连接
vault status
📊 性能影响
延迟
- 直接连接: ~1-2ms
- 通过 Traefik: ~5-10ms (增加 3-8ms)
吞吐量
- Traefik 限制: 取决于 Traefik 配置
- 建议: 监控 Traefik 性能指标
可靠性
- 提升: 自动故障转移
- 风险: Traefik 单点故障
🎯 推荐方案
建议采用方案 1,因为:
- 简单直接: 只需要修改配置文件
- 向后兼容: 不影响现有功能
- 易于维护: 统一管理入口
实施优先级:
- ✅ Traefik 配置 - 已完成
- 🔄 Consul 客户端 - 需要修改
- 🔄 Nomad 配置 - 需要修改
- 🔄 Vault 配置 - 需要修改
结论: 完全可行!通过 Traefik 统一访问 Consul 是一个很好的架构改进。