我正在开发一个带有微服务的小项目,我想将Kong配置为我的结构的API网关,但是我无法将来自Kong的传入请求转发到我的服务。
例如,我有一个在地址172.18.0.15
和端口8006
上本地运行的docker容器。我可以在172.18.0.15:8006/compute
访问api,我想配置kong,以便能够在localhost:8001/compute
拨打同一个电话。我错过了什么吗?我的网址中应该api
,以便Kong能够发现我的api吗?这是我添加到Kong的配置,我基本上只添加了所有REST方法并将url:port设置为upstream-url字段。
{
"data": [
{
"created_at": 1514479841682,
"http_if_terminated": false,
"https_only": false,
"id": "9cf925a5-2c27-4dbc-ae2a-e70fba94ef53",
"methods": [
"GET",
"POST",
"PUT",
"DELETE"
],
"name": "compute",
"preserve_host": false,
"retries": 5,
"strip_uri": true,
"upstream_connect_timeout": 60000,
"upstream_read_timeout": 60000,
"upstream_send_timeout": 60000,
"upstream_url": "http://172.18.0.15:8006"
}
],
"total": 1
}
这对我不起作用:当我尝试通过localhost访问API时,请求会因499
错误而超时。任何帮助都非常感谢。
编辑:我尝试通过设置URI字段来添加我的API。我已经使用docker logs kong
进行了检查,看起来kong正在定义访问正确的地址,但出于某种未知原因超时:
2017/12/28 17:55:25 [error] 47#0: *103 upstream timed out (110: Connection timed out) while connecting to upstream, client: 172.17.0.1, server: kong, request: "GET /compute?origin=20,20&destination=20,20 HTTP/1.1", upstream: "http://172.18.0.15:8006/compute?origin=20,20&destination=20,20", host: "localhost:8000"
但是,如果我使用curl访问相同的地址,它可以正常工作:
# curl http://172.18.0.15:8006/compute?origin=20,20\&destination=20,20
[]
我非常怀疑其他人会遇到同样的问题,但问题出在我的Docker配置中,我忘了将api网关放在与服务相同的子网上。解决这个问题解决了我的问题。