请帮助我,因为我收到“从上游服务器收到无效响应”错误,使用Dockerized Kong从REST端点获取数据。
我尝试使用Kong访问的REST服务正在我的localhost上运行。
Kong要求添加API:
curl -i -X POST \
--url http://localhost:8001/apis/ \
--data 'name=ping' \
--data 'upstream_url=http://localhost:8080/v1/employee/ping' \
--data 'hosts=localhost'
通过孔转发请求:
curl -i -X GET \
--url http://localhost:8000/ \
--header 'Host:localhost'
我通过Kong转发请求时出错:
[root@c1c865250782 etc]# curl -i -X GET --url http://localhost:8000/ --
header 'Host:localhost'
HTTP/1.1 502 Bad Gateway
Date: Fri, 29 Dec 2017 08:53:40 GMT
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: kong/0.11.2
An invalid response was received from the upstream server
请帮我解决这个问题。
谢谢, 哈拉
答案 0 :(得分:3)
我认为您遇到了开始使用Docker时遇到的经典IP /主机问题。关键在于您必须注意让dockerized Kong能够从docker容器中到达localhost
。这里的问题(很可能)是Kong(在docker内)试图访问http://localhost:8080
。但对孔来说,这就是它自己运行的容器。
要进行此类测试,您必须找到本地计算机的IP地址,并将其添加为upstream_url
。根据您的计算机所在位置,家庭网络或公司网络中的位置,类似10.x.y.z
或192.168.x.y
。命令ifconfig
(macOS)或ipconfig
(Windows)将帮助您找到该地址。通过使用此IP,Kong现在可以解析您本地计算机的端口8080,而不是转到自己的端口8080.
请注意,这意味着每次更改机器的IP地址时都需要在Kong中重新配置API。根据它是否是笔记本电脑,或者您使用DHCP等,这或多或少会有所不同。
tl; dr:上游URL必须是一个URL,使Kong能够解析从Docker容器内部看到的目标 。