mgmt/consul-traefik-config-examp...

4.8 KiB

通过 Traefik 连接 Consul 的配置示例

🎯 目标实现

让其他节点通过 consul.git4ta.menomad.git4ta.me 访问服务,而不是直接连接 IP。

当前状态验证

Consul 智能检测

# 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 智能检测

# Leader 检测
curl -s https://nomad.git4ta.me/v1/status/leader
# 返回: "100.90.159.68:4647" (ch2 是 leader)

🔧 节点配置示例

1. Consul 客户端配置

当前配置 (直接连接)

# /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)

# /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 客户端配置

当前配置 (直接连接)

# /etc/nomad.d/nomad.hcl
consul {
  address = "http://warden.tailnet-68f9.ts.net:8500"
}

新配置 (通过 Traefik)

# /etc/nomad.d/nomad.hcl
consul {
  address = "https://consul.git4ta.me:8500"
  # 或者使用 HTTP
  # address = "http://consul.git4ta.me:8500"
}

3. Vault 配置

当前配置 (直接连接)

# 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)

# 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 路由

# 测试 Consul 路由
curl -I https://consul.git4ta.me/v1/status/leader

# 测试 Nomad 路由  
curl -I https://nomad.git4ta.me/v1/status/leader

步骤 2: 更新节点配置

# 在目标节点上执行
# 备份现有配置
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: 重启服务

# 重启 Consul
systemctl restart consul

# 重启 Nomad
systemctl restart nomad

# 重启 Vault (如果适用)
systemctl restart vault

步骤 4: 验证连接

# 检查 Consul 连接
consul members

# 检查 Nomad 连接
nomad node status

# 检查 Vault 连接
vault status

📊 性能对比

延迟测试

# 直接连接
time curl -s http://ch4.tailnet-68f9.ts.net:8500/v1/status/leader

# 通过 Traefik
time curl -s https://consul.git4ta.me/v1/status/leader

可靠性测试

# 测试故障转移
# 1. 停止 ch4 Consul
# 2. 检查 Traefik 是否自动路由到其他节点
curl -s https://consul.git4ta.me/v1/status/leader

🎯 优势总结

1. 统一入口

  • 之前: 每个节点需要知道所有 Consul/Nomad 节点 IP
  • 现在: 只需要知道 consul.git4ta.menomad.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 是一个优秀的架构改进,提供了更好的可维护性和可靠性。