Windows 上的 Dockererized Kong 给出“从上游服务器收到无效响应”

Posted

技术标签:

【中文标题】Windows 上的 Dockererized Kong 给出“从上游服务器收到无效响应”【英文标题】:Dockererized Kong on windows giving "An invalid response was received from the upstream server" 【发布时间】:2018-06-09 18:10:51 【问题描述】:

请帮助我,因为我在使用 Dockerized Kong 从 REST 端点获取数据时收到“从上游服务器收到无效响应”错误。

我尝试使用 Kong 访问的 REST 服务正在我的本地主机上运行。

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'

通过 Kong 转发请求:

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

请帮我解决这个问题。

谢谢, 卡马尔

【问题讨论】:

【参考方案1】:

我认为您在开始使用 Docker 时遇到了经典的 IP/主机问题。这里的关键是你必须注意让你的 dockerized Kong 能够从 docker 容器内部访问你的localhost 。这里的问题(很可能)是 Kong(在 docker 内部)试图访问 http://localhost:8080。但是对于 Kong,这就是它自己运行的容器。

要进行此类测试,您必须找到本地计算机的 IP 地址并将其添加为 upstream_url。根据您的计算机在家庭网络或公司网络中的位置,这将类似于10.x.y.z192.168.x.y。命令ifconfig (macOS) 或ipconfig (Windows) 将帮助您找到该地址。通过使用此 IP,Kong 现在可以解析您本地计算机的 8080 端口,而不是转到自己的 8080 端口。

请注意,这意味着您每次更改机器的 IP 地址时都需要重新配置 Kong 中的 API。取决于它是笔记本电脑,还是使用 DHCP 等,这或多或少会经常发生。


tl;dr:上游 URL 必须是使 Kong 能够解析目标的 URL从 Docker 容器内部看到

【讨论】:

附录:在 macOS 和 Windows 上,每个 docker 容器内都有一个虚拟 DNS 条目:host.docker.internal。这可以用于这种情况。不幸的是,这个特殊的主机名在 Linux 上可用。 嗨,但是我该如何设置这个host.docker.internal 你没有设置host.docker.internal,它是由 Docker for Mac 或 Docker for Windows 自动设置的。它就像解析到本地 docker 主机的 DNS 名称。因此,在这里,在您的上游 API 定义中,您指的是例如http://host.docker.local:8080 或您的服务正在运行的任何地方(在您的机器上本地)。参见例如docs.docker.com/docker-for-mac/networking 或 docs.docker.com/docker-for-windows/networking

以上是关于Windows 上的 Dockererized Kong 给出“从上游服务器收到无效响应”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows 上的 Visual Studio Code 中格式化代码

从 Windows 上的 plink.exe 在 Linux 上执行 sudo 命令

我用Python把抖音上的美女图片转字符画,期望的AI目标更进一步机器学习算法实战小项目,k聚类算法图片转化字符画

数字数据集上的K-均值聚类

Matlab中表格上的K折交叉验证

查找数字x第k为上的数字