# Consul 通过 Traefik 连接的配置方案 ## 🎯 目标 让所有节点通过 `consul.git4ta.me` 访问 Consul,而不是直接连接 IP 地址。 ## ✅ 可行性验证 ### 测试结果 ```bash # 通过 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" (当前路由到的节点) ``` ### 优势 1. **统一入口**: 所有服务都通过域名访问 2. **自动故障转移**: Traefik 自动路由到健康的 Consul 节点 3. **简化配置**: 不需要硬编码 IP 地址 4. **负载均衡**: 可以分散请求到多个 Consul 节点 ## 🔧 配置方案 ### 方案 1: 修改现有节点配置 #### Consul 客户端配置 ```hcl # /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 配置 ```hcl # /etc/nomad.d/nomad.hcl consul { address = "https://consul.git4ta.me:8500" # 或者 address = "http://consul.git4ta.me:8500" } ``` #### Vault 配置 ```hcl # 在 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 服务发现 ```yaml # 在 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 配置 ```bash # 检查当前 Traefik 是否已配置 Consul 路由 curl -I https://consul.git4ta.me/v1/status/leader ``` ### 步骤 2: 更新节点配置 ```bash # 备份现有配置 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: 重启服务 ```bash # 重启 Consul systemctl restart consul # 重启 Nomad systemctl restart nomad # 重启 Vault systemctl restart vault ``` ### 步骤 4: 验证连接 ```bash # 检查 Consul 连接 consul members # 检查 Nomad 连接 nomad node status # 检查 Vault 连接 vault status ``` ## 📊 性能影响 ### 延迟 - **直接连接**: ~1-2ms - **通过 Traefik**: ~5-10ms (增加 3-8ms) ### 吞吐量 - **Traefik 限制**: 取决于 Traefik 配置 - **建议**: 监控 Traefik 性能指标 ### 可靠性 - **提升**: 自动故障转移 - **风险**: Traefik 单点故障 ## 🎯 推荐方案 **建议采用方案 1**,因为: 1. **简单直接**: 只需要修改配置文件 2. **向后兼容**: 不影响现有功能 3. **易于维护**: 统一管理入口 **实施优先级**: 1. ✅ **Traefik 配置** - 已完成 2. 🔄 **Consul 客户端** - 需要修改 3. 🔄 **Nomad 配置** - 需要修改 4. 🔄 **Vault 配置** - 需要修改 --- **结论**: 完全可行!通过 Traefik 统一访问 Consul 是一个很好的架构改进。