kong启动后外部主机无法访问8001管理端口

问题描述

  1. kong启动后,在虚拟机上访问localhost:8001可以访问,但是外部机器通过[虚拟机IP:8001]无法访问
  2. 通过docker方式安装的kong,在启动之后就不存在这个问题,外部主机通过IP端口可以轻松访问

问题排查分析

ubuntu虚拟机下情况

刚安装的kong,默认监听的地址是127.0.0.1:8001,127.0.0.1:8443,可以通过查看/usr/local/kong/nginx-kong.conf来查看,如图所示:
kong.conf
也可以通过查看虚拟机端口的监听状况来看,如图所示:
端口监听状态

docker容器版本下情况

启动docker容器版本的kong,进入kong的容器内部,查看容器的端口监听状况,如图所示:
端口监听状况
也可以通过查看虚拟机端口的监听状况来看,如图所示:
端口监听状况

问题分析

问题的根本原因就是因为nginx监听的端口,kong默认将admin的管理端口只允许服务器本机访问,不允许给外部机器访问,这样很安全,但是一方面就会不方便。
仔细分析docker版本的kong启动命令:

docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
     -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
     -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 8001:8001 \
     -p 8444:8444 \
     kong

就会发现容器在启动的时候设置了一个环境变量KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl,可以参照官网说明

解决方案

修改kong的配置,让kong启动后的8001端口不再是只监听127.0.0.1下的8001端口
直接修改kong的配置文件无法生效,除非修改kong的源码

  • 方案一:设置环境变量

export KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl

  • 方案二:指定kong的启动文件,在启动文件中配置这个值

# vim /apps/kong/kong.conf

添加以下内容
admin_listen = 0.0.0.0:8001, 0.0.0.0:8444 ssl

# 保存退出,重启kong
kong start -c /apps/kong/kong.conf

这个时候查看服务器的端口监听状态已经改变了,监听端口状态:截图所示
也可以以debug方式的启动,直接查看启动的输出日志,如图所示:
kong start -c /apps/kong/kong.conf --vv
输出日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值