为什么在通过 KrakenD API 网关访问 API 端点时返回 HTTP 500?
Why is an HTTP 500 returned when hitting API endpoint via KrakenD API Gateway?
问题总结:
我在 192.168.23.231 上有一个 k3s 实例 运行。端口 30001 映射到我构建的 REST API 应用程序。端口 31166 映射到 Krakend。当我在浏览器中输入 http://192.168.23.231:31166/datamanager/hello 时,我收到一条 HTTP 500 错误消息,指出“http://192.168.23.231 目前无法处理此请求。”
如果我浏览 http://192.168.23.231:30001/hello,我会按预期得到“Hello World”,所以我知道 REST API 是 运行正确。我的期望是 Krakend 端点会 return 同样的事情,但事实并非如此。
这是我的 krakend.json 配置文件的摘录,显示端点配置:
"endpoints": [
{
"endpoint": "/datamanager/hello",
"method": "GET",
"output_encoding": "string",
"extra_config": {},
"backend": [
{
"url_pattern": "/hello",
"encoding": "json",
"sd": "static",
"method": "GET",
"extra_config": {},
"host": [
"http://datamanager.my-test.svc.cluster.local:4567"
],
"disable_host_sanitize": false
}
]
},
除非我记错了,192.168.23.231:31166/datamanager/hello
应该被 Krakend 路由到 datamanager.my-test.svc.cluster.local:4567/hello
。
我已经尝试 google 解决,但结果似乎与我的问题不太吻合。
500 错误是 KrakenD 无法处理您的后端响应时的默认状态代码。
在您展示的 KrakenD 配置中,我们可以看到您告诉 KrakenD 来自后端(encoding
)的响应是一个 JSON 对象,而不是您的后端 returns 一个字符串 Hello World
,它不是 JSON.
KrakenD 日志将显示如下内容:
Error #01: invalid character 'H' looking for beginning of value
H
来自 H
ello World。
如果您想使用字符串而不是 json,请使用 string
作为 encoding
的值。如果您想要来自后端的响应,请在 encoding
和 output_encoding
中使用 no-op
问题总结:
我在 192.168.23.231 上有一个 k3s 实例 运行。端口 30001 映射到我构建的 REST API 应用程序。端口 31166 映射到 Krakend。当我在浏览器中输入 http://192.168.23.231:31166/datamanager/hello 时,我收到一条 HTTP 500 错误消息,指出“http://192.168.23.231 目前无法处理此请求。”
如果我浏览 http://192.168.23.231:30001/hello,我会按预期得到“Hello World”,所以我知道 REST API 是 运行正确。我的期望是 Krakend 端点会 return 同样的事情,但事实并非如此。
这是我的 krakend.json 配置文件的摘录,显示端点配置:
"endpoints": [
{
"endpoint": "/datamanager/hello",
"method": "GET",
"output_encoding": "string",
"extra_config": {},
"backend": [
{
"url_pattern": "/hello",
"encoding": "json",
"sd": "static",
"method": "GET",
"extra_config": {},
"host": [
"http://datamanager.my-test.svc.cluster.local:4567"
],
"disable_host_sanitize": false
}
]
},
除非我记错了,192.168.23.231:31166/datamanager/hello
应该被 Krakend 路由到 datamanager.my-test.svc.cluster.local:4567/hello
。
我已经尝试 google 解决,但结果似乎与我的问题不太吻合。
500 错误是 KrakenD 无法处理您的后端响应时的默认状态代码。
在您展示的 KrakenD 配置中,我们可以看到您告诉 KrakenD 来自后端(encoding
)的响应是一个 JSON 对象,而不是您的后端 returns 一个字符串 Hello World
,它不是 JSON.
KrakenD 日志将显示如下内容:
Error #01: invalid character 'H' looking for beginning of value
H
来自 H
ello World。
如果您想使用字符串而不是 json,请使用 string
作为 encoding
的值。如果您想要来自后端的响应,请在 encoding
和 output_encoding
no-op