krakend.json是唯一需手动编写的配置文件,必须包含endpoint和backend字段,url_pattern须以/开头且不包含host,host需单独指定并含完整协议,extra_config用于启用限流、jwt等高级功能,拼写错误将静默失效。

krakend.json 是唯一需要你亲手写的配置文件,其余全是运行时行为——它不依赖数据库、不维护会话、不写日志到磁盘(除非显式开启),只要配置合法,krakend run -c krakend.json 就能直接跑起来。
端点定义必须包含 endpoint 和 backend 字段
缺一不可,否则 KrakenD 启动时报错:missing required field 'endpoint' 或 backend array is empty。常见错误是把 url_pattern 写在顶层,或者漏掉 backend 数组。
-
endpoint是对外暴露的路径,支持/users/{id}这类动态参数 -
backend是一个数组,哪怕只代理一个服务也得写成[{...}] -
url_pattern必须以/开头,且不能包含 host;host 单独写在host字段里 - 若后端是 HTTPS,
host必须写完整协议,如["https://api.example.com"],不能只写域名
extra_config 是启用高级功能的开关位置
限流、熔断、JWT 验证、缓存这些能力,不是开箱即用,全靠往 extra_config 里塞对应 key。填错路径或拼写,KrakenD 会静默忽略——不会报错,但功能不生效。
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
- 网关级限流:用
qos/ratelimit/router,不是ratelimit或rate_limit - 后端级熔断:必须写在某个
backend的extra_config下,不是全局extra_config - JWT 验证:key 是
auth/jwt,且需同时配alg、secret或pub_key_url - 所有插件(Go/Lua/CEL)都通过
plugin这个 key 加载,路径必须真实存在且有读权限
微服务场景下,host 别硬编码 IP 和端口
在 Kubernetes 或 Consul 环境里,把 host 写死成 ["http://10.244.1.5:8080"] 会导致服务重启后网关失效。KrakenD 本身不支持服务发现,得靠外部机制解决。
- 推荐方案:用环境变量注入,如
"host": ["${USER_SVC_URL}"],启动时USER_SVC_URL=http://user-svc.default.svc.cluster.local:8080 krakend run -c krakend.json - 更稳做法:配合 CI/CD,在部署前用
envsubst或 Go 模板生成最终krakend.json - 如果坚持用 DNS 名,确保容器内
/etc/resolv.conf可解析,且 KrakenD 不做 DNS 缓存(每次请求都查)
调试时先关缓存和超时,再逐个打开
刚配好 krakend.json 却返回 500 或空响应?大概率是 cache_ttl 或 timeout 在干扰判断。它们默认值不为零,但对本地调试很不友好。
- 临时关闭缓存:删掉
cache_ttl字段,或设为"0s" - 延长超时:把
timeout改成"30s",避免因后端慢而被提前切断 - 加日志:在
extra_config里加上"telemetry/logging": {"level": "DEBUG"},stderr 会输出每一步路由决策 - 验证配置语法:
krakend check -c krakend.json,它比直接 run 更快暴露 JSON 结构问题
extra_config 的路径拼写、backend 的嵌套层级、环境变量替换时机,这三个地方出错最隐蔽,也最难从日志里一眼看出。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










