【问题标题】:Why is an HTTP 500 returned when hitting API endpoint via KrakenD API Gateway?为什么通过 KrakenD API 网关访问 API 端点时返回 HTTP 500?
【发布时间】:2021-11-09 21:56:29
【问题描述】:

问题总结:

我有一个在 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 端点会返回相同的东西,但事实并非如此。

这是我的 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

我尝试用谷歌搜索,但结果似乎与我的问题不相符。

【问题讨论】:

    标签: krakend


    【解决方案1】:

    500 错误是 KrakenD 无法处理您的后端响应时的默认状态码。

    在您显示的 KrakenD 配置中,我们可以看到您告诉 KrakenD 来自后端(encoding)的响应是一个 JSON 对象,但您的后端返回一个字符串 Hello World,这不是一个 JSON。

    KrakenD 日志将显示如下内容:

    Error #01: invalid character 'H' looking for beginning of value

    H 来自Hello World。

    如果您想使用字符串而不是 json,请使用 string 作为 encoding 的值。如果您想要来自后端的响应,请在 encodingoutput_encoding 中使用 no-op

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-03
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 1970-01-01
      • 2020-08-30
      相关资源
      最近更新 更多