我在我的本地linux机器上运行了8000端口和8001,我还有kong,它运行在我的一个端口容器上,端口5000和5001上。
我的应用程序在端口8811上的tomcat服务器上的另一个容器上运行(端口fwd从8811到8080)
我已经使用以下API配置配置了我的kong容器,
curl -i -X POST \
--url http://localhost:5001/apis/ \
--data 'name=sample' \
--data 'uris=/samplewar' \
--data 'upstream_url=http://localhost:8811/sample/hello'
和我的linux机器使用以下API配置,
curl -i -X POST \
--url http://localhost:8001/apis/ \
--data 'name=sample' \
--data 'uris=/samplewar' \
--data 'upstream_url=http://localhost:8811/sample/hello'
当我卷曲访问我的示例API时,我看到来自我的Kong容器的以下错误响应,
curl -i -X GET --url http://localhost:5000/samplewar
HTTP/1.1 502 Bad Gateway
Date: Thu, 28 Dec 2017 08:25:26 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
如果我尝试在我的linux框中调用相同的API,我会看到以下成功响应。
curl -i -X GET --url http://localhost:8000/samplewar
HTTP/1.1 200 OK
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 311
Connection: keep-alive
Server: Apache-Coyote/1.1
Date: Thu, 28 Dec 2017 08:25:33 GMT
X-Kong-Upstream-Latency: 2
X-Kong-Proxy-Latency: 0
Via: kong/0.11.2
<html>
<head>
<title>Sample Application Servlet Page</title>
</head>
<body bgcolor=white>
<table border="0">
<tr>
<td>
<img src="images/tomcat.gif">
</td>
<td>
<h1>Sample Application Servlet</h1>
This is the output of a servlet that is part of
the Hello, World application.
</td>
</tr>
</table>
</body>
</html>
这里有什么问题?为什么我的Kong容器没有给出正确答案?
答案 0 :(得分:2)
经过一些试验和测试,我能够弄清楚它失败的原因。
由于Kong在一个容器中运行的场景和另一个容器中Tomcat服务器上的示例应用程序,因此必须使用tomcat容器的ip和端口配置kong容器中的upstream_url配置。 (即“upstream_url = http://172.17.0.4:8080/sample/hello”,其中172.17.0.4是我的tomcat容器的ipaddress)
curl -i -X POST \
--url http://localhost:5001/apis/ \
--data 'name=sample' \
--data 'uris=/samplewar' \
--data 'upstream_url=http://172.17.0.4:8080/sample/hello'
这解决了这个问题,但我不确定这是否是最佳问题。