# Dashboard 看不到路由和证书的排查指南 ## 问题现象 测试脚本成功创建了路由和证书,但在 Dashboard 面板中看不到。 ## 验证数据确实存在 ### 通过 Admin API 验证 ```bash # 检查路由 curl -s http://localhost:9180/apisix/admin/routes/test.jingrowtools.cn \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' # 检查 SSL curl -s http://localhost:9180/apisix/admin/ssls/00000000000000000023 \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' ``` ### 通过 etcd 验证 ```bash # 检查路由 docker exec apisix-etcd-1 etcdctl get /apisix/routes/test.jingrowtools.cn # 检查 SSL docker exec apisix-etcd-1 etcdctl get /apisix/ssls/00000000000000000023 ``` ## 可能的原因和解决方案 ### 1. Dashboard 缓存问题 ⚠️ **最常见** **原因:** Dashboard 可能缓存了数据,没有实时刷新。 **解决方案:** - **刷新浏览器页面**(F5 或 Ctrl+R) - **清除浏览器缓存**(Ctrl+Shift+Delete) - **硬刷新**(Ctrl+Shift+R 或 Ctrl+F5) - **等待几秒钟**后再次查看(Dashboard 可能有轮询间隔) ### 2. Dashboard 过滤条件 **原因:** Dashboard 可能设置了过滤条件,隐藏了某些路由。 **解决方案:** - 检查 Dashboard 的搜索/过滤框,确保没有输入过滤条件 - 检查路由列表的显示选项(如:显示所有、只显示启用的等) - 尝试搜索 `test.jingrowtools.cn` 看是否能找到 ### 3. Dashboard 连接问题 **原因:** Dashboard 可能连接到了不同的 etcd 实例。 **检查方法:** ```bash # 检查 Dashboard 日志 docker logs apisix-dashboard --tail 50 | grep -i etcd # 检查 Dashboard 配置 cat /home/jingrow/apisix/dashboard_conf/conf.yaml ``` **解决方案:** - 确保 Dashboard 配置的 etcd 地址正确 - 重启 Dashboard:`docker restart apisix-dashboard` ### 4. 路由/证书状态问题 **原因:** Dashboard 可能只显示特定状态的路由/证书。 **检查方法:** ```bash # 检查路由状态 curl -s http://localhost:9180/apisix/admin/routes/test.jingrowtools.cn \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; print(json.load(sys.stdin)['value']['status'])" # 检查 SSL 状态 curl -s http://localhost:9180/apisix/admin/ssls/00000000000000000023 \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; print(json.load(sys.stdin)['value']['status'])" ``` **解决方案:** - 确保 `status: 1`(启用状态) - 如果状态为 0,需要启用 ### 5. Dashboard 版本兼容性问题 **原因:** Dashboard 版本可能与 APISIX 版本不兼容。 **检查方法:** ```bash # 检查 Dashboard 版本 docker exec apisix-dashboard cat /usr/local/apisix-dashboard/version 2>/dev/null || \ docker exec apisix-dashboard ls /usr/local/apisix-dashboard/ # 检查 APISIX 版本 docker exec apisix-apisix-1 apisix version ``` ### 6. 权限问题 **原因:** Dashboard 用户可能没有查看权限。 **解决方案:** - 检查 Dashboard 登录用户权限 - 尝试使用管理员账户登录 ## 快速排查步骤 ### 步骤 1: 验证数据存在 ```bash # 检查路由是否存在 curl -s http://localhost:9180/apisix/admin/routes \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; routes=json.load(sys.stdin)['list']; \ test=[r for r in routes if 'test.jingrowtools.cn' in str(r.get('value', {}).get('name', ''))]; \ print(f'找到测试路由: {len(test)} 个')" # 检查 SSL 是否存在 curl -s http://localhost:9180/apisix/admin/ssls \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; ssls=json.load(sys.stdin)['list']; \ test=[s for s in ssls if 'test.jingrowtools.cn' in str(s.get('value', {}).get('snis', []))]; \ print(f'找到测试 SSL: {len(test)} 个')" ``` ### 步骤 2: 刷新 Dashboard 1. 在浏览器中按 `Ctrl+Shift+R` 硬刷新 2. 等待 5-10 秒 3. 再次查看路由和 SSL 列表 ### 步骤 3: 检查 Dashboard 连接 ```bash # 重启 Dashboard docker restart apisix-dashboard # 等待启动 sleep 5 # 检查日志 docker logs apisix-dashboard --tail 20 ``` ### 步骤 4: 直接通过 Dashboard API 查询 ```bash # 访问 Dashboard API(需要登录 token) # 在浏览器中打开开发者工具(F12),查看 Network 请求 # 找到 Dashboard API 的请求,查看返回的数据 ``` ## 常见解决方案 ### 方案 1: 强制刷新(最简单) 1. 打开 Dashboard 2. 按 `Ctrl+Shift+R` 硬刷新 3. 等待几秒钟 4. 再次查看 ### 方案 2: 重启 Dashboard ```bash docker restart apisix-dashboard ``` 等待 10 秒后刷新浏览器。 ### 方案 3: 检查路由状态 如果路由状态为 0(禁用),需要启用: ```bash # 启用路由 curl -X PUT http://localhost:9180/apisix/admin/routes/test.jingrowtools.cn \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' \ -H 'Content-Type: application/json' \ -d '{ "uri": "/*", "name": "test.jingrowtools.cn", "host": "test.jingrowtools.cn", "status": 1, ... }' ``` ## 验证脚本 创建一个验证脚本检查 Dashboard 是否能访问数据: ```bash #!/bin/bash # 验证 Dashboard 数据访问 echo "检查路由..." curl -s http://localhost:9180/apisix/admin/routes \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; data=json.load(sys.stdin); \ print(f'总路由数: {len(data[\"list\"])}'); \ test=[r for r in data['list'] if 'test' in str(r.get('value', {}).get('name', ''))]; \ print(f'测试路由数: {len(test)}')" echo "" echo "检查 SSL..." curl -s http://localhost:9180/apisix/admin/ssls \ -H 'X-API-KEY: 8206e6e42b6b53243c52a767cc633137' | \ python3 -c "import sys, json; data=json.load(sys.stdin); \ print(f'总 SSL 数: {len(data[\"list\"])}'); \ test=[s for s in data['list'] if 'test' in str(s.get('value', {}).get('snis', []))]; \ print(f'测试 SSL 数: {len(test)}')" ``` ## 总结 **最可能的原因:** 1. ✅ Dashboard 缓存 - 需要刷新浏览器 2. ✅ Dashboard 过滤条件 - 检查搜索框 3. ✅ 数据状态 - 确保 status=1 **快速解决:** 1. 硬刷新浏览器(Ctrl+Shift+R) 2. 等待 5-10 秒 3. 检查搜索/过滤条件 4. 如果还不行,重启 Dashboard