167 lines
4.2 KiB
Markdown
167 lines
4.2 KiB
Markdown
# Traefik 配置管理指南
|
||
|
||
## 🎯 配置与应用分离的最佳实践
|
||
|
||
### ⚠️ 重要:避免低逼格操作
|
||
|
||
**❌ 错误做法(显得很low):**
|
||
- 修改Nomad job文件来添加新域名
|
||
- 重新部署整个Traefik服务
|
||
- 把配置嵌入在应用定义中
|
||
|
||
**✅ 正确做法(优雅且专业):**
|
||
|
||
## 配置文件分离架构
|
||
|
||
### 1. 配置文件位置
|
||
|
||
- **动态配置**: `/root/mgmt/components/traefik/config/dynamic.yml`
|
||
- **应用配置**: `/root/mgmt/components/traefik/jobs/traefik-cloudflare-git4ta-live.nomad`
|
||
|
||
### 2. 关键特性
|
||
|
||
- ✅ **热重载**: Traefik配置了`file`提供者,支持`watch: true`
|
||
- ✅ **自动生效**: 修改YAML配置文件后自动生效,无需重启
|
||
- ✅ **配置分离**: 配置与应用完全分离,符合最佳实践
|
||
|
||
### 3. 添加新域名的工作流程
|
||
|
||
```bash
|
||
# 只需要编辑配置文件
|
||
vim /root/mgmt/components/traefik/config/dynamic.yml
|
||
|
||
# 添加新的服务配置
|
||
services:
|
||
new-service-cluster:
|
||
loadBalancer:
|
||
servers:
|
||
- url: "https://new-service.tailnet-68f9.ts.net:8080"
|
||
healthCheck:
|
||
path: "/health"
|
||
interval: "30s"
|
||
timeout: "15s"
|
||
|
||
# 添加新的路由配置
|
||
routers:
|
||
new-service-ui:
|
||
rule: "Host(`new-service.git-4ta.live`)"
|
||
service: new-service-cluster
|
||
entryPoints:
|
||
- websecure
|
||
tls:
|
||
certResolver: cloudflare
|
||
|
||
# 保存后立即生效,无需重启!
|
||
```
|
||
|
||
### 4. 架构优势
|
||
|
||
- 🚀 **零停机时间**: 配置变更无需重启服务
|
||
- 🔧 **灵活管理**: 独立管理配置和应用
|
||
- 📝 **版本控制**: 配置文件可以独立版本管理
|
||
- 🎯 **专业标准**: 符合现代DevOps最佳实践
|
||
|
||
## 当前服务配置
|
||
|
||
### 已配置的服务
|
||
|
||
1. **Consul集群**
|
||
- 域名: `consul.git-4ta.live`
|
||
- 后端: 多节点负载均衡
|
||
- 健康检查: `/v1/status/leader`
|
||
|
||
2. **Nomad集群**
|
||
- 域名: `nomad.git-4ta.live`
|
||
- 后端: 多节点负载均衡
|
||
- 健康检查: `/v1/status/leader`
|
||
|
||
3. **Waypoint服务**
|
||
- 域名: `waypoint.git-4ta.live`
|
||
- 后端: `hcp1.tailnet-68f9.ts.net:9701`
|
||
- 协议: HTTPS (跳过证书验证)
|
||
|
||
4. **Vault服务**
|
||
- 域名: `vault.git-4ta.live`
|
||
- 后端: `warden.tailnet-68f9.ts.net:8200`
|
||
- 健康检查: `/ui/`
|
||
|
||
5. **Authentik服务**
|
||
- 域名: `authentik.git-4ta.live`
|
||
- 后端: `authentik.tailnet-68f9.ts.net:9443`
|
||
- 协议: HTTPS (跳过证书验证)
|
||
- 健康检查: `/flows/-/default/authentication/`
|
||
|
||
6. **Traefik Dashboard**
|
||
- 域名: `traefik.git-4ta.live`
|
||
- 服务: 内置dashboard
|
||
|
||
### SSL证书管理
|
||
|
||
- **证书解析器**: Cloudflare DNS Challenge
|
||
- **自动续期**: Let's Encrypt证书自动管理
|
||
- **存储位置**: `/opt/traefik/certs/acme.json`
|
||
- **强制HTTPS**: 所有HTTP请求自动重定向到HTTPS
|
||
|
||
## 故障排除
|
||
|
||
### 检查服务状态
|
||
|
||
```bash
|
||
# 检查Traefik API
|
||
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/overview
|
||
|
||
# 检查路由配置
|
||
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/http/routers
|
||
|
||
# 检查服务配置
|
||
curl -s http://hcp1.tailnet-68f9.ts.net:8080/api/http/services
|
||
```
|
||
|
||
### 检查证书状态
|
||
|
||
```bash
|
||
# 检查SSL证书
|
||
openssl s_client -connect consul.git-4ta.live:443 -servername consul.git-4ta.live < /dev/null 2>/dev/null | openssl x509 -noout -subject -issuer
|
||
|
||
# 检查证书文件
|
||
ssh root@hcp1 "cat /opt/traefik/certs/acme.json | jq '.cloudflare.Certificates'"
|
||
```
|
||
|
||
### 查看日志
|
||
|
||
```bash
|
||
# 查看Traefik日志
|
||
nomad logs -tail traefik-cloudflare-v1
|
||
|
||
# 查看特定错误
|
||
nomad logs -tail traefik-cloudflare-v1 | grep -i "error\|warn\|fail"
|
||
```
|
||
|
||
## 最佳实践
|
||
|
||
1. **配置管理**
|
||
- 始终使用`dynamic.yml`文件管理路由配置
|
||
- 避免修改Nomad job文件
|
||
- 使用版本控制管理配置文件
|
||
|
||
2. **服务发现**
|
||
- 优先使用Tailscale网络地址
|
||
- 配置适当的健康检查
|
||
- 使用HTTPS协议(跳过自签名证书验证)
|
||
|
||
3. **SSL证书**
|
||
- 依赖Cloudflare DNS Challenge
|
||
- 监控证书自动续期
|
||
- 定期检查证书状态
|
||
|
||
4. **监控和日志**
|
||
- 启用Traefik API监控
|
||
- 配置访问日志
|
||
- 定期检查服务健康状态
|
||
|
||
## 记住
|
||
|
||
**配置与应用分离是现代基础设施管理的核心原则!**
|
||
|
||
这种架构不仅提高了系统的灵活性和可维护性,更体现了专业的DevOps实践水平。
|