将 KrakenD 与本地 Nodejs 服务器结合使用

sty*_*yko 2 api node.js krakend

我的本地计算机上有一台正在运行的 Nodejs 服务器(带有一个 API)。

\n

我已经使用 krakend 创建了新的 docker 容器

\n
docker run -p 8080:8080 -v $PWD:/etc/krakend/ devopsfaith/krakend run --config /etc/krakend/krakend.json \n
Run Code Online (Sandbox Code Playgroud)\n

虽然,我必须对上面的命令进行一些更改,因为我在 Windows 上工作。

\n

我创建了一个 krakend.json 文件,它的内容是

\n
{\n  "version": 3,\n  "timeout": "3s",\n  "cache_ttl": "300s",\n  "port": 8080,\n  "default_hosts": ["http://localhost:3001"],\n  "endpoints": [\n    {\n      "endpoint": "/contacts",\n      "output_encoding": "json",\n      "extra_config": {\n        "qos/ratelimit/router": {\n          "max_rate": 5000\n        }\n      },\n      "backend": [\n        {\n          "host": [\n          "http://localhost:3001", \n          "http://cotacts:3001"\n          ],\n          "url_pattern": "/contacts",\n          "is_collection": "true",\n          "encoding": "json",\n          "extra_config": {\n            "backend/http": {\n              "return_error_details": "backend_alias"\n            }\n          }\n        }\n      ]\n    }\n  ]\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

但是当我使用邮递员点击网址时,http://localhost:8080/contacts我得到了

\n
[KRAKEND] 2022/03/14 - 07:26:30.305 \xe2\x96\xb6 ERROR [ENDPOINT: /contacts] Get "http://localhost:3001/contacts": dial tcp 127.0.0.1:3001: connect: connection refused\n
Run Code Online (Sandbox Code Playgroud)\n

我在这里找到了相关的\n Krakend api-gateway 连接被拒绝错误?

\n

但是,我没有得到什么改变我的情况

\n

alo*_*alo 5

在里面backend你有两个hosts负载均衡器。KrakenD 将以循环方式尝试其中之一。

"host": [
          "http://localhost:3001", 
          "http://cotacts:3001"
          ],
Run Code Online (Sandbox Code Playgroud)

如果您按照消息中所写的那样启动了 KrakenD,则这两个名称都不可用。

  1. localhost是 KrakenD 本身(不是启动 KrakenD 的主机)。KrakenD 没有任何端口3001,因此预计无法连接。你应该写你的主机IP。
  2. 我猜cotacts:3001是一些外部服务。如果您需要按名称访问此服务,则需要通过 docker compose 使用它。

您遇到的问题是 Docker 连接性,与 KrakenD 无关。KrakenD 只是抱怨它无法连接到这些服务。

最后,是"default_hosts"KrakenD中不存在的东西,它对配置没有影响,你可以删除该行。如果您想拥有一个默认主机而不需要在每个后端中声明它,只需使用host. 总之,您的配置应如下所示:

{
    "$schema": "https://www.krakend.io/schema/v3.json",
    "version": 3,
    "timeout": "3s",
    "cache_ttl": "300s",
    "port": 8080,
    "host": [
        "http://1.2.3.4:3001"
    ],
    "endpoints": [
        {
            "endpoint": "/contacts",
            "extra_config": {
                "qos/ratelimit/router": {
                    "max_rate": 5000
                }
            },
            "backend": [
                {
                    "url_pattern": "/contacts",
                    "is_collection": "true",
                    "extra_config": {
                        "backend/http": {
                            "return_error_details": "backend_alias"
                        }
                    }
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

并替换1.2.3.4为运行 Node.js 的机器的 IP。