# 通过 Traefik 连接 Consul 的配置示例 ## 🎯 目标实现 让其他节点通过 `consul.git4ta.me` 和 `nomad.git4ta.me` 访问服务,而不是直接连接 IP。 ## ✅ 当前状态验证 ### Consul 智能检测 ```bash # Leader 检测 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' # 返回: "ash3c" (Traefik 路由到 ash3c) ``` ### Nomad 智能检测 ```bash # Leader 检测 curl -s https://nomad.git4ta.me/v1/status/leader # 返回: "100.90.159.68:4647" (ch2 是 leader) ``` ## 🔧 节点配置示例 ### 1. Consul 客户端配置 #### 当前配置 (直接连接) ```hcl # /etc/consul.d/consul.hcl datacenter = "dc1" node_name = "client-node" retry_join = [ "warden.tailnet-68f9.ts.net:8301", "ch4.tailnet-68f9.ts.net:8301", "ash3c.tailnet-68f9.ts.net:8301" ] ``` #### 新配置 (通过 Traefik) ```hcl # /etc/consul.d/consul.hcl datacenter = "dc1" node_name = "client-node" # 通过 Traefik 连接 Consul retry_join = ["consul.git4ta.me:8301"] # 或者使用 HTTP API addresses { http = "consul.git4ta.me" } ports { http = 8301 } ``` ### 2. Nomad 客户端配置 #### 当前配置 (直接连接) ```hcl # /etc/nomad.d/nomad.hcl consul { address = "http://warden.tailnet-68f9.ts.net:8500" } ``` #### 新配置 (通过 Traefik) ```hcl # /etc/nomad.d/nomad.hcl consul { address = "https://consul.git4ta.me:8500" # 或者使用 HTTP # address = "http://consul.git4ta.me:8500" } ``` ### 3. Vault 配置 #### 当前配置 (直接连接) ```hcl # Consul KV: vault/config storage "consul" { address = "ch4.tailnet-68f9.ts.net:8500" path = "vault/" } service_registration "consul" { address = "ch4.tailnet-68f9.ts.net:8500" service = "vault" } ``` #### 新配置 (通过 Traefik) ```hcl # Consul KV: vault/config storage "consul" { address = "consul.git4ta.me:8500" path = "vault/" } service_registration "consul" { address = "consul.git4ta.me:8500" service = "vault" } ``` ## 🚀 实施步骤 ### 步骤 1: 验证 Traefik 路由 ```bash # 测试 Consul 路由 curl -I https://consul.git4ta.me/v1/status/leader # 测试 Nomad 路由 curl -I https://nomad.git4ta.me/v1/status/leader ``` ### 步骤 2: 更新节点配置 ```bash # 在目标节点上执行 # 备份现有配置 cp /etc/consul.d/consul.hcl /etc/consul.d/consul.hcl.backup cp /etc/nomad.d/nomad.hcl /etc/nomad.d/nomad.hcl.backup # 修改 Consul 配置 sed -i 's/warden\.tailnet-68f9\.ts\.net:8301/consul.git4ta.me:8301/g' /etc/consul.d/consul.hcl sed -i 's/ch4\.tailnet-68f9\.ts\.net:8301/consul.git4ta.me:8301/g' /etc/consul.d/consul.hcl sed -i 's/ash3c\.tailnet-68f9\.ts\.net:8301/consul.git4ta.me:8301/g' /etc/consul.d/consul.hcl # 修改 Nomad 配置 sed -i 's/warden\.tailnet-68f9\.ts\.net:8500/consul.git4ta.me:8500/g' /etc/nomad.d/nomad.hcl sed -i 's/ch4\.tailnet-68f9\.ts\.net:8500/consul.git4ta.me:8500/g' /etc/nomad.d/nomad.hcl sed -i 's/ash3c\.tailnet-68f9\.ts\.net:8500/consul.git4ta.me:8500/g' /etc/nomad.d/nomad.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 ``` ## 📊 性能对比 ### 延迟测试 ```bash # 直接连接 time curl -s http://ch4.tailnet-68f9.ts.net:8500/v1/status/leader # 通过 Traefik time curl -s https://consul.git4ta.me/v1/status/leader ``` ### 可靠性测试 ```bash # 测试故障转移 # 1. 停止 ch4 Consul # 2. 检查 Traefik 是否自动路由到其他节点 curl -s https://consul.git4ta.me/v1/status/leader ``` ## 🎯 优势总结 ### 1. 统一入口 - **之前**: 每个节点需要知道所有 Consul/Nomad 节点 IP - **现在**: 只需要知道 `consul.git4ta.me` 和 `nomad.git4ta.me` ### 2. 自动故障转移 - **之前**: 节点需要手动配置多个 IP - **现在**: Traefik 自动路由到健康的节点 ### 3. 简化配置 - **之前**: 硬编码 IP 地址,难以维护 - **现在**: 使用域名,易于管理和更新 ### 4. 负载均衡 - **之前**: 所有请求都到同一个节点 - **现在**: Traefik 可以分散请求到多个节点 ## ⚠️ 注意事项 ### 1. 端口映射 - **Traefik 外部**: 443 (HTTPS) / 80 (HTTP) - **服务内部**: 8500 (Consul), 4646 (Nomad) - **需要配置**: Traefik 端口转发 ### 2. SSL 证书 - **HTTPS**: 需要有效证书 - **HTTP**: 可以使用自签名证书 ### 3. 单点故障 - **风险**: Traefik 成为单点故障 - **缓解**: Traefik 本身也是高可用的 --- **结论**: 完全可行!通过 Traefik 统一访问 Consul 和 Nomad 是一个优秀的架构改进,提供了更好的可维护性和可靠性。