220 lines
4.8 KiB
Markdown
220 lines
4.8 KiB
Markdown
# 通过 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 是一个优秀的架构改进,提供了更好的可维护性和可靠性。
|