192 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			192 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # 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 是一个很好的架构改进。
 |