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