已部署的 Krakend Django 微服务未收到 json 正文中给出的任何输入数据

问题描述 投票:0回答:1

我有一个使用 Krakend 网关部署的 Django 应用程序。所有端点均处于活动状态。但该服务无法访问请求数据。

我提出以下要求

curl --location 'https://backend-dev-url.com/api' \
--header 'Content-Type: application/json' \
--data '{
    "a":"value",
    "b":"value"
}'

这是我得到的回复

{
      
    "a": [
        "This field is required."
    ],
    "b": [
        "This field is required."
    ]
  
}

我正确传递了所有缺失的变量。但不知何故它没有到达服务。它在本地主机上完美运行。问题仅与已部署的实例有关。

下面是这个微服务的 krakend 配置部分

{
      "endpoint": "api/v1",
      "method": "POST",
      "output_encoding": "no-op",
      "backend": [
        {
          "url_pattern": "api/v1",
          "encoding": "no-op",
          "sd": "static",
          "method": "POST",
          "host": ["http://localhost:8000"],
          "disable_host_sanitize": false
        }
      ],
      "input_headers": ["Authorization","Content-Type"],
      "extra_config": {
        "qos/ratelimit/router": {
          "max_rate": 100,
          "client_max_rate": 60,
          "every": "1m",
          "strategy": "ip"
        }
      }
    }

谢谢。

python django deployment microservices krakend
1个回答
0
投票

网关不会操作或过滤有效负载,除非您添加执行此操作的组件,因此,如果您发送

--data
,它会按原样到达服务。问题出在其他地方。

我发现您通过的配置有些不一致。

  1. curl
    调用端点
    /api
    ,但您的配置声明
    /api/v1
    。因此,要么您在此处粘贴了错误的配置,要么请求将无法到达您期望的位置
  2. 在生产中,Django 应用程序与 KrakenD 在同一台机器上,这很奇怪。我看到后端指向
    localhost:8000
    。如果您使用不同的机器或 Docker 容器,则必须将此主机更新为正确的主机。
© www.soinside.com 2019 - 2024. All rights reserved.