mgmt/consul-traefik-integration.md

192 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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