我开始关注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进行所有操作。
问题:
如何使此命令起作用?
curl -i -X GET --url http://localhost:8000/api/v1/test1 --header'Host:localhost'
答案 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。