200 lines
5.5 KiB
Markdown
200 lines
5.5 KiB
Markdown
# 导航页面服务
|
||
|
||
## 功能说明
|
||
|
||
自动生成的服务导航页面,定时读取 Caddy 配置文件中的域名,动态生成美观的导航网页。
|
||
|
||
## 访问地址
|
||
|
||
https://dh.u6.net3w.com
|
||
|
||
## 特性
|
||
|
||
- 🔄 **自动更新**: 每 5 分钟自动读取 Caddyfile 并更新导航页面
|
||
- 🎨 **美观界面**: 渐变背景、卡片式布局、悬停动画
|
||
- 📱 **响应式设计**: 自适应各种屏幕尺寸
|
||
- 🚀 **快速访问**: 一键跳转到所有服务
|
||
|
||
## 架构
|
||
|
||
```
|
||
┌─────────────────────────────────────┐
|
||
│ Caddy ConfigMap │
|
||
│ (包含所有域名配置) │
|
||
└──────────────┬──────────────────────┘
|
||
│
|
||
│ 挂载为只读卷
|
||
↓
|
||
┌─────────────────────────────────────┐
|
||
│ Navigation Pod │
|
||
│ ┌───────────────────────────────┐ │
|
||
│ │ Generator Container │ │
|
||
│ │ - 读取 Caddyfile │ │
|
||
│ │ - 解析域名 │ │
|
||
│ │ - 生成 HTML │ │
|
||
│ │ - 每 5 分钟更新 │ │
|
||
│ └───────────┬───────────────────┘ │
|
||
│ │ 共享卷 │
|
||
│ ↓ │
|
||
│ ┌───────────────────────────────┐ │
|
||
│ │ Nginx Container │ │
|
||
│ │ - 提供静态文件服务 │ │
|
||
│ │ - 端口 80 │ │
|
||
│ └───────────────────────────────┘ │
|
||
└─────────────────────────────────────┘
|
||
│
|
||
↓
|
||
┌─────────────────────────────────────┐
|
||
│ Traefik Ingress │
|
||
│ dh.u6.net3w.com │
|
||
└─────────────────────────────────────┘
|
||
```
|
||
|
||
## 部署方式
|
||
|
||
```bash
|
||
bash deploy.sh
|
||
```
|
||
|
||
## 工作原理
|
||
|
||
1. **Generator 容器**:
|
||
- 从 Caddy ConfigMap 挂载 Caddyfile
|
||
- Python 脚本解析 Caddyfile,提取所有 `*.u6.net3w.com` 域名
|
||
- 根据子域名前缀匹配图标和描述
|
||
- 生成完整的 HTML 页面
|
||
- 写入共享卷 `/usr/share/nginx/html/index.html`
|
||
- 每 5 分钟重复一次
|
||
|
||
2. **Nginx 容器**:
|
||
- 从共享卷读取 HTML 文件
|
||
- 提供 HTTP 服务(端口 80)
|
||
|
||
3. **Ingress**:
|
||
- 将 `dh.u6.net3w.com` 路由到 navigation 服务
|
||
|
||
## 服务图标映射
|
||
|
||
| 子域名 | 图标 | 描述 |
|
||
|--------|------|------|
|
||
| longhorn | 💾 | 分布式块存储管理 |
|
||
| grafana | 📊 | 监控数据可视化 |
|
||
| prometheus | 📈 | 指标监控系统 |
|
||
| alertmanager | 🔔 | 告警管理系统 |
|
||
| s3 | 🗄️ | 对象存储 API |
|
||
| console | 🎛️ | MinIO 管理控制台 |
|
||
| dh | 🏠 | 服务导航页面 |
|
||
| test | 🧪 | 测试服务 |
|
||
| 其他 | 🌐 | K3s 服务 |
|
||
|
||
## 添加新服务
|
||
|
||
当你在 Caddyfile 中添加新的域名配置时,导航页面会在 5 分钟内自动更新。
|
||
|
||
### 自定义图标和描述
|
||
|
||
编辑 ConfigMap 中的 `generator.py`,修改以下字典:
|
||
|
||
```python
|
||
SERVICE_ICONS = {
|
||
'newservice': '🎯', # 添加新服务的图标
|
||
# ...
|
||
}
|
||
|
||
SERVICE_DESCRIPTIONS = {
|
||
'newservice': '新服务的描述', # 添加新服务的描述
|
||
# ...
|
||
}
|
||
```
|
||
|
||
然后重新部署:
|
||
|
||
```bash
|
||
kubectl apply -f deployment.yaml
|
||
kubectl rollout restart deployment navigation -n navigation
|
||
```
|
||
|
||
## 手动触发更新
|
||
|
||
如果需要立即更新导航页面:
|
||
|
||
```bash
|
||
# 重启 generator 容器
|
||
kubectl rollout restart deployment navigation -n navigation
|
||
```
|
||
|
||
## 查看日志
|
||
|
||
```bash
|
||
# 查看 generator 日志
|
||
kubectl logs -n navigation -l app=navigation -c generator -f
|
||
|
||
# 查看 nginx 日志
|
||
kubectl logs -n navigation -l app=navigation -c nginx -f
|
||
```
|
||
|
||
## 自定义样式
|
||
|
||
如果需要修改页面样式,编辑 ConfigMap 中的 HTML 模板部分,然后重新部署。
|
||
|
||
## 故障排查
|
||
|
||
### 页面无法访问
|
||
|
||
```bash
|
||
# 检查 Pod 状态
|
||
kubectl get pods -n navigation
|
||
|
||
# 检查 Ingress
|
||
kubectl get ingress -n navigation
|
||
|
||
# 检查服务
|
||
kubectl get svc -n navigation
|
||
```
|
||
|
||
### 页面未更新
|
||
|
||
```bash
|
||
# 查看 generator 日志
|
||
kubectl logs -n navigation -l app=navigation -c generator
|
||
|
||
# 检查 Caddy ConfigMap
|
||
kubectl get configmap caddy-config -n default -o yaml
|
||
|
||
# 手动触发更新
|
||
kubectl rollout restart deployment navigation -n navigation
|
||
```
|
||
|
||
### Caddyfile 无法读取
|
||
|
||
确保 navigation 命名空间可以访问 default 命名空间的 ConfigMap:
|
||
|
||
```bash
|
||
# 检查 ConfigMap 挂载
|
||
kubectl describe pod -n navigation -l app=navigation
|
||
```
|
||
|
||
## 性能优化
|
||
|
||
- **更新频率**: 默认 5 分钟,可在 `generator.py` 中修改 `time.sleep(300)`
|
||
- **缓存**: Nginx 自动缓存静态文件
|
||
- **资源限制**: 可根据需要添加资源限制
|
||
|
||
## 卸载
|
||
|
||
```bash
|
||
kubectl delete namespace navigation
|
||
```
|
||
|
||
## 未来改进
|
||
|
||
- [ ] 添加服务健康状态检查
|
||
- [ ] 支持服务分组
|
||
- [ ] 添加搜索功能
|
||
- [ ] 支持深色模式
|
||
- [ ] 添加访问统计
|
||
|
||
---
|
||
|
||
**导航页面让您的服务一目了然!** 🚀
|