在Rancher K8s中部署的Kong Admin API访问/services报404
问题排查与解决:Kong Admin API 缺少 /services 等核心路径
核心原因分析
你的情况说明Kong当前运行在Kubernetes Ingress Controller模式而非传统的Admin API管理模式——根路径返回的K8s相关路径列表(比如/ingress、/status)是Kong Ingress Controller的管理端点,而非原生Kong Admin API的端点。
解决步骤
1. 检查并启用原生Admin API的Helm配置
默认情况下,Kong Helm chart可能优先启用Ingress Controller模式,需显式开启原生Admin API服务:
- 查看当前Helm配置:
helm get values kong -n <你的命名空间> - 若未包含
admin相关配置,添加以下内容后重新升级:
执行升级命令:admin: enabled: true service: type: ClusterIP # 根据需求可改为NodePort/LoadBalancerhelm upgrade kong kong/kong -n <你的命名空间> -f <自定义values文件>
2. 验证Admin API的正确访问方式
- 若使用ClusterIP类型服务,通过端口转发访问:
此时再调用kubectl port-forward svc/kong-admin 8001:8001 -n <你的命名空间>curl localhost:8001/services应返回正常响应。 - 注意:不要混淆Kong Ingress Controller的管理端口与原生Admin API端口——部分配置下两者可能复用端口,但运行模式不同会导致端点差异。
3. 确认Kong运行在db模式
检查Kong pod的环境变量,确认数据库配置为PostgreSQL:
kubectl exec -it <kong-pod-name> -n <你的命名空间> -- env | grep KONG_DATABASE
若输出不是postgres,在Helm values中补充配置:
env: database: postgres postgresql: enabled: true # 使用外部PostgreSQL时设为false,需额外配置external参数
4. 检查数据库初始化状态
确认PostgreSQL与Kong连通且初始化完成:
- 查看Kong pod日志,确认数据库连接成功:
kubectl logs <kong-pod-name> -n <你的命名空间> | grep "database connection established" - 若存在初始化失败,手动执行数据库迁移:
kubectl exec -it <kong-pod-name> -n <你的命名空间> -- kong migrations bootstrap
验证测试
完成配置后,重新端口转发Admin API服务,执行以下验证:
curl localhost:8001:应返回原生Kong Admin API的端点列表,包含/services、/routescurl localhost:8001/services:应返回空数组或已配置的服务列表(状态码200)
内容的提问来源于stack exchange,提问作者abhinavkumar
相关产品推荐
相关产品推荐

