kong支持db-less和postgresql两种模式:db-less模式通过kong.yml声明式配置、kong_database=off启用,适合测试与ci/cd;postgresql模式功能完整但需初始化数据库、配置权限与网络,适用于生产集群。

Kong 能直接跑在 Linux 上,但不推荐用包管理器装;DB-less 模式开箱即用,PostgreSQL 模式功能全但部署链路长——选错模式或跳过内核配置,kong start 会静默失败或 500 报错。
DB-less 模式启动最快,但必须配 KONG_DECLARATIVE_CONFIG
适合测试、CI/CD 环境或单节点轻量代理。不用数据库,靠 YAML 文件定义服务和路由,启动快、无依赖。
-
kong.conf中必须显式设database = off,否则 Kong 会尝试连 PostgreSQL 并卡住 -
KONG_DECLARATIVE_CONFIG环境变量要指向绝对路径,比如/etc/kong/kong.yml,相对路径(如./kong.yml)会被忽略 - YAML 文件里至少得有
services和routes块,空文件会导致kong start -c kong.conf启动后立即退出,日志里只显示no services found - 若用
docker run启动,记得加-v /host/path/kong.yml:/kong/config/kong.yml:ro,且容器内路径要和KONG_DECLARATIVE_CONFIG值一致
PostgreSQL 模式要先初始化 DB,kong migrations up 失败多半是权限或连接问题
生产环境推荐,支持集群、插件状态持久化、Konga 管理等。但初始化步骤多,出错点集中。
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- PostgreSQL 用户必须有
CREATEDB权限,否则kong migrations up报permission denied to create database -
pg_hba.conf必须允许本地md5认证,仅peer或ident会导致连接被拒,错误信息是failed to connect to database: FATAL: Peer authentication failed -
kong.conf中的pg_host别写localhost——它会走 TCP,而127.0.0.1才走 IPv4,Docker 容器内更建议用宿主机 IP 或 Docker 网络别名 - 执行
kong migrations up前,确保pg_port、pg_user、pg_password全部填对,漏一个就卡在waiting for database...
curl -i http://localhost:8001 返回 500?先查 net.ipv4.ip_forward 和 iptables
Kong 本身不处理底层转发,但如果你用它做反向代理又跨网段(比如容器访问宿主机服务),Linux 内核转发和防火墙规则直接影响连通性。
- 运行
sysctl net.ipv4.ip_forward,输出必须是net.ipv4.ip_forward = 1;值为 0 时,即使 Kong 配置正确,请求也会在内核层被丢弃 - Docker 默认启用
iptables规则,若手动清过规则或用了firewalld,可能拦截8000(代理端口)或8001(Admin API),用iptables -L -n -t nat | grep 800看是否漏了 DNAT/SNAT - 非 root 用户启动 Kong 时,绑定
80或443会失败,错误是bind: permission denied,改用8000或8443更稳妥 - 检查
kong.log(默认在/usr/local/kong/logs/error.log)比看 HTTP 状态码更准,500 很多时候是 upstream 连不上,不是 Kong 自身崩溃
插件加载失败常见于路径和命名冲突
比如加 rate-limiting 插件后请求返回 429 却没生效,或者 Admin API 报 plugin not found。
- 插件名必须全小写,
RateLimiting或rate_limiting都会报unknown plugin - 自定义插件放在
/usr/local/share/lua/5.1/kong/plugins/下,目录名必须和插件名一致,且含handler.lua和schema.lua - 用
config.policy=local时,Kong 不依赖外部存储,但重启后计数清零;想持久化必须用redis或cluster,且得配redis_host - 限流插件中
config.limit_by=ip是按客户端真实 IP 限,如果前面有 Nginx 或 ELB,需配real_ip_header和set_real_ip_from,否则永远限同一个 IP(通常是 LB 的)
真正麻烦的不是装不上,而是装上了但请求进不来、插件不触发、日志没报错却行为异常——这些往往卡在内核参数、网络命名空间或插件配置粒度上,得一层层剥开看,而不是重装。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










