Krakend api-网关连接被拒绝错误?

connection refused error with Krakend api-gateway?

我想看看并尝试 api-gateway 是如何工作的,我正在使用 Krakend。从技术上讲,我有一项服务,它只接收请求并回复。问题是当相关端点通过 api-gateway 触发时,作为一个非常简单的 http 服务器的服务不会收到来自 api-gateway 的请求。但是,当我通过浏览器发出获取请求并写入准确的 url http://localhost:8000/api/v1/users 时,我得到了响应。基本上,我想要的是,当我向 localhost:8099/users(即 api-gateway 发出获取请求时,我希望 api-网关向 用户发出获取请求api 并查看预期的日志。

这是我得到的错误。

Error #01: Get "http://localhost:8000/api/v1/users": dial tcp 127.0.0.1:8000: connect: connection refused

这是我放置配置的 krakend.json 文件。

{
    "version": 2,
    "host" : [
        "http://localhost:8099"
    ],
    "extra_config": {
      "github_com/devopsfaith/krakend-cors": {
        "allow_origins": [
          "*"
        ],
        "expose_headers": [
          "Content-Length"
        ],
        "max_age": "12h",
        "allow_methods": [
          "GET"
        ],
        "allow_headers": [
          "*"
        ]
      }
    },
    "timeout": "3000ms",
    "cache_ttl": "300s",
    "output_encoding": "string",
    "name": "api-gateway",
    "port": 8099,
    "read_timeout": "5s",
    "idle_timeout": "5s",
    "write_timeout": "5s",
    "read_header_timeout": "5s",
    "endpoints": [
      {
        "endpoint": "/users",
        "method" : "GET",
        "backend": [
          {
            "encoding" : "string",
            "url_pattern": "/api/v1/users",
            "method": "GET",
            "host": [
              "http://localhost:8000"
            ]
          }
        ]
      }
    ]
  }

这是我的节点 js 服务器。

const express = require('express')
const app = express()
const cors = require('cors')

var corsOptions = {
    origin: 'http://localhost:8099',
    methods: "GET, PUT"
}

app.use(cors(corsOptions))

app.get('/api/v1/users', (req, res) => {
    console.log('REQUEST => \n')
    console.log(req.url)
    console.log(req.hostname)
})

app.listen(8000, () => {console.log('server has started on 8000')})

所以,当我向地址 http://localhost:8099/users 发出 get 请求时,日志如下:

[GIN] 2021/06/30 - 22:44:05 | 500 |      4.8998ms |      172.17.0.1 | GET      "/users"
Error #01: Get "http://localhost:8000/api/v1/users": dial tcp 127.0.0.1:8000: connect: connection refused

在此处的 Krakend 文档中,它说当从后端返回超过 400 的状态代码时,“我猜”日志是用 500 代码编写的。

500 Internal Server Error Default error code, and in general, when backends return any status above 400

我确实玩过 krakend.json 文件并更改了文件的不同部分,但仍然没有用。

我知道这是一个 tcp 错误,检查了导致该错误的可能原因。 1- 端口可能崩溃了,这不是真的,因为当我直接向端点发出获取请求时 http://localhost:8000/api/v1/users 我得到了日志。

对于每个服务,docker-compose.yml 中声明的容器名称应与 krakend.json 文件中写入的名称相匹配。例如,user-service 也应在 krakend.json 文件中的 host 字段中声明为 http://user-service:$PORT

V3 更新:

如果您使用的是版本 3 krakend.json 文件

,每个人都可能需要查看这个

Using KrakenD with local nodejs server

因为,如果我们将上面的答案用于较新版本的 krakend

,则会抛出错误