Kong在教程中找不到样品瓶容器

时间:2019-05-08 18:36:14

标签: docker kong

我开始关注this docker/KONG installation tutorial,在那里他们创建了一个名为“ kong-net”的网络,并启动了KONG和postgresql容器。

然后我跳到this docker/kong tutorial the registers a sample flask container as an API in KONG.

在使用flask服务和关联的路由配置KONG容器时,我没有看到任何警报。

样品瓶容器似乎工作正常:

curl http://localhost:5055/api/v1/test1
curl http://localhost:5055/api/v1/test2

我得到了预期的结果:

{"message":"first end point test1 is called","status_code":200}

这些命令的结果看起来不错:     curl -i -X POST --url http://localhost:8001/services/ --data'name = testApi'--data'url = http://localhost:5055'     卷曲http://localhost:8001/routes | json_pp

一切都很棒,直到我得到此命令来测试KONG:

curl -i -X GET --url http://localhost:8000/api/v1/test1 --header 'Host: localhost'

我认为KONG应该将其转发到样品瓶容器中。

相反,我看到此错误:

HTTP/1.1 502 Bad Gateway
Date: Wed, 08 May 2019 18:20:00 GMT
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Server: kong/1.1.2
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 35
Via: kong/1.1.2

An invalid response was received from the upstream server

在KONG容器的日志中,我看到以下内容:

2019/05/08 16:56:57 [error] 38#0: *167134 connect() failed (111: 
Connection refused) while connecting to upstream, client: 
172.19.0.1, server: kong, request: "GET /api/v1/test1 HTTP/1.1", 
upstream: "http://127.0.0.1:5055/api/v1/test1", host: "localhost"
172.19.0.1 - - [08/May/2019:16:56:57 +0000] "GET /api/v1/test1 
HTTP/1.1" 502 69 "-" "curl/7.59.0"

KONG似乎看不到localhost:5055。

我担心我创建的第一个教程的网络。

我尝试使用此命令停止,重建和重新运行烧瓶容器(因此,烧瓶也是网络的一部分):

docker run -d --name flask  --network=kong-net -p 5055:5055  flask:test

A,这没有帮助。同样的错误!

当我键入

docker network inspect kong-net

我现在看到烧瓶容器是kong-net的一部分。这有必要吗?

我尝试了此命令,它起作用了:

docker exec -ti kong sh -c "curl http://172.19.0.4:5055/api/v1/test1 "
{"message":"first end point test1 is called","status_code":200}

我正在使用Windows10 / cygwin-bash / docker18.09.2并已启用docker / kubernetes进行所有操作。

问题:

  1. 样品瓶应用程序是否需要加入kong-net?
  2. 该教程似乎说kong应该能够看到127.0.0.1:5055。它是否正确?教程错了吗?
  3. 如何使此命令起作用?

    curl -i -X GET --url http://localhost:8000/api/v1/test1 --header'Host:localhost'

2 个答案:

答案 0 :(得分:0)

您需要注册路线:

curl -i -X POST \
 --url http://localhost:8001/services/testApi/routes \
 --data 'hosts[]=localhost' \
 --data 'paths[]=/api/v1/test1' \
 --data 'strip_path=false' \
 --data 'methods[]=GET'

答案 1 :(得分:0)

将Kong安装为Docker容器时,“ localhost”表示Kong容器的环回地址-而不是主机。在Kong中注册的端点应该可以从Kong容器中解析。

因此,您可以更改注册以使用Kong容器可以访问的后端服务的实际IP和端口,因此,如果您的后端也是docker容器,并且其端口5055映射到主机上的端口15055,则在Kong中注册应使用主机IP和端口15055。