我已将the Docker Kong image升级到0.14.0版本,它停止响应来自容器外部的连接:
$ curl 127.0.0.1:8001 --trace-ascii dump.txt
== Info: Rebuilt URL to: 127.0.0.1:8001/
== Info: Trying 127.0.0.1...
== Info: Connected to 127.0.0.1 (127.0.0.1) port 8001 (#0)
=> Send header, 78 bytes (0x4e)
0000: GET / HTTP/1.1
0010: Host: 127.0.0.1:8001
0026: User-Agent: curl/7.47.0
003f: Accept: */*
004c:
== Info: Recv failure: Connection reset by peer
== Info: Closing connection 0
端口映射为
0.0.0.0:8000-8001-> 8000-8001 / tcp,0.0.0.0:8443-8444-> 8443-8444 / tcp
尝试从容器内部进行连接时一切正常:
/ # curl 127.0.0.1:8001
{"plugins":{"enabled_in_cluster":[], ...
端口8000可从容器的外部和内部使用。那会是什么?
答案 0 :(得分:2)
我遇到了同样的问题。原因是kong admin配置默认设置为回送地址。但是我没有修改配置文件。由于Kong Docker Image提供了一个环境变量来公开管理端口。
KONG_ADMIN_LISTEN="0.0.0.0:8001, 0.0.0.0:8444 ssl"
这会将管理端口绑定到主机端口
答案 1 :(得分:1)
问题出在/usr/local/kong/nginx-kong.conf中将管理服务器绑定到localhost
server {
server_name kong_admin;
listen 127.0.0.1:8001;
listen 127.0.0.1:8444 ssl;
...
我已将以下代码添加到我的自定义入口点中,该入口点恰好在启动nginx之前删除了此绑定:
echo "Remove the admin API localhost binding..."
sed -i "s|^\s*listen 127.0.0.1:8001;|listen 0.0.0.0:8001;|g" /usr/local/kong/nginx-kong.conf && \
sed -i "s|^\s*listen 127.0.0.1:8444 ssl;|listen 0.0.0.0:8444 ssl;|g" /usr/local/kong/nginx-kong.conf
echo "Starting nginx $PREFIX..."
exec /usr/local/openresty/nginx/sbin/nginx \
-p $PREFIX \
-c nginx.conf
当然,必须在生产中以其他方式关闭管理端口。